欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Docker学习笔记——构建镜像

程序员文章站 2022-04-19 08:52:49
...

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

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

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


1.docker commit

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

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

Docker学习笔记——构建镜像

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

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

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

Docker学习笔记——构建镜像

如上图所示,使用新的镜像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学习笔记——构建镜像

  • 进入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 镜像进行验证,与预期相符。