Bootstrap

制作Docker镜像的两种方式

方式一:基于容器构建镜像

首先基于某个镜像启动一个运行中的容器,然后再定制这个容器的运行环境,最后基于这个容器创建一个新的镜像。
通过这种方式制作镜像时候,只会记录文件系统的变更(例如对文件的修改),不会记录非文件系统层面的状态变更(例如定义一个环境变量)
并且制作好的镜像,使用docker hisroty查看镜像时不会显示对应的构建信息。


构建原理:

1、基于某个镜像创建容器时,会基于当前镜像创建一个可写层,里面存放容器运行时对文件系统变更。

2、构建镜像时会将这个可写层基于原始镜像的一个增量更新,这样就生成了一个新镜像。所以这就是为什么非文件系统层面的变更不会记录到新镜像中的原因。

构建命令:

docker commit container-name  imagename:tag

使用场景:

因为构建镜像的时候基于容器的运行状态,所以不可重复。并且构建的镜像不包含构建过程的信息导致不透明。

所以只有在调试或修复现有镜像的某个问题时候会使用这种方式。


方式二:基于 Dockerfile 构建镜像

Dockerfile 一种由 Docker 解释的配置文件,用于自动构建Docker镜像。它包含了一系列的指令和参数,通过这些指令来高速 Docker 如何构建镜像。

Docker 会解析 Dockerfile 文件中的每个指令,然后按照顺序执行每一条指令,每一条指令的操作都会在当前镜像的基础上新增一层,完成所有指令后,所有层堆叠在一起形成最终的镜像。


构建流程

1、创建一个目录,用于指定docker的构建上下文

2、编写 Dockerfile 文件,添加对应的构建指令

3、通过 Dockerfile 文件来自动构建镜像


Dockerfile的构建特点

1、可重复:不依赖当前容器的运行状态,所以可以构建若干个相同环境的镜像。

2、自动化:只需要编写好 Dockerfile文件,会自动进行构建操作

3、Dockerfile中的每个指令都对应镜像的一层,即使不对文件系统进行变更的指令也会创建一层,但这些层不会增加镜像的体积


构建命令

# 在docker 构建上下文目录中执行该命令

docker build -t image-name:tag .
;