目录
基本结构
Dockerfile 是一个文本格式的配置文件,用户可以使用 Dockerfile 快速创建自定义镜像。
Dockerfile 由一行行命令语句组成,并且支持以 # 开头的注释行。
Docker分为四部分:
- 基础镜像信息
- 维护者信息
- 镜像操作指令
- 容器启动时默认要执行的指令
指令
FROM
FROM :定制的镜像都是基于 FROM 的镜像(FROM必须是Docker非空开头的第一行)
语法:
FROM <基础镜像>
LABEL MAINTAINER
指定维护者信息
语法:
LABEL MAINTAINER [作者] [邮箱]
RUN
RUN:用于执行后面跟着的命令行命令。有以下俩种格式:
//shell 格式
语法:
RUN <命令行的命令>
# <命令行的命令> 等同于,在终端操作的 shell 命令
//exec 格式
语法:
RUN ["可执行文件", "参数1", "参数2"]
# 例如:
# RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offline
CDM
CMD用于指定启动容器时默认要执行的命令,每个Dockerfile只能有一条CMD命令。如果指定了多条命令,只有最后一条会被执行。
如果用户启动容器时指定了运行的命令,则会覆盖掉CMD指定的命令
CMD支持三种格式:
语法:
CMD <shell 命令>
CMD ["<可执行文件或命令>","<param1>","<param2>",...]
CMD ["<param1>","<param2>",...] # 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数
EXPOSE
暴露容器的端口
在启动容器时通过-P,Docker主机会自动分配一个端口转发到指定的端口
语法:
EXPOSE <端口1> [<端口2>...]
ENV
指定一个环境变量,会被后续RUN指令使用,并在容器运行时保持
语法:
ENV <key> <value>
ENV <key1>=<value1> <key2>=<value2>...
ADD
该命令将复制指定的到容器中的。其中可以是Dockerfile所在目录的一个相对路径(文件或目录);也可以是一个URL;还可以是一个tar文件(会自动解压为目录)
语法:
ADD <src> <dest>
COPY
复制本地主机的(为Dockerfile所在目录的相对路径,文件或目录)为容器中的。目标路径不存在时会自动创建。
当使用本地目录为源目录时,推荐使用COPY
语法:
COPY [--chown=<user>:<group>] <源路径1>... <目标路径>
COPY [--chown=<user>:<group>] ["<源路径1>",... "<目标路径>"]
ENTRYPOINT
类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。
但是, 如果运行 docker run 时使用了 --entrypoint 选项,将覆盖 ENTRYPOINT 指令指定的程序。
优点:在执行 docker run 的时候可以指定 ENTRYPOINT 运行所需的参数。
注意:如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效
语法:
ENTRYPOINT <shell 命令>
ENTRYPOINT ["<executeable>","<param1>","<param2>",...]
VOLUME
创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等
语法:
VOLUME ["<路径1>", "<路径2>"...]
VOLUME <路径>
USER
用于指定执行后续命令的用户和用户组,这边只是切换后续命令执行的用户(用户和用户组必须提前已经存在)
语法:
USER <用户名>[:<用户组>]
WORKDIR
为后续的RUN、CMD、ENTRYPOINT指令配置工作目录
可以使用多个WORKDIR指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径
WORKDIR <工作目录路径>
标签:...,CMD,指定,语法,指令,ENTRYPOINT,dockerfile
From: https://www.cnblogs.com/z696/p/16641379.html