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; - 为镜像
0e7fc79d2485tag,名称为ubuntu-with-file:2.0;
对ubuntu-with-file:2.0 镜像进行验证,与预期相符。
Docker镜像构建
本文介绍了两种构建Docker镜像的方法:使用dockercommit命令及利用Dockerfile文件。通过示例详细展示了每种方法的具体步骤,并对比了它们的优缺点。
496

被折叠的 条评论
为什么被折叠?



