怎么才是 docker 最佳实践 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hiboshi
V2EX    Docker

怎么才是 docker 最佳实践

  •  
  •   hibshi 2019-03-08 10:32:45 +08:00 6089 次点击
    这是一个创建于 2461 天前的主题,其中的信息可能已经有所发展或是发生改变。

    项目是 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.以上是否是正常的实现流程,有没有更好的流程?

    11 条回复    2019-05-27 16:01:11 +08:00
    yanaraika
        1
    yanaraika  
       2019-03-08 10:45:45 +08:00   3
    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
        2
    hiboshi  
    OP
       2019-03-08 10:58:04 +08:00
    @yanaraika 好的非常感谢。
    您说的第二点我没有看的太明白,你的意思是 volume 挂载 nginx_vhost.conf 配置文件还是 nginx 容器和 php-fpm 容器里面的项目挂载?

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

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

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

    Alpine 的 UID 和 Debian、Ubuntu 以及 macOS 都不一样。volume 到 host 之后文件权限一团糟。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5160 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 35ms UTC 01:23 PVG 09:23 LAX 17:23 JFK 20:23
    Do have faith in what you're doing.
    ubao msn 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