Docker镜像构建

一. Docker镜像构建原理

关于Docker镜像的构建及本原理:

(1). 首先,基于一个镜像,启动一个容器;

(2). 接着,在容器中,执行相应的操作,容器记录下这些操作结果,并记录到容器存储层中;

(3). 将容器存储层中记录的变更commit到新的镜像层,并添加到原镜像中。

二. Docker镜像的构建

Docker构建镜像,通常有两种方式

  1. 通过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

  1. 通过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即可看到网页显示为:

image

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容