小白爱docker

Dockerfile 最佳实践

2018-07-01  本文已影响0人  wangxiaoxi

1.不安装不必要的包, nice to have的包可以不用有。

2.一个container解决一个问题。这样container更容易维护和服用

3.最小化层数, run, copy 和 add会产生层数,所以这些指令注意合并

4.多行参数可用字母顺序排列,防止重复和遗漏

5.适当运用build cache.不想要运用时可用--no-cache=true

6.善用lable去标注你的image来方便管理。

7.可用管道, 例如:RUN wget -O - https://some.site | wc -l > /number

8.运用ENV来更新PATH,以便更好的执行安装程序,例如:

ENV PATH /usr/local/nginx/bin:$PATH

CMD [“nginx”]

9.如果仅拷贝host上的文件到container,建议使用COPY而不是ADD. COPY仅支持从host上拷贝到container,而ADD还支持remote url下载和自动解压。例如:

ADD rootfs.tar.xz /.

通常,ADD 只干COPY干不了的事情。

10. 以功能来组织和运用命令。

例如:

bad practice:

ADD http://example.com/big.tar.xz /usr/src/things/

RUN tar -xJf /usr/src/things/big.tar.xz -C /usr/src/things

RUN make -C /usr/src/things all

good practice:

RUN mkdir -p /usr/src/things \

    && curl -SL http://example.com/big.tar.xz \

    | tar -xJC /usr/src/things \

    && make -C /usr/src/things all

11. 任何和数据库相关的数据都应该用volume

12. 如何一个service可以不用root,则应该用非root用户。

13. 任何cd 的指令都不应该使用,而应该使用WORKDIR

14. 运用‘multi-stage builds’来尽可能减少image的大小。’multi-stage builds‘仅17.05及更好的版本支持。

上一篇 下一篇

猜你喜欢

热点阅读