前言
- 本篇开始来学习下Dockerfile相关的用法
Dockerfile 简介
- Dockerfile : 是用来构建 Docker 镜像的文本文件,是有一条条构建镜像所需要的指令和参数所组成的脚本文件,类似于 Linux 中的 Shell 脚本文件
基础知识
- 每条保留字指令都 必须为大写字母 且后面要跟随至少一个参数。
- 指令按照从上到下的顺序依次执行。
- # 表示注释。
- 每条指令都会创建一个新的镜像层并对镜像进行提交。
使用Dockerfile 构建镜像步骤
- 编写Dockerfile 文件。
- 使用 docker build 命令构建镜像。
- 使用 docker run 命令运行容器
Dockerfile 构建过程
- Docker 从基础镜像上运行一个容器。
- 执行一条指令并对容器进行修改。
- 执行类似 docker commit 的操作提交一个新的镜像层。
- Docker 再基于刚才提交的镜像运行一个新的容器。
- 依次类推,直到 Dockerfile 文件中的所有指令都执行完成
Dockerfile基本结构
- Dockerfile 主要包含四部分内容:
- 基础镜像信息
- 维护者信息
- 镜像操作指令
- 容器启动时指令
Dockerfile示例
自定义centos7镜像。
要求:
- 默认登录路径为/usr
- 可以使用vim
- 编写dockerfile
# dockerfile FROM centos:7 MAINTAINER dahai<dahai@qq.com> RUN yum install-y vim WORKDIR /usr CMD /bin/bash
- 使用 docker build 命令构建镜像
docker build -f dockerfile -t my_centos:1.0 .
- 使用 docker run 命令运行容器
docker run -it my_centos:1.0
Dockerfile保留指令
指令 | 说明 |
FROM | 指定基础镜像。 |
MAINTAINER | 指定维护着信息,已过期,可以使用 LABEL xxx=yyy 来代替。 |
RUN | 镜像构建过程中运行的命令。 |
CMD | 指定启动容器时默认的命令。 |
ENTRYPOINT | 指定镜像的默认入口以及运行命令 。 |
EXPOSE | 声明镜像内服务监听的端口,一般而言,此指令只有指导意义,如:SpringBoot 项目的端口是 8080 ,而指定的 EXPOSE 是 8090 ,当然依据 8080 了。 |
ENV | 指定环境变量,可以在 docker run 的时候使用 -e 改变。 |
ADD | 复制指定的 src 路径下的内容到容器中的 dest 路径下,src 可以为 url 会自动下载,也可以为 tar 文件,会自动解压。 |
COPY | 复制本地主机的 src 路径下的内容到镜像中的 dest 路径下,但是不会自动解压等等。 |
LABEL | 指定生成镜像的元数据标签信息。 |
VOLUME | 创建数据卷挂载点。 |
USER | 指定运行容器时的用户名或 UID 。 |
WORKDIR | 配置工作目录,为后续的 RUN、CMD、ENTRYPOINT 指令配置工作目录。 |
ARG | 指定镜像内使用的参数(如版本号信息等),可以在 docker build 的时候,使用 --build-args 改变。 |
OBBUILD | 配置当创建的镜像作为其他镜像的基础镜像是,所指定的创建操作指令。 |
STOPSIGNAL | 容器退出的信号值。 |
HEALTHCHECK | 健康检查。 |
SHELL | 指定使用 shell 时的默认 shell 类型。 |
总结
- 从应用软件的角度来看,Dockerfile、Docker 镜像和 Docker 容器分别代表软件的三个不同的阶段:
- Dockerfile 是软件的原材料。
- Docker 镜像是软件的交付品。
- Docker 容器则可以认为是软件镜像的运行态,即根据镜像运行的容器实例