创建运行应用的 doker 容器最佳方法 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
herozzm
V2EX    Docker

创建运行应用的 doker 容器最佳方法

  •  1
     
  •   herozzm 2022-09-13 19:33:17 +08:00 2037 次点击
    这是一个创建于 1125 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如容器内运行 go 程序,运行 java 程序等

    我不太喜欢 Dockerfile ,都是自己下载最基础的镜像,然后进去容器里面弄好必要的环境重新打包成一个 image ,然后用过-v 方式加载宿主的应用程序并 run ,这种方式可以随时替换自己的应用。

    我看到网上的方式是将自己的应用打包进去容器里, 这样做每次更新应用就得重新打包,非常麻烦。

    大家来说说最佳的方式是什么?

    13 条回复    2022-09-13 22:25:45 +08:00
    herozzm
        1
    herozzm  
    OP
       2022-09-13 19:47:39 +08:00
    账户被降权了,现在发帖不置顶根本不会出现,哎,也不知道什么时候会恢复?
    Acoffice
        2
    Acoffice  
       2022-09-13 19:48:36 +08:00
    @herozzm #1 习惯就好
    herozzm
        3
    herozzm  
    OP
       2022-09-13 19:50:08 +08:00
    @Acoffice 还会出现
    距离创建上一个新主题还不到 2 小时,请稍等 6425 秒之后再试

    2014 的账户现在和新手账户一样
    boris93
        4
    boris93  
       2022-09-13 19:57:32 +08:00 via iPhone
    > 每次更新应用就得重新打包,非常麻烦

    搞个 CI/CD ,监听 repo ,master 有更新就自动编译、构建镜像,然后推送到仓库

    客户端起个 watchtower 容器,它监测到镜像有更新就会自动用新镜像重新启动新容器

    现在的做法听起来就像,通过替换 tomcat 里面的 class 来实现应用更新
    Rache1
        5
    Rache1  
       2022-09-13 19:58:56 +08:00   1
    应用打包到容器的,一般都是生产部署使用。开发使用直接挂载目录就好了,最佳方式仍然是 Dockerfile
    herozzm
        6
    herozzm  
    OP
       2022-09-13 20:04:27 +08:00
    @Rache1 生成部署也得更新应用版本啊,每次发送一个巨大的打包文件很夸张啊
    anubu
        7
    anubu  
       2022-09-13 20:06:19 +08:00
    你现在的方式大部分场景都不是一个好选择。
    应用分发的话,最佳应该还是 Dockerfile+CI 。
    生产部署更倾向于使用不可变镜像,状态数据尽量和环境无关,统一放在外部管理,如数据库、共享存储等,尽量做到计算和存储分离。
    可能也就本机临时起个测试环境用用吧,相对快捷一些。
    boris93
        8
    boris93  
       2022-09-13 20:07:41 +08:00 via iPhone
    @herozzm #6 企业里并不需要人工发送打包成果,打包的镜像会自动上传到私有仓库
    应用升级直接从私有库拉镜像
    killva4624
        9
    killva4624  
       2022-09-13 20:15:20 +08:00
    不知道是什么语言跑的程序。
    Dockerfile 有一些构建的技巧减少最终 build 的镜像,比如减少 Dockerfile 行数,Dockerfile 多重构建(只用第一次构建的制品)。
    以及按最常变化的放在 Dockerfile 最末行的顺序(比如 COPY 二进制),这样每次更新镜像的时候需要拉取的 layer 越少。
    ClericPy
        10
    ClericPy  
       2022-09-13 21:09:01 +08:00
    开发的时候确实 -i -t -v 就够了, 反正我 Python 都打包成一个带依赖的 zip 就可以运行, 没必要放进去, 上线时候再走 CI

    linux 上要是有个绿色版 Python 就好了, 公司非要用 conda 的, 结果 reuse_port 有 bug, 麻烦死了
    dcsuibian
        11
    dcsuibian  
       2022-09-13 21:17:47 +08:00
    开发环境和生产环境不一样吧。

    生产环境的话我肯定是 Dockerfile+编译好的程序拷贝进去。

    开发时个人偏向于直接在宿主机上弄环境,你要直接显示文件的变更的话,弄个 Dockerfile.dev ??
    ailer
        12
    ailer  
       2022-09-13 21:18:49 +08:00 via Android   1
    @herozzm 如果是 go 的话直接多重构建,最后 alpine 镜像里只有二进制文件和证书
    AoEiuV020CN
        13
    AoEiuV020CN  
       2022-09-13 22:25:45 +08:00 via Android
    > 也不知道什么时候会恢复?
    不会恢复的,注册小号或者离开,
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2824 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 13:32 PVG 21:32 LAX 06:32 JFK 09:32
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86