Dockerfile最佳实践

本文介绍了Dockerfile的最佳实践,包括保持一个容器对应一个进程、选择合适的基础镜像、优化构建过程、避免不必要的文件进入构建上下文、利用多阶段构建、减少镜像层、使用特定用户和组、环境变量的灵活使用以及理解易混淆的指令如ADD/COPY、VOLUME、CMD/ENTRYPOINT和ARG/ENV。
摘要由CSDN通过智能技术生成

Dockerfile最佳实践

一个容器对应一个进程

一个Docker容器应该只对应一个进程,也就是一个Docker 镜像一般只包含一个应用的制品包(比如.jar)。

在需要组合多个进程的场景,使用容器组(比如Docker Compose,或Kubernetes Pod)。

选用合适的基础镜像

选用基础镜像的原则:

  • 使用官方提供的基础镜像(official)

  • 基础镜像应该提供足够的支持,使得Dockerfile尽量简单(easy enough)

  • 基础镜像要足够精简,尽量不要包含不需要的内容(simple enough)

  • 使用指定标签(版本)的基础镜像,不使用latest标签的基础镜像 (explicit)

把最少改动的步骤放在最前面

把最少改动的步骤放在最前面,也就是准备应用的COPY步骤要放在安装工具和准备环境的RUN命令之后,能够重用前面构建的层的cache,防止每次都要重复构建。Dockefile中步骤一般为:

  1. 选择基础镜像,比如:
FROM openjdk:8-jdk-stretch
  1. 安装Dockerfile后面步骤需要用到的工具和docker execdebug时需要用到的工具,比如:
RUN apt-get update && apt-get upgrade -y && apt-get install -y git curl && rm -rf /var/lib/apt/lists/*
  1. 其他的一些准备环境步骤,比如:
RUN curl -fsSL ${JENKINS_URL} -o /usr/share/jenkins/jenkins.war \
  && echo "${JENKINS_SHA}  /usr/share/jenkins/jenkins.war" | sha256sum -c -
  1. 准备应用,比如:
COPY jenkins.sh /usr/local/bin/jenkins.sh
  1. 声明程序的入口点,比如:
ENTRYPOINT ["/sbin/tini", "--", "/usr/local/bin/jenkins.sh"]
  1. 暴露端口,比如:
EXPOSE 8080

Dockerfile的步骤中只有RUNCOPYADD才会创建层,其它指令的先后顺序主要是根据Dockerfile的语

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值