什么是dokerfile?
Dockerfile 是用来构建自定义 Docker 镜像的文本文档。我们通过docker build 命令用于从Dockerfile 文件构建镜像。如果你要构建自定义镜像,Dockerfile 是你必须学会的技能之一。
Dockerfile常用的指令
1、FROM 指令
FROM :
其中 tag 或 digest 是可选的,如果不使用这两个值时,会使用 latest 版本的基础镜像。
举例:From mysql:5.6
2、LABEL 指令
LABEL:用于为镜像添加元数据,多用于声明构建信息,作者、机构、组织等。格式:
LABEL = = = …
示例: LABEL version=“1.0” description=“felord.cn” by=“Felordcn”
3、ENV指令
ENV 用来设置环境变量,格式:
ENV # 之后的所有内容均会被视为其的组成部分,因此,一次只能设置一个变量
ENV = … #可以设置多个变量,每个变量为一个"=“的键值对,如果中包含空格,可以使用\来进行转义,也可以通过”"来进行标识;另外,\ 也可以用于续行
示例: ENV version 1.0.0 或者 ENV version=1.0.0
4、ARG指令
ARG 用于指定传递给构建运行时的变量,格式:
ARG [=]
通过 docker run 中的 --build-arg = 来动态赋值,不指定将使用其默认值。
5、WORKDIR指令
WORKDIR 用来指定工作目录,类似于我们通常使用的cd 命令,格式:
WORKDIR
通过 WORKDIR 设置工作目录,Dockerfile 中的其它指令 RUN、CMD、ENTRYPOINT、ADD、COPY等命令都会在该目录下执行。在使用 docker run 运行容器时,可以通过 -w 参数覆盖构建时所设置的工作目录。
6、ADD指令
ADD 用于将本地文件添加到镜像中,tar 类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似 wget,格式
示例: ADD home /path/ # 支持通配符 添加所有以"home"开头的文件 到/path/ 下
7、COPY指令
COPY 的功能类似于 ADD,但是不会自动解压文件,也不能访问网络资源
8、RUN 指令
RUN 用来执行构建镜像时执行的命令,有以下两种命令执行方式:
shell 执行格式:
RUN
示例:RUN apk update
exec 执行格式:
RUN [“executable”, “param1”, “param2”]
示例: RUN ["/dev/file", “p1”, “p2”]
需要注意的是:RUN 指令创建的中间镜像会被缓存,并会在下次构建中使用。如果不想使用缓存镜像,可在构建时指定 --no-cache 参数,示例:docker build --no-cache
9、CMD指令
CMD 构建容器后执行的命令,也就是在容器启动时才执行的命令。格式:
执行可执行文件,优先执行
CMD [“executable”,“param1”,“param2”]
设置了 ENTRYPOINT,则直接调用ENTRYPOINT添加参数 参见 CMD 讲解
CMD [“param1”,“param2”]
执行shell命令
CMD command param1 param2
示例: CMD ["/usr/bin/bash","–help"]
CMD 不同于 RUN,CMD 用于指定在容器启动时所要执行的命令,而RUN用于指定镜像构建时所要执行的命令。