本文共 1521 字,大约阅读时间需要 5 分钟。
一个容器对应一个进程
Docker容器通常应对应一个特定的进程,这意味着一个Docker镜像一般只应包含一个应用的制品包(如.jar文件)。在需要运行多个进程的场景下,应使用容器组(如Docker Compose或Kubernetes Pod)。 latest标签。FROM openjdk:8-jdk-stretch
将最少改动的步骤放在前面,以便重用前面的构建缓存,避免重复构建。Dockerfile的典型构建步骤如下:
FROM openjdk:8-jdk-stretch
RUN apt-get update && apt-get upgrade -y && apt-get install -y git curl \ && rm -rf /var/lib/apt/lists/*
COPY jenkins.sh /usr/local/bin/jenkins.sh
ENTRYPOINT ["/sbin/tini", "--", "/usr/local/bin/jenkins.sh"]
EXPOSE 8080
如果需要多阶段构建,可将Dockerfile分为两部分:
.jar文件)尽量减少RUN、COPY和ADD命令的次数,以减少镜像层的数量。例如,安装工具时尽量在一行命令中完成:
RUN apt-get install -y git curl
.dockerignore文件在构建时,Docker会将PATH路径下的所有内容作为上下文传递给Docker Daemon。如果PATH路径包含过多不必要的文件,会导致镜像构建速度变慢。通过.dockerignore文件,可以忽略不需要的文件:
.git.cache**/*.class*.md
将Dockerfile和制品包(如.jar)放置在一个干净的新目录中,再进行构建:
# docker-build.sh脚本示例#!/bin/bashset -o pipefaildocker build -t my-image .
在Dockerfile中使用ENV指令定义环境变量,并在运行时通过docker run -e指定:
ENV JENKINS_HOME=/var/jenkins_home
ADD与COPY优先使用COPY指令。ADD虽然功能强大,但可以通过命令完成(如curl下载、tar解压)。
CMD与ENTRYPOINTCMD:用于指定镜像运行的入口命令,可与ENTRYPOINT同时使用。ENTRYPOINT:用于指定镜像暴露的入口点,优先于CMD生效。ARG与ENVARG:构建时参数,可通过docker build --build-arg指定。ENV:运行时参数,可通过docker run -e指定。通过以上优化,您可以构建出高效、简洁且易于扩展的Docker镜像。遵循Dockerfile最佳实践,可以显著提升镜像构建速度和性能,同时减少镜像层的数量。
转载地址:http://zavkz.baihongyu.com/