比如容器内运行 go 程序,运行 java 程序等
我不太喜欢 Dockerfile ,都是自己下载最基础的镜像,然后进去容器里面弄好必要的环境重新打包成一个 image ,然后用过-v 方式加载宿主的应用程序并 run ,这种方式可以随时替换自己的应用。
我看到网上的方式是将自己的应用打包进去容器里, 这样做每次更新应用就得重新打包,非常麻烦。
大家来说说最佳的方式是什么?
1
herozzm OP 账户被降权了,现在发帖不置顶根本不会出现,哎,也不知道什么时候会恢复?
|
3
herozzm OP |
4
boris93 2022-09-13 19:57:32 +08:00 via iPhone
> 每次更新应用就得重新打包,非常麻烦
搞个 CI/CD ,监听 repo ,master 有更新就自动编译、构建镜像,然后推送到仓库 客户端起个 watchtower 容器,它监测到镜像有更新就会自动用新镜像重新启动新容器 现在的做法听起来就像,通过替换 tomcat 里面的 class 来实现应用更新 |
5
Rache1 2022-09-13 19:58:56 +08:00 1
应用打包到容器的,一般都是生产部署使用。开发使用直接挂载目录就好了,最佳方式仍然是 Dockerfile
|
7
anubu 2022-09-13 20:06:19 +08:00
你现在的方式大部分场景都不是一个好选择。
应用分发的话,最佳应该还是 Dockerfile+CI 。 生产部署更倾向于使用不可变镜像,状态数据尽量和环境无关,统一放在外部管理,如数据库、共享存储等,尽量做到计算和存储分离。 可能也就本机临时起个测试环境用用吧,相对快捷一些。 |
8
boris93 2022-09-13 20:07:41 +08:00 via iPhone
@herozzm #6 企业里并不需要人工发送打包成果,打包的镜像会自动上传到私有仓库
应用升级直接从私有库拉镜像 |
9
killva4624 2022-09-13 20:15:20 +08:00
不知道是什么语言跑的程序。
Dockerfile 有一些构建的技巧减少最终 build 的镜像,比如减少 Dockerfile 行数,Dockerfile 多重构建(只用第一次构建的制品)。 以及按最常变化的放在 Dockerfile 最末行的顺序(比如 COPY 二进制),这样每次更新镜像的时候需要拉取的 layer 越少。 |
10
ClericPy 2022-09-13 21:09:01 +08:00
开发的时候确实 -i -t -v 就够了, 反正我 Python 都打包成一个带依赖的 zip 就可以运行, 没必要放进去, 上线时候再走 CI
linux 上要是有个绿色版 Python 就好了, 公司非要用 conda 的, 结果 reuse_port 有 bug, 麻烦死了 |
11
dcsuibian 2022-09-13 21:17:47 +08:00
开发环境和生产环境不一样吧。
生产环境的话我肯定是 Dockerfile+编译好的程序拷贝进去。 开发时个人偏向于直接在宿主机上弄环境,你要直接显示文件的变更的话,弄个 Dockerfile.dev ?? |
13
AoEiuV020CN 2022-09-13 22:25:45 +08:00 via Android
> 也不知道什么时候会恢复?
不会恢复的,注册小号或者离开, |