学习文档地址
上篇文章:【docker 】基于Dockerfile创建镜像
Dockerfile指令文档地址
.dockerignore 文件
Dockerfile指令
常见的指令
Dockerfile 指令 | 说明 |
FROM | 指定基础镜像,用于后续的指令构建。 |
MAINTAINER | 指定Dockerfile的作者/维护者。(已弃用,推荐使用LABEL指令) |
LABEL | 添加镜像的元数据,使用键值对的形式。 |
RUN | 在构建过程中在镜像中执行命令。 |
CMD | 指定容器创建时的默认命令。(可以被覆盖) |
ENTRYPOINT | 设置容器创建时的主要命令。(不可被覆盖) |
EXPOSE | 声明容器运行时监听的特定网络端口。 |
ENV | 在容器内部设置环境变量。 |
ADD | 将文件、目录或远程URL复制到镜像中。 |
COPY | 将文件或目录复制到镜像中。 |
VOLUME | 为容器创建挂载点或声明卷。 |
WORKDIR | 设置后续指令的工作目录。 |
USER | 指定后续指令的用户上下文。 |
ARG | 定义在构建过程中传递给构建器的变量,可使用 "docker build" 命令设置。 |
ONBUILD | 当该镜像被用作另一个构建过程的基础时,添加触发器。 |
STOPSIGNAL | 设置发送给容器以退出的系统调用信号。 |
HEALTHCHECK | 定义周期性检查容器健康状态的命令。 |
SHELL | 覆盖Docker中默认的shell,用于RUN、CMD和ENTRYPOINT指令。 |
注释
指令不区分大小写。然而,惯例是他们要大写,以便更容易地将他们与论点区分开来。
Docker按顺序运行Dockerfile中的指令。Dockerfile必须以FROM指令开头。这可能在解析器指令、注释和全局范围的ARG之后。FROM指令指定要从中构建的父映像。FROM前面只能有一个或多个ARG指令,这些指令声明Dockerfile中FROM行中使用的参数。
Docker 将以开头的行视为#注释,除非该行是有效的 解析器指令。行中其他任何位置的标记#都被视为参数。
为了向后兼容,注释 ( #
) 和指令(例如RUN
)之前的前导空格将被忽略,但不鼓励这样做。在这些情况下,不会保留前导空格,因此以下示例是等效的:
示例1:
# 第一个Dockerfile
FROM nginx
RUN echo "<h1>程序员食堂 的第一个Dockerfile </h1>" >> /usr/share/nginx/html/index.html
指令参数中的空格(例如下面的命令RUN
)将被保留
示例2:
# 第一个Dockerfile
FROM nginx
RUN echo "<h1>程序员食堂 的第一个Dockerfile </h1>" >> /usr/share/nginx/html/index.html
ENV 环境变量
环境变量官网地址
环境变量(用ENV声明)也可以在某些指令中用作由 Dockerfile. 还可以处理转义以将类似变量的语法按字面意思包含到语句中。
ENV指令将环境变量设置<key>为值 <value>。该值将存在于构建阶段中所有后续指令的环境中,并且 也可以在许多指令中内联替换。该值将被解释为其他环境变量,因此如果不转义引号字符将被删除。与命令行解析一样,引号和反斜杠可用于在值中包含空格。
示例1:
ENV MY_NAME="zhang san feng"
ENV MY_HOME=wu\ dang\ shan
ENV MY_WORK=KungFuTeacher
ENV
指令允许<key>=<value> ...
一次设置多个变量,下面的示例将在最终图像中产生相同的最终结果:
示例2:
ENV MY_NAME="zhang san feng" MY_HOME=wu\ dang\ shan MY_WORK="kung fu teacher"
构建上下文
docker build命令从Dockerfile和上下文docker buildx build构建 Docker 映像 。
构建上下文是您的构建可以访问的文件集。传递给构建命令的位置参数指定要用于构建的上下文。
命令:
docker build [OPTIONS] PATH | URL | -
可以传递以下任何输入作为构建的上下文:
- 本地目录的相对或绝对路径
- Git 存储库、tarball 或纯文本文件的远程 URL
- docker build通过标准输入通过管道传输到命令的纯文本文件或 tarball
有关可在构建中使用的不同类型的文件系统上下文的更多信息,请参阅:
- 本地文件
- Git 存储库
- 远程 tarball