即学即用Docker(六):基于Dockerfile构建镜像
2019-09-03阅读 2923


还记得上一篇文章我们讲了镜像构建的三种方法,让我们再回顾一下:

 

镜像的构建有三种方法:

1. 基于运行的容器状态生成新的镜像,即docker commit;

2. 基于Dockerfile构建镜像,即docker build;

3. 利用Docker Hub自动构建镜像。

 

我们已经介绍了使用docker commit构建镜像,那这篇文章让我们讲讲如何使用Dockerfile构建镜像

 

什么是Dockerfile?

 

dockerfile,相当于是一个文档,客户可以基于dockerfile生成新的容器

 

dockerfile仅仅是用来制作镜像的源码文件,是构建容器过程中的指令,docker能够读取dockerfile的指定进行自动构建容器,基于dockerfile制作镜像,每一个指令都会创建一个镜像层,即镜像都是多层叠加而成,因此,层越多,效率越低,创建镜像,层越少越好。因此能在一个指令完成的动作尽量通过一个指令定义。

 

Dockerfile镜像制作的工作逻辑

 

首先需要有一个制作镜像的目录,该目录下有个文件,名称必须为Dockerfile,Dockerfile有指定的格式,#号开头为注释,,指定默认用大写字母来表示,以区分指令和参数,docker build读取Dockerfile是按顺序依次Dockerfile里的配置,且第一条非注释指令必须是FROM 开头,表示基于哪个基础镜像来构建新镜像。可以根据已存在的任意镜像来制作新镜像。

 

Dockerfile可以使用环境变量,用ENV来定义环境变量,变量名支持bash的变量替换,如${variable:-word},表示如果变量值存在,就使用原来的变量,变量为空时,就使用word的值作为变量的值,一般使用这个表示法。

 

Dockerfile文件说明

在这里,我只列出了一些最常用的指令。

 

FROM:指定基础镜像,必须为第一个命令

MAINTAINER: 维护者信息

RUN:构建镜像时执行的命令

ADD:将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget

COPY:功能类似ADD,但是是不会自动解压文件,也不能访问网络资源

CMD:构建容器后调用,也就是在容器启动时才进行调用。

ENTRYPOINT:配置容器,使其可执行化。配合CMD可省去"application",只使用参数。

LABEL:用于为镜像添加元数据

ENV:设置环境变量

EXPOSE:指定于外界交互的端口

VOLUME:用于指定持久化目录

WORKDIR:工作目录,类似于cd命令

USER:指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。使用USER指定用户时,可以使用用户名、UID或GID,或是两者的组合。当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户

ARG:用于指定传递给构建运行时的变量

ONBUILD:用于设置镜像触发器

......

用一张有趣的图来解释常用命令的意义:)

 21.png

 

做个小示例

                  步骤 1    在/root目录下创建一个dockerfile文件夹

           mkdir dockerfile

 

                  步骤 2    创建一个名为dockerfile1的dockerfile文件。

           cd ~/dockerfile

           touch dockerfile1

 

                  步骤 3    使用vi编辑器编辑dockerfile1,做个最简单的让大家感受一下

            vi dockerfile1

            22.jpg

                  步骤 4    构建镜像,镜像命名为httpd:v11

             docker build -t httpd:v11 -f dockerfile1 /root/dockerfile

             23.jpg

                  步骤 5    查看创建的镜像。

            docker images

             15.jpg

 

                  步骤 6    以镜像httpd:v11运行一个容器。

            docker run -d -p 8081:80 httpd:v11

 

                  步骤 7    验证容器内容。

           25.jpg

 好了,使用dockerfile制作镜像的方法,我们就讲到这里了,更多内容大家可以继续关注。

头像
韩梅
60
文章总数
165595
总阅读数