Docker学习之Dockerfile 定制镜像

栏目: 编程工具 · 发布时间: 4年前

内容简介:我们可以了解到,镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么之前提及的无法重复

我们可以了解到,镜像的定制实际上就是

定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作

的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么之前提及的无法重复

的问题、镜像构建透明性的问题、体积的问题就都会解决。这个脚本就是

Dockerfile。

认识Dockerfile

Dockerfile 是一个文本文件,其内包含了一条条的 指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。接下来以nginx为列通过Dockerfile文件来制定镜像。

在一个空白目录中,建立一个文本文件,并命名为 Dockerfile :

$ mkdir mynginx
$ cd mynginx
$ touch Dockerfile

Docker学习之Dockerfile 定制镜像

Dockerfile内容如下:

Docker学习之Dockerfile 定制镜像

这个 Dockerfile 很简单,一共就两行。涉及到了两条指令, FROM 和 RUN 。接下来就先了解这两个指令。

Dockerfile指令之FROM

FROM指令的目的就是来指定基础镜像。

所谓定制镜像,那一定是以一个镜像为基础,在其上进行定制。而FROM就是指定基础镜像,因此一个 Dockerfile 中 FROM 是必备的指令,并且 必须是第一条指令

在 Docker Hub 上有非常多的高质量的官方镜像,有可以直接拿来使用的服务类的镜像,如 nginx 、 redis 、 mongo 、 mysql 、 httpd 、 php 、 tomcat等;也有一些方便开发、构建、运行各种语言应用的镜像,如node 、 openjdk 、 pythonruby 、 golang 等。可以在其中寻找一个最符合我们最终目标的镜像为基础镜像进行定制。

Dockerfile指令之RUN

RUN 指令是用来执行命令行命令的。由于命令行的强大能力, RUN 指令在定制镜像时是最常用的指令之一。其格式有两种:

  • shell 格式: RUN <命令> ,就像直接在命令行中输入的命令一样。刚才写的Dockerfile 中的 RUN 指令就是这种格式。
RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
  • exec 格式: RUN ["可执行文件", "参数1", "参数2"] ,这更像是函数调用中的格式。

前面的文章有说过,Dockerfile 中每一个指令都会建立一层, RUN 也不例外。每一个RUN 的行为,就和刚才我们手工建立镜像的过程一样:新建立一层,在其上执行这些命令,执行结束后, commit 这一层的修改,构成新的镜像。

构建镜像

这里我们使用了 docker build 命令进行镜像构建。其格式为:

docker build [选项] <上下文路径/URL/->

在这里我们指定了最终镜像的名称 -t nginx:v2 ,构建成功后,就可以运行这个镜像了。

在Dockerfile所在目录执行如下图命令来进行镜像的构建:

Docker学习之Dockerfile 定制镜像

从命令的输出结果中,我们可以清晰的看到镜像的构建过程。在 Step 2/2 中,如同我们之前所说的那样, RUN 指令启动了一个容器 7c6c2f17c3fc ,执行了所要求的命令,并最后提交了这一层 c3d8143457af,随后删除了所用到的这个容器 7c6c2f17c3fc 。

Docker学习之Dockerfile 定制镜像

可以看到,我们刚才构建的ngnix:v2镜像就已存在了,那么就可以以这个镜像为基础启动一个容器

Docker学习之Dockerfile 定制镜像

这里再次简单说下运行一个容器的命令:

mynginx-test 容器名称。
-d 设置容器在在后台一直运行。
-p 端口进行映射,将本地 80 端口映射到容器内部的 80 端口。

最后我们在浏览器输入localhost就可以在网页中看到通过Dockerfile文件构建镜像的文本了。

Docker学习之Dockerfile 定制镜像

这里看到了内容出现编码导致乱码的问题,这是因为多数 docker 基础镜像使用locale查看编码,发现默认编码都是POSIX,这会导致中文乱码。解决方法如下:

首先使用locale -a查看容器所有语言环境

其次,dockerfile中加入以下参数重新生成镜像

ENV LANG=en_US.UTF-8

ENV TZ=Asia/Shanghai

如果有 en_US.utf8 优先使用

Docker学习之Dockerfile 定制镜像


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

CSS3 Solutions

CSS3 Solutions

Marco Casario / Apress / 2012-8-13 / GBP 35.50

CSS3 brings a mass of changes, additions, and improvements to CSS across a range of new modules. Web designers and developers now have a whole host of new techniques up their sleeves, from working wit......一起来看看 《CSS3 Solutions》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

随机密码生成器
随机密码生成器

多种字符组合密码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具