1. 单一职责
不同功能的应用尽量拆分为不同的容器,每个容器只负责单一业务进程
2. 良好代码风格
晦涩难懂的指令尽量添加注释
3. 最小化原则
尽量避免安装无用的软件包
4. 合理选择基础镜像
容器的核心是应用,只要基础镜像能够满足应用的运行环境即可
5. 使用 .dockerignore 文件
规则 | 含义 |
---|---|
# | # 开头的表示注释,# 后面所有内容将会被忽略 |
/tmp | 匹配当前目录下任何以 tmp 开头的文件或者文件夹 |
*.md | 匹配以 .md 为后缀的任意文件 |
tem? | 匹配以 tem 开头并且以任意单个字符结尾的文件 |
!README.md | ! 表示排除忽略 |
6. 尽量使用构建缓存
7. 正确设置时区
Ubuntu 和 Debian
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo "Asia/Shanghai" >> /etc/timezone
CentOS
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
8. 使用国内软件源加快镜像构建速度
Ubuntu
RUN sed -i 's/archive.ubuntu.com/mirrors.163.com/g' /etc/apt/sources.list
Debian
RUN sed -i 's#http://deb.debian.org#https://mirrors.163.com#g' /etc/apt/sources.list && apt-get update
CentOS
# 对于 CentOS 7
RUN sed -e 's|^mirrorlist=|#mirrorlist=|g' \
-e 's|^#baseurl=http://mirror.centos.org|baseurl=https://mirrors.163.com|g' -i.bak \
/etc/yum.repos.d/CentOS-*.repo
# 对于 CentOS 8
RUN sed -e 's|^mirrorlist=|#mirrorlist=|g' \
-e 's|^#baseurl=http://mirror.centos.org/$contentdir|baseurl=https://mirrors.163.com/centos|g' \
-i.bak \
/etc/yum.repos.d/CentOS-*.repo