Docker学习笔记——构建镜像

Docker有两种构建镜像的方式:

  1. 使用docker commit命令;
  2. 使用Dockerfile文件;

以下分别介绍这两种方式。


1.docker commit

使用docker commit命令创建镜像的步骤如下:
1. 运行容器;
2. 对容器进行修改;
3. 使用docker commit 把容器保存为镜像;

举个栗子:
使用ubuntu:16.04镜像运行一个容器实例ubuntutest。

ubuntutest

使用docker exec进入容器,查看/home 下的文件,发现没有文件;
然后使用 echo 'hello' > hello.txt 命令在该文件夹下创建一个hello.txt 文件。
Docker学习笔记——构建镜像_第1张图片

使用 docker commit ubuntutest ubuntu-with-file:1.0 命令把修改后的ubuntutest容器保存为ubuntu-with-file:1.0 镜像。

ubuntu-with-file:1.0 验证如下:

Docker学习笔记——构建镜像_第2张图片

如上图所示,使用新的镜像ubuntu-with-file:1.0 运行的容器ubuntuWithFile/home 目录下有 hello.txt 文件,与预期相符。

注意

虽然docker commit 可以构建镜像,但是并不推荐使用此方法。原因如下:

  • 使用此手工方法,容易出错且不可重复;
  • 使用者无法得知镜像是如何构建出来的,不知道此镜像是否安全。

尽管不推荐使用docker commit 构建镜像,但是还是要掌握此方法,因为使用Dockerfile构建镜像时,底层也是使用docker commit 命令实现的。


2.Dockerfile

Dockerfile 是一个用于构建镜像的文本文件。docker engine 通过执行Dockerfile中的命令来构建镜像,使用人员可以通过阅读Dockerfile 来了解镜像的构建过程。

又一个栗子
Dockerfile文件内容如下:

FROM ubuntu:16.04
RUN echo 'hello docker' > /home/hello.txt

这个文件也是用于构建一个和步骤1相同的镜像。
构建过程如下:

Docker学习笔记——构建镜像_第3张图片

  • 进入Dockerfile 所在的目录;
  • 使用docker build -t ubuntu-with-file:2.0 . 命令构建ubuntu-with-file:2.0 镜像。其中 -t 参数用于指定镜像的名称, . 指定当前目录为build context ,build context 为镜像提供所需的目录和文件。docker engine 默认从build context 中查找Dockerfile 文件,也可以通过-f 参数来指定路径。

接下来看构建镜像的过程:

  1. 如上如所示,首先docker 客户端把build context 的内容发送到docker daemon;
  2. 执行FROM 命令,使用ubuntu:16.04作为基础镜像,ID是747cb2d60bbe
  3. 执行RUN 命令,创建hello.txt 文件,其中ID为3f4dbf0e0f5b 是临时容器,docker engine在临时容器中执行命令,然后底层执行类似于docker commit 的操作保存容器ID是0e7fc79d2485
  4. 删除临时容器3f4dbf0e0f5b
  5. 为镜像0e7fc79d2485 tag,名称为ubuntu-with-file:2.0 ;

ubuntu-with-file:2.0 镜像进行验证,与预期相符。

你可能感兴趣的:(docker)