Docker学习笔记——构建镜像
Docker有两种构建镜像的方式:
- 使用docker commit命令;
- 使用Dockerfile文件;
以下分别介绍这两种方式。
1.docker commit
使用docker commit
命令创建镜像的步骤如下:
1. 运行容器;
2. 对容器进行修改;
3. 使用docker commit 把容器保存为镜像;
举个栗子:
使用ubuntu:16.04镜像运行一个容器实例ubuntutest。
使用docker exec
进入容器,查看/home
下的文件,发现没有文件;
然后使用 echo 'hello' > hello.txt
命令在该文件夹下创建一个hello.txt
文件。
使用 docker commit ubuntutest ubuntu-with-file:1.0
命令把修改后的ubuntutest
容器保存为ubuntu-with-file:1.0
镜像。
对ubuntu-with-file:1.0
验证如下:
如上图所示,使用新的镜像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相同的镜像。
构建过程如下:
- 进入
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
参数来指定路径。
接下来看构建镜像的过程:
- 如上如所示,首先docker 客户端把
build context
的内容发送到docker daemon
; - 执行
FROM
命令,使用ubuntu:16.04
作为基础镜像,ID是747cb2d60bbe
; - 执行
RUN
命令,创建hello.txt
文件,其中ID为3f4dbf0e0f5b
是临时容器,docker engine
在临时容器中执行命令,然后底层执行类似于docker commit
的操作保存容器ID是0e7fc79d2485
; - 删除临时容器
3f4dbf0e0f5b
; - 为镜像
0e7fc79d2485
tag,名称为ubuntu-with-file:2.0
;
对ubuntu-with-file:2.0
镜像进行验证,与预期相符。
上一篇: 第2章 ARM指令集