转载

Dockerfile 最佳实践

实践建议

  • 添加 .dockerignore ,像添加 .gitignore 一样,屏蔽一些我们不用的文件
  • 避免安装必须的包
  • 每个容器都只开启一个进程,使用 link 来和其他容器交互
  • 最小化容器的layers
  • 使用 / 将参数分为多行
  • 使用 build cache

命令最佳实践

  • FROM 建议使用 docker 官方镜像,基础镜像推荐 Debian ,这个镜像体积仅有100mb
  • RUN 尽可能保证可读性,参数的多的时候,使用 / 进行分割
  • apt-get
    1. 避免RUN apt-get upgrade
    2. 使用 apt-get update && apt-get install -y 组合,分开会造成 cache 问题(有可能 apt-get update 不执行)
    3. 下面是一个比较好的方案,删除下载,可以减少 image 的大小
RUN apt-get update && apt-get install -y /       aufs-tools /     automake /     build-essential /     curl /     dpkg-sig /     libcap-dev /     libsqlite3-dev /     mercurial /     reprepro /     ruby1.9.1 /     ruby1.9.1-dev /     s3cmd=1.1.* /  && rm -rf /var/lib/apt/lists/* 
  • CMD 使用这种方式 CMD [“executable”, “param1”, “param2”…]。好处是很明确的表明执行体
  • ENV 使用ENV PATH /usr/local/nginx/bin:$PATH,将一些命令加到 PATH 中。另外多使用 ENV 设置配置相关参数
  • ENTRYPOINT 可以配合 CMD 使用
ENTRYPOINT ["s3cmd"]   CMD ["--help"]   
# 还可以使用 shell 脚本配合使用 COPY ./docker-entrypoint.sh /   ENTRYPOINT ["/docker-entrypoint.sh"]   
  • USER

    不需要特殊权限,不使用 root 权限,可以使用 gosu 来更好的处理 root 相关的事情

RUN groupadd -r postgres && useradd -r -g postgres postgres   
  • WORKDIR 使用绝对地址,不然很容易产生错误和误解
原文  http://boke.io/dockerfile-zui-jia-shi-jian/
正文到此结束
Loading...