首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

第四章:Dockerfile简单介绍及使用

前言

前一章节,介绍了 常用的命令。在基本使用上,熟悉这些常用的命令基本上就够了。但在一些场景下,比如在部署 应用时,通常我们都是打成 包,然后利用 命令进行运行jar包。这个时候我们就能通过编写 进行自动化部署了(可能这个比喻不太恰当⊙﹏⊙‖∣)。总体来说,可利用 文件自定义镜像内容,改变原始镜像的一些行为,以满足个性化需求。

Dockerfile介绍

Dockerfile是一个文本文件,里面包含了若干条指令,每条指令描述了构建镜像的细节。简单来说,它就是由一系列指令和参数构成的脚本文件,从而构建出一个新的镜像文件。

Dockerfile格式

简单来说, 格式一般如下:

这里以一个修改 镜像首页为示例(此镜像使用说明详见:https://hub.docker.com/_/nginx/),简单说明:

然后利用 命令进行关键。

注意:这里最后面有个 ,路径参数,而 表示是当前路径。

控制台会显示具体每一个执行说明

查看镜像列表,就能看见刚刚构建的镜像了:

然后,我们运行下:

之后访问宿主服务地址:http://宿主IP, 即可看见修改后的首页了:

同时,利用 命令,查看镜像元数据,就可以看见刚刚指定的值了。

所以可以看出Dockerfile主要分为四个部分 、 、 、 。下一部分就主要讲解下关于 的命令说明。

Dockerfile命令说明

FROM 指定基础镜像

放在第一行,其格式为:

若想构建一个最小的镜像,不想基于其他任何镜像时。可直接

LABEL 镜像元数据

可以设置镜像的任何元数据,格式为:

例如:

然后利用 命令进行查看。

ENV 设置环境变量

主要就是设置环境变量,之后的命令都可以用此变量进行赋值,格式如下:

VOLUME 定义匿名卷

VOLUME用于创建挂载点,即向基于所构建镜像创始的容器添加卷:

一个卷可以存在于一个或多个容器的指定目录,该目录可以绕过联合文件系统,并具有以下功能:

卷可以容器间共享和重用

容器并不一定要和其它容器共享卷

修改卷后会立即生效

对卷的修改不会对镜像产生影响

卷会一直存在,直到没有任何容器在使用它

让我们可以将源代码、数据或其它内容添加到镜像中,而又不并提交到镜像中,并使我们可以多个容器间共享这些内容。

COPY 复制文件

主要就是构建镜像时,进行拷贝文件到镜像的指定路径下,格式为:

ADD 更高级的复制文件

指令和 的格式和性质基本一致。但是在 基础上增加了一些功能。比如 可以是一个 ,这种情况下, 引擎会试图去下载这个链接的文件放到 去。

EXPOSE 设置监听端口

为镜像设置监听端口,容器运行时会监听改端口,格式为:

如, 镜像,监听了80端口

同时,也能指定协议名,如:

ARG 设置构建参数

该命令用于设置构建参数,该参数在容器运行时是获取不到的,只有在构建时才能获取。这也是其和 的区别。

使用举例:

RUN 执行命令

在镜像的构建过程中执行特定的命令,并生成一个中间镜像。格式:

这也是很常用的一个功能了。第一种后边直接跟shell命令

在linux操作系统上默认 /bin/sh -c

在windows操作系统上默认 cmd /S /C

第二种是类似于函数调用。

可将 理解成为可执行文件,后面就是两个参数。

两种写法比对:

注意:多行命令不要写多个 ,原因是 中每一个指令都会建立一层.多少个RUN就构建了多少层镜像,会造成镜像的臃肿、多层,不仅仅增加了构件部署的时间,还容易出错。

书写时的换行符是

CMD 启动时命令

功能为容器启动时要运行的命令,语法有三种写法

第三种比较好理解了,就时 这种执行方式和写法,第一种和第二种其实都是可执行文件加上参数的形式:举例说明两种写法:

补充细节:这里边包括参数的一定要用双引号,就是双引号 ,不能是单引号。千万不能写成 。原因是参数传递后, 解析的是一个 。

ENTRYPOINT 启动默认命令

用于给容器配置一个可执行程序。也就是说,每次使用镜像创建容器时,通过 指定的程序都会被设置为默认程序。 有以下两种形式:

与 非常类似,不同的是通过 执行的命令不会覆盖 ,而 命令中指定的任何参数,都会被当做参数再次传递给 。 中只允许有一个 命令,多指定时会覆盖前面的设置,而只执行最后的 指令。 运行容器时指定的参数都会被传递给 ,且会覆盖 CMD 命令指定的参数。如,执行 时, 参数将被传递给入口点。也可以通 重写 入口点。如:可以像下面这样指定一个容器执行程序:

这里以上面 章节,作为例子:

使用 构建镜像,并将镜像指定为 :

构建完成后,使用 启动一个容器:

在运行容器时,我们使用了 ,这个参数将会被传递给 ,最终在容器中执行的命令为 。此时,可利用 查看下,最后效果是一样的。

WORKDIR 指定工作目录

用于在容器内设置一个工作目录:

通过 设置工作目录后, 中其后的命令 、 、 、 、 等命令都会在该目录下执行。

USER 指定当前用户

用于指定运行镜像所使用的用户:

使用 指定用户后, 中其后的命令 、 、 都将使用该用户。镜像构建完成后,通过 运行容器时,可以通过 参数来覆盖所指定的用户。

其他命令

还有像 、 、 及其 等命令,不是十分常用或者已经弃用的,这里不阐述了。主要是没看懂具体啥意思,⊙﹏⊙‖∣。大家可通过其官网进行查看下:https://docs.docker.com/engine/reference/builder/

总结

本章节主要是介绍了下 的一些常用命令的说明。学习掌握了 命令使用后,我们就能进行个性化镜像的构建了。本章节只是简单演示了下,下一章节,我们就主要来一步步动手构建一个属于自己的镜像文件!

最后

若文中有错误或者遗漏之处,还望指出,共同进步!

参考资料

https://docs.docker.com/engine/reference/builder

http://www.ityouknow.com/docker/2018/03/15/docker-dockerfile-command-introduction.html

https://www.cnblogs.com/dazhoushuoceshi/p/7066041.html

老生常谈

个人QQ:

微信公众号:

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180802G097SE00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券