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

2022-09-13 19:33:17 +08:00
 herozzm

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

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

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

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

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

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

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

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

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

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

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

开发时个人偏向于直接在宿主机上弄环境,你要直接显示文件的变更的话,弄个 Dockerfile.dev ??
ailer
2022-09-13 21:18:49 +08:00
@herozzm 如果是 go 的话直接多重构建,最后 alpine 镜像里只有二进制文件和证书
AoEiuV020CN
2022-09-13 22:25:45 +08:00
> 也不知道什么时候会恢复?
不会恢复的,注册小号或者离开,

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/879804

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX