专栏名称: 码农小胖哥
技术公众号:码农小胖哥
目录
相关文章推荐
51好读  ›  专栏  ›  码农小胖哥

Docker 构建脚本 Dockerfile 指令全解析

码农小胖哥  · 掘金  ·  · 2019-11-17 16:01

正文

阅读 7

Docker 构建脚本 Dockerfile 指令全解析

1. 前言

Dockerfile 是用来构建自定义 Docker 镜像的文本文档。我们通过 docker build 命令用于从 Dockerfile 文件构建镜像。 如果你要构建自定义镜像, Dockerfile 是你必须学会的技能之一。

2. Dockerfile 的基本结构

Dockerfile 一般分为:基础镜像、镜像元信息、镜像操作指令和容器启动时执行指令, # Dockerfile 中的注释。

3. Dockerfile 文件说明

Docker 从上到下的顺序运行 Dockerfile 的指令,每一个指令都以 step 为步骤。而且文件的命名也必须为 Dockerfile

4. Dockerfile 常用的指令。

接下来对常用的 Dockerfile 指令进行总结。

4.1 FROM 指令

FROM 是指定基础镜像,必须为第一个命令,格式:

FROM :

其中 tag digest 是可选的,如果不使用这两个值时,会使用 latest 版本的基础镜像。

示例: FROM mysql:5.6

4.2 MAINTAINER 指令

MAINTAINER 用来声明维护者信息, 该命令已经过期 ,推荐使用 LABEL ,格式:

MAINTAINER

4.3 LABEL 指令

LABEL:用于为镜像添加元数据,多用于声明构建信息,作者、机构、组织等。格式:

LABEL = = = ...

示例: LABEL version="1.0" description="felord.cn" by="Felordcn"

使用 LABEL 指定元数据时,一条LABEL指定可以指定一或多条元数据,指定多条元数据时不同元数据之间通过空格分隔。推荐将所有的元数据通过一条LABEL指令指定,以免生成过多的中间镜像。

4.4 ENV 指令

ENV 用来设置环境变量,格式:

ENV # 之后的所有内容均会被视为其 的组成部分,因此,一次只能设置一个变量

ENV = ... #可以设置多个变量,每个变量为一个" = "的键值对,如果 中包含空格,可以使用来进行转义,也可以通过""来进行标识;另外,`` 也可以用于续行

示例: ENV version 1.0.0 或者 ENV version=1.0.0

可以通过 ${key} 在其它指令中来引用变量,如 ${version} 。我们也可以通过 docker run 中的 -e 来动态赋值

4.5 ARG 指令

ARG 用于指定传递给构建运行时的变量,格式:

ARG [= ]

通过 docker run 中的 --build-arg = 来动态赋值,不指定将使用其默认值。

4.6 WORKDIR 指令

WORKDIR 用来指定工作目录,类似于我们通常使用的 cd 命令,格式:

WORKDIR

通过 WORKDIR 设置工作目录, Dockerfile 中的其它指令 RUN CMD ENTRYPOINT ADD COPY 等命令都会在该目录下执行。在使用 docker run 运行容器时,可以通过 -w 参数覆盖构建时所设置的工作目录。

4.7 ADD 指令

ADD 用于将本地文件添加到镜像中, tar 类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似 wget ,格式:

 ADD <src>... <dest>
 # 用于支持包含空格的路径
 ADD ["<src>",... "<dest>"] 复制代码


示例:

ADD home /path/ # 支持通配符 添加所有以"home"开头的文件 到/path/ 下

4.8 COPY 指令

COPY 的功能类似于 ADD ,但是不会自动解压文件,也不能访问网络资源

4.9 RUN 指令

RUN 用来执行构建镜像时执行的命令,有以下两种命令执行方式:







请到「今天看啥」查看全文


推荐文章
酱子工厂  ·  女网友见面有技巧,笑抽!
8 年前
混搭女王  ·  裙子+裤子,千万别穿成周冬雨这样
8 年前