注:根据官方文档https://docs.docker.com给出的最佳实践。官方文档的docker基础命令见http://wiki.too2.net/doku.php里的云计算-docker.
1.容器必须是短生命周期的。
随时可被停止、废除,被一个配置更改很小的新容器替换
2.使用 .dockerignore 文件
具体见:https://docs.docker.com/engine/reference/builder/#dockerignore-file
3.避免安装不必要的软件包
4.每一容器只运行一个进程
这样可以更多的复用。如果一个服务依赖于另一服务,可用links
https://docs.docker.com/engine/userguide/networking/default_network/dockerlinks/
5.尽量用最少数量的层
在易读和用最少层间做平衡折中。
6.跨行参数排列
可以用空格加\来写
7.编译缓存
默认情况是开启的,在已有的image中找看是否有一致的。
不使用缓存:在docker build 加–no-cache=true
Dockerfile 指示符有:FROM MAINTAINER RUN CMD LABEL EXPOSE ENV ADD COPY ENTRYPOINT VOLUME USER WORKDIR ARG ONBUILD STOPSIGNAL HEALTHCHECK SHELL
一个Dockerfile只能有一条CMD语句,否则只有最后一条有效
一个Dockerfile只能有一条HEALTHCHECK语句,否则只有最后一条有效
FROM
尽量使用官方仓库的镜你作为基础镜像
RUN
将长、复杂的RUN语句用反斜杠分割成多行
apt-get
在RUN中最常用的。避免用RUN apt-get upgrade或dist-upgrade.
如果知道指定的包需要更新,那么直接apt-get install -y something
合并RUN apt-get upgrade和apt-install在同一RUN语句中,比如:
RUN apt-get update && apt-get install -y \
package-bar \
package-baz
&& rm -rf /var/lib/apt/lists/*
在RUN语句中单独使用apt-get update 将会导致缓存问题,使用之后的apt-get install失败。
CMD
用于在镜像包含软件的运行
运行格式为 CMD ["executable", "param1", "param2…],比如:
CMD ["apache2","-DFOREGROUND"]
EXPOSE
EXPOSE指示链接容器监听端口,应该用常用端口。
ENV
更新环境变量,比如:
ENV PATH /usr/local/nginx/bin:$PATH
将使用 语句 CMD['nginx']可以直接使用
ENV还可用于设置版本数字,比如
ENV PG_VERSION 9.3
ADD和COPY
两者作用差不多,更推荐COPY,因为更透明。
COPY只支持从本地复制文件到容器,而ADD有一些其它的(比如tar 解压以及远程URL支持)比如ADD rootfs.tar.xz /
因为镜像大小的原因,强烈建议不要使用ADD从远程URL获取安装包,而是用curl或wget代替。通过这种方式可以在之后不再需要用时删除文件(比如解压缩后的原文件)
ENTRYPOINT
最佳使用方法是用于设置镜像的主命令,允许镜像被运行时像是被命令被执行一样。(使用CMD作为默认标识)
比如:
ENTRYPOINT ["s3cmd"]
CMD ["–help"]
那么就可以用docker run s3cmd来显示帮助信息了
也可以是脚本,比如:
COPY ./docker-entrypoint.sh /
ENTRYPOINT ["/docker-entrypoint.sh"]
VOLUME
可用于向外暴露容器的数据、配置、文件、文件夹
USER
如果服务不是用特权模式运行,使用USER切换到非root用户,需要在Dockerfile上先创建用户:
RUN groupadd -r postgres && useradd -r -g postgres postgres.
但时避免在容器里运行sudo,如果需要,那就干脆不要用USER了,直接用root运行。
WORKDIR
使用绝对路径,并且使用WORKDIR来代替RUN cd … && do-something
ONBUILD
一条ONBUILD命令将在本Dockerfile编译完全执行。用于给下一个Dockerfile(子Dockerfile)指示
原文出自:
http://blog.too2.net/?p=306
转载请注明转自:辛碌力成【http://blog.too2.net】
发表评论