1. 把编译过程写进 dockerfile
- 编译过程是指程序的编译吗?
我是写入启动脚本.sh 文件中,编译后再 up 。
---- 指的就是程序的编译( go build 或者 java 之类的 build )。编译软件的版本对生成结果有影响,本机编译和环境一致的目标相悖,这是第一个隐患。
2. 把文件夹创建、文件复制过程写进 dockerfile
- 文件复制 我是想区别不大,索性都放在 compose 中方便调试。
---- 不认同这条,可以放弃使用容器了。
3. 编译过程的镜像和运行阶段的镜像分离,使用多阶段构建
---- 补充:多阶段构建和上面第一条有关。
4. 尽量少用 volume
- 少用 volume 的原因是什么?防止文件 io 冲突吗?之前遇到过,所以就复制进容器内了。
---- 跟 io 没关系。具体去看文档
5. nginx 单独容器,除非是做 nginx 功能相关开发
- 项目中有 web 部分,所以 dockerfile 中 add 了安装 nginx ,容器启动时启动 ngixn 。
---- 没有因果关系,“所以”没意义。巨大的单个容器可以只用 docker 没必要 compose 。既然用了 compose ,就要考虑多容器的优势,拆分 nginx 、Redis 、MySQL 等基础组件容器,拆开后也很容易支持动态和静态。
6. dockerfile 或者 composefile 都有 env 相关的功能
- 对 env 有一些逻辑判断,所以写入 sh 。
---- compose 的 env 功能支持简单逻辑。env 只存环境相关变量。少量逻辑放在启动脚本完全没问题。
7. compose.yml 里给每个服务取有意义的名字
- 好嘞
---- 好嘞