一. Docker镜像构建原理
关于Docker镜像的构建及本原理:
(1). 首先,基于一个镜像,启动一个容器;
(2). 接着,在容器中,执行相应的操作,容器记录下这些操作结果,并记录到容器存储层中;
(3). 将容器存储层中记录的变更commit到新的镜像层,并添加到原镜像中。
二. Docker镜像的构建
Docker构建镜像,通常有两种方式
-
通过
docker commit
命令,基于一个已存在的容器构建镜像。
此种方式,构建的镜像存在的问题:1. 包含了构建过程中产生的大量无用文件,体积臃肿;2. 会丢失所有镜像的操作历史,不利于维护;
因此,docker commit
操作方式,通常涌入如下两种场景:
a. 构建临时测试镜像
b. 用于容器现场的保留,比如容器被入侵之时
docker commit构建镜像的基本命令格式为:
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
其中,OPTIONS为可选参数,CONTAINER为容器的名称 REPOSITORY为要生成的镜像名称,:TAG用于指定镜像标记,可以理解为版本标记。其中的REPOSITORY如果没有指定讲生成一个匿名带HASH ID的镜像。一般建议对[REPOSITORY[:TAG]]
还是应当设置,以便于镜像识别。
为了能够更直观的理解如何通过docker commit命令来构建镜像,这里来一个小案例, 具体包含三条指令,如下:
docker run --name ubuntutest ubuntu:23.04 /bin/echo "Hello"
docker commit ubuntutest ubuntutest:0.0.1
docker run --name ubtest ubuntutest:0.0.1
最后,我们将看到输出
Hello
-
通过Dockerfile文件,使用
docker build
命令来构建镜像
通过Dockerfile构建的镜像,操作流程可以通过docker image history image_name
查看。对于如何通过Dockerfile构建docker镜像,包含两部分:Dockerfile文件的编写和docker build命令的操作。Dockerfile文件的编写以后新开文章介绍,这里先介绍一下docker build命令。
首先是命令的用法格式:
docker build [OPTIONS] PATH | URL | -
从语法格式来讲,build 后续包含了两部分:可选的OPTIONS配置 和 Dockerfile文件路径配置。其中路径配置的可以是文件路径也可以是资源的URL路径,改参数一般而言为Dockerfile所在的上级路径。在熟悉了,基本格式之后,我们要做的就是逐步熟悉OPTIONS选项了。对于OPTIONS参数,关注一下如下两个参数的配置:
- -t, --tag 此参数主要用骨设置生成镜像的镜像名及设置一个可选的tag名。参数值格式为name:tag。此参数的设置能够提高镜像的识别度。
- -f, --file 用于指定Dockerfile文件名,默认为路径下的Dockerfile, 如果我们的文件名并非Dockerfile则可以通过此参数指定。
对于docker build这里也附上一个应用实例,定义一个Dockerfile文件,文件类容如下:
FROM nginx
RUN echo '<h1>Hello, Welcome!</h1>' > /usr/share/nginx/html/index.html
接着我们执行命令:docker build -t nginx:v3 .
然后通过docker images
命令查看,将看到一个TAG为v3的nginx镜像。
最后,我们执行命令docker run --name web2 -d -p 80:80 nginx:v2
待容器启动后,在浏览器打开http://localhost即可看到网页显示为:

到此,Docker镜像构建的两种方式,就介绍完了。带后续有时间了,下一篇将探索Dockerfile文件的编写。
网友评论