2. docker commit 制作镜像
docker commit 命令
docker commit 命令是 Docker 中一个用于将运行中的容器保存为新镜像的命令。它的主要作用是将容器的当前状态(包括文件系统变更和配置)捕获为一个新的镜像。
本小节我们讲述如何使用 docker commit 命令来制作 Docker 镜像。
一个容器通常有一个或多个只读的镜像层(如下图的 74fe38d11401 )和一个可写层(Writeable layer)组成,可写层用于容器运行时存放临时数据。
如下图所示:

使用 docker commit 制作镜像就是将当前容器的可写层(Writable Layer)转换为一个新的只读层,并基于原镜像的其他只读层生成一个新的镜像。这个转换为只读层的可写层,会作为新镜像的最上层。
制作步骤:
- 创建并运行一个容器。
- 向容器内添加应用程序和运行环境。
- 用 docker commit 命令将容器打包为镜像。
- 将镜像发布到其他 Linux 平台进行测试。
本节目标
我们将上节课用 Python 中的 http.server 模块搭建的 Web 服务器封装成 Docker 容器。
2.1 创建并运行一个容器
准备资料
ubuntu:24.04官方镜像(可以使用sudoc docker pull ubuntu:24.04从官方下载,也可以从百度网盘下载)。mywebsite.tar.gz网页的压缩包(需要从百度网盘下载或手动生成-参照上节课制作)
上述资料百度网盘下载地址:
-
链接地址:https://pan.baidu.com/s/1U2CUtna3oq9NFkh8ewMzdg 提取码: 9gy6
-
ubuntu:24.04官方镜像位于docker教程资料/ubuntu24.04_docker镜像/文件夹下的ubuntu24.04_docker_images.tar.xz。 - 声明:
ubuntu24.04_docker_images.tar.xz是官方下载的镜像,未经验证是否存在安全漏洞,只建议学习使用,商用后果自行承担。 mywebsite.tar.gz网页的压缩包位于docker教程资料/文件夹下的mywebsite.tar.gz。
执行 docker load 命令导入 ubuntu24.04_docker_images.tar.xz 如下:
weimingze@mzstudio:~$ sudo docker load -i ubuntu24.04_docker_images.tar.xz
3abdd8a5e7a8: Loading layer [==================================================>] 80.61MB/80.61MB
Loaded image: ubuntu:24.04
weimingze@mzstudio:~$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 24.04 602eb6fb314b 2 months ago 78.1MB
我们通过 docker history 命令可以查看这个 ubuntu:24.04 由几层组成。
weimingze@mzstudio:~$ sudo docker history ubuntu:24.04
IMAGE CREATED CREATED BY SIZE COMMENT
602eb6fb314b 2 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 2 months ago /bin/sh -c #(nop) ADD file:1d7c45546e94b90e9… 78.1MB
<missing> 2 months ago /bin/sh -c #(nop) LABEL org.opencontainers.… 0B
<missing> 2 months ago /bin/sh -c #(nop) LABEL org.opencontainers.… 0B
<missing> 2 months ago /bin/sh -c #(nop) ARG LAUNCHPAD_BUILD_ARCH 0B
<missing> 2 months ago /bin/sh -c #(nop) ARG RELEASE 0B
从上述信息可知 ubuntu:24.04 镜像一共有 6 层只读层,默认的容器主进程的执行命令是 /bin/bash
下面我们以 ubuntu:24.04 作为基础镜像创建 Python Web 服务器。
使用 docker run 命令以 ubuntu:24.04 作为基础镜像,创建并运行器一个名为 my_ubuntu 的容器。并使用 -it 选项让容器主进程 /bin/bash 和终端绑定。
weimingze@mzstudio:~$ sudo docker run -it --name my_ubuntu ubuntu:24.04
root@0d0695780c8e:/#
如果运行失败则需要使用
sudo docker rm my_ubuntu来删除容器后从创建并运行。