什么是dockerfile
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。它其实就是将linux中·的命令写在了dockerfile下,通过dockerfile去执行设置好的命令。
Docker构建命令
在使用docker构建之前,先要对docker镜像的构建有一个大致的印象
Docker的构建是分层构建的,我们所执行的每一条指令,都会在docker新建一层,大致的理解图如下:
镜像构建1
镜像构建2
图片来源:
https://itnext.io/3-simple-tric
1. FROM 指定镜像源
该命令主要用来指定你需要用哪个镜像作为基础镜像,官方仓库中有很多镜像,可以通过http://hub.docker.com进行搜索,建议尽量使用官方镜像作为基础镜像,因为官方镜像都是精简过的稳定版,也可以指定多个镜像源进行构建(最终还是构建为单个镜像),指定一个基础镜像别名后,进行二次构建
以上两种构建的写法为:
- 一次构建
FROM ubuntu
- 二次构建
FROM ubuntu as image1
······# 其他构建命令
FROM image1
······# 二次构建命令
2. RUN 执行命令
RU是用来执行linux命令的指令,需要注意的是,一写需要连续执行的命令,尽量使用"\"作为分割再使用&&将命令创建(防止过多层命令构建)
RUN有两种格式为:
shell 格式:
RUN <命令行命令>
# <命令行命令> 等同于,在终端操作的 shell 命令。
exec 格式:
RUN ["可执行文件", "参数1", "参数2"]
# 例如:
# RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offline
3. 尝试构建镜像
在了解了构建的两个命令后,开始尝试构建镜像
3.1. 构建Dockerfile文件
在一个空目录下,新建一个名为Dockerfile文件,并在文件添加以下内容
3.2. 通过Dockerfile构建一个镜像
$ docker build -t nginx:v3 .
注意:构建时要在Dockerfile文件下执行命令
.:命令最后的.代表的时文件路径,如果不在该文件下,则将.替换为文件路径
使用docker images查看是否正确
至此构建成功
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指令。 |