Dockerfile 构建镜像
从 Dockerfile 构建镜像涉及三个步骤
- 1. 创建工作目录
- 2. 编写 Dockerfile 规格
- 3. 使用 docker build 命令构建镜像
1. 创建工作目录
这个根据应用实际情况,自定义
2.编写 Dockerfile 规格
dockerfile
#This is a comment line
FROM rhel7.5
LABEL description="This is a custom httpd image"
MAINTAINER Jingyan
RUN yum install -y httpd
EXPOSE 80
ENV Log "info"
ADD http://jingyan.com/img.pdf /var/www/html
COPY ./src/ var/www/html
USER apache
ENTRYPOINT ["/usr/sbin/httpd"]
CMD ["-D","FOREGROUND"]
1 井号 (#) 开头的行是注释
2 新容器镜像将在 rhel7.5 容器镜像基础上构建
可以将任何其他容器镜像用作基础镜像,而不仅限于来自操作系统分发的镜像
3 LABEL 负责添加通用元数据到镜像中
4 MAINTAINER 负责设置所生成的容器镜像的 Author 字段。您可以使用 docker inspect 命令查看镜像元数据
5 RUN 在当前镜像顶部的新层中执行命令,然后提交结果
所提交的结果将用于 Dockerfile 中的下一步
用于执行命令的 shell 是 /bin/sh
6 EXPOSE 指示容器在运行时侦听指定的网络端口
Docker 容器化环境使用此信息,通过链接的容器功能进行容器互连
EXPOSE 指令仅仅是元数据;不会使端口可从主机进行访问。docker run 命令的 -p 选项可以开放主机上的端口
7 ENV 负责定义可供容器使用的环境变量
可以在 Dockerfile 内声明多个 ENV 指令
可以在容器内使用 env 命令来查看各个环境变量
8 ADD 复制新文件、目录或远程 URL,并将它们添加到容器文件系统中
9 COPY 也复制新文件和目录,并将它们添加到容器文件系统中
COPY无法使用 URL
10 USER 指定运行容器镜像时要使用的用户名或 UID,用于 Dockerfile 中的 RUN、CMD 和ENTRYPOINT 指令
出于安全原因,最好定义 root 之外的其他用户名
11 ENTRYPOINT 指定在创建容器时要执行的默认命令
默认情况下,执行的命令是 /bin/sh -c,除非指定了 ENTRYPOINT
12 CMD 提供 ENTRYPOINT 指令的默认参数
RUN 指令负责修改镜像内容
下列指令负责添加元数据到镜像
- LABEL
- MAINTAINER
- EXPOSE
- 可以通过 RUN 和 ENTRYPOINT 指令更改容器启动时运行的默认命令
下列指令负责管理容器环境
- WORKDIR
- ENV
- USER
VOLUME 指令在容器中创建挂载点
- Dockerfile 提供了两个指令,可将资源包含在容器镜像中:
ADD
COPY
3. 使用 docker build 命令构建镜像
docker build 命令处理 Dockerfile 并根据其包含的指令构建新镜像,如:docker build -t NAME:TAG DIR
DIR 是工作目录路径。如果工作目录是 shell 的当前目录,它可以是由句号 (.) 指定的当前目录
NAME:TAG 是分配至新镜像的带标签名称。它通过 -t 选项指定。如果未指定 TAG,则镜像自动标记为 latest