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及更好的版本支持。
网友评论