怎么才是 docker 最佳实践

2019-03-08 10:32:45 +08:00
 hiboshi

项目是 php-fpm + nginx

我第一次将 docker 用在生产环境,也是使用 jenkins 构建的。

我先说下我的流程 jenkins

1.在 jenkins 执行 shell 2.docker build -t php-fpm:v1 . docker build -t nginx:v1 . 3.推送到私有仓库。docker push 4.jenkins 发送 docker-compse.yml 到远程服务器( service 里面的 image 使用的是最新版本的 image ) 5.远程执行 docker-compose up -d

现在遇到下面几个问题 1.由于 php-fpm+nginx 是两个容器需要打两个 Image 是否有办法打包一个容器?(除了共用容器) 2.由于是打包的镜像,没有挂载磁盘,日志问题怎么解决的( graylog,elk?) 3.以上是否是正常的实现流程,有没有更好的流程?

5722 次点击
所在节点    Docker
11 条回复
yanaraika
2019-03-08 10:45:45 +08:00
1. 正确做法就是两个容器。每个容器只干一件事情
2. docker 有 log driver,可以接 rsyslog/logstash
3. nginx 用官方镜像,配置文件单独拿出来,同时发送配置文件 + docker-compose.yml 到远程服务器,在 docker-compose 里面用 volume 挂进去

4. build 的 tag 不要用一样的 pho-fpm:v1,使用 my-project-php:commit_hash 或者 git tag 作为标记,每次不一样
hiboshi
2019-03-08 10:58:04 +08:00
@yanaraika 好的非常感谢。
您说的第二点我没有看的太明白,你的意思是 volume 挂载 nginx_vhost.conf 配置文件还是 nginx 容器和 php-fpm 容器里面的项目挂载?

目前我的做的是 php-fpm+nginx 打包两个镜像 每次更新都是两个。nginx 配置文件我是 build 的时候 copy 过去的,nginx 我也是用的官方的镜像。谢谢。
hiboshi
2019-03-08 10:58:38 +08:00
@hiboshi 说错了 是第三点
yanaraika
2019-03-08 11:07:41 +08:00
@hiboshi
项目是否打包到容器里没有公认的标准,一般我这边的做法是需要从官方镜像安装依赖的(例如 php 容器)把代码拷贝进去。对于挂进去就能用的(例如 nginx )容器直接用官方镜像,把静态文件和 vhost.conf 都通过 volume 挂进去。
fxxkgw
2019-03-08 11:37:36 +08:00
借楼问一下 实践上有什么减少镜像大小的方法呢 感觉随便加点东西就多了好几百 M
操作中也尽量把 RUN 的操作用 && 连接了
yum 操作也 clean all 了 但是效果还是不明显
hiboshi
2019-03-08 13:03:18 +08:00
@fxxkgw 用 alpine 镜像
dilu
2019-03-08 13:07:20 +08:00
@fxxkgw 首先选用一个比较小的镜像例如 Alpine,其次 Dockerfile 同级目录不要有别的文件,因为会被一起当成 Content 发给 Docker Deamon 处理,一起打包进镜像里面。

其次用什么装什么,不要多装,能映射出来代码的就不要放到容器内部。

尽量缩小 Dockfiel 中的指令条数,因为每一条指令都在在原来的基础上覆盖新的一层。
fxxkgw
2019-03-08 15:49:10 +08:00
@hiboshi
@dilu
谢谢两位 ;)
tomczhen
2019-03-08 15:58:14 +08:00
@dilu .dockerignore 了解一下。
dilu
2019-03-08 20:20:07 +08:00
@tomczhen 虽然你说的都对,可我就是不听啊,杠精了解一下🤓
BruceWang
2019-05-27 16:01:11 +08:00
@hiboshi

Alpine 的 UID 和 Debian、Ubuntu 以及 macOS 都不一样。volume 到 host 之后文件权限一团糟。

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

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

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

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

© 2021 V2EX