
一文简单了解并构建DockerFile
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可抑制的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。
那么今天要介绍的DockerFile是什么呢?简单来说DockerFile用来描述Docker镜像的文件,而且是类似源码的描述。
假设现有一台机器,docker容器中有镜像如下:
我们可以简单看看greatsql/greatsql:latest
的dockerfile:
1.Dockerfile介绍
官方网站:https://hub.docker.com/
现在我们简单介绍一下dockerfile:
Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),用于构建镜像。每一条指令构建一层镜像,因此每一条指令的内容,就是描述该层镜像应当如何构建。dockerfile 用于指示 docker image build
命令自动构建Image的源代码
通过dockerfile创建镜像大致上分为三步:写Dockerfile ——>docker build——>docker run
Dockerfile 可以大致分为4个部分:
- 基础镜像信息
- 维护者信息
- 镜像操作指令
- 容器启动时执行指令
dockerfile也有一些需要注意的地方:
- dockerfile是通过从上到下的顺序运行指令的。其中第一条指令是 FROM,表示源镜像是基于什么镜像,因此也就有了所有镜像的源镜像:scratch。
- 每条保留字指令都必须是大写字母, 并且后面要跟随至少一个参数。
- 每条指令可用 # 添加注释。
- 每条指令都会创建一个新镜像层, 并对镜像进行提交。
2.Dockerfile指令解析
指令 | 解析 |
FROM | 指定基础镜像,必须为第一个命令 |
MAINTAINER | 维护者邮箱等信息 |
RUN | 构建镜像docker build时执行的命令 |
ADD | 将本地文件添加到容器中,tar 类型文件会自动解压 |
COPY | 功能类似ADD,但是是不会自动解压文件,也不能访问网络资源 |
CMD | 在docker run时会执行的命令,如果存在多个则仅最后一个生效,例如一个镜像的dockerfile的结尾是“ CMD ["/bin/bash"] ”,那么进入容器可以使用docker exec -it imageName或docker exec -it imageName /bin/bash,后者是在“ CMD ["/bin/bash"] ”的指令下面多加了一个“ CMD ["/bin/bash"] ”,根据CMD的特性,存在多个时,只让最后一个CMD生效,因此不影响 |
ENTRYPOINT | 可执行化 |
LABEL | 用于为镜像添加元数据 |
ENV | 设置环境变量 |
EXPOSE | 指定于外界交互的端口 |
VOLUME | 用于指定持久化目录 |
WORKDIR | 工作目录 |
ARG | 用于指定传递给构建运行时的变量 |
ONBUILD | 用于设置镜像触发器 |
2.1 FROM
2.2 MAINTAINER
2.3 RUN
2.4 ADD
2.5 COPY
2.6 CMD
2.7 ENTRYPOINT
2.8 LABEL
2.9 ENV
2.10 EXPOSE
2.11 VOLUME
2.12 WORKDIR
2.13 ARG
2.14 ONBUILD
3.制作镜像
以自定义一个centos镜像为例,在官方镜像的基础上添加vim和net-tools工具
- 首先创建dockerfile:
- 构建镜像:
- 查看镜像:
- 检验是否正常启动:
- 构建成功
最后,也可以测试阅读GreatSQL官方的dockerfile:https://gitee.com/GreatSQL/GreatSQL-Docker/blob/master/GreatSQL/Dockerfile,这里就不展开了。
文章转载自公众号:GreatSQL社区
