Docker命令-commit

命令

docker commit

描述

Create a new image from a container’s changes
根据容器的更改创建新的镜像

用法

1
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

选项

1
2
3
4
5
Options:
--author , -a 指定作者
--change , -c 指定修改的Dockerfile参数,支持指令CMD|ENTRYPOINT|ENV|EXPOSE|LABEL|ONBUILD|USER|VOLUME|WORKDIR
--message , -m 提交备注信息
--pause , -p 创建镜像时暂停容器,可选参数true或false,默认为true

注意

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# 运行一个容器
$ docker run --name nginx -it -d -p 80:80 nginx:1.20.1-alpine
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a8c31015e674 nginx:1.20.1-alpine "/docker-entrypoint.…" 3 seconds ago Up 3 seconds 0.0.0.0:80->80/tcp nginx
# 进入容器并修改容器中的文件
$ docker exec -it nginx /bin/sh
/ # echo docker > /usr/share/nginx/html/index.html
/ # exit
$ curl localhost
docker
# 将修改后的容器nginx保存为新的镜像demo_nginx:v1
$ docker commit nginx demo_nginx:v1
sha256:5f1ab458849a0d70f4ef6d69983f39ce35c694b5539e32dd88b090a7e68ad198
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
demo_nginx v1 5f1ab458849a 4 seconds ago 22.7MB
nginx 1.20.1-alpine 4146b18ae794 6 months ago 22.7MB
# 停止容器nginx,启动新的容器demo_nginx并验证更改的文件内容
$ docker stop nginx
$ docker run --name demo_nginx -it -d -p 80:80 demo_nginx:v1
$ curl localhost
docker

# 查看容器demo_nginx的环境变量,等同于镜像demo_nginx:v1的环境变量
$ docker inspect -f "{{ .Config.Env }}" demo_nginx
[PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin NGINX_VERSION=1.20.1 NJS_VERSION=0.5.3 PKG_RELEASE=1]
# 修改容器的环境变量并创建新的镜像demo_nginx:v2
$ docker commit --change "ENV DEBUG=true" demo_nginx demo_nginx:v2
sha256:8ee210f7ce068f100f30b740e9b2049ba18170efdd6abf7e3e64136f35858c3b
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
demo_nginx v2 8ee210f7ce06 4 seconds ago 22.7MB
demo_nginx v1 5f1ab458849a 5 minutes ago 22.7MB
nginx 1.20.1-alpine 4146b18ae794 6 months ago 22.7MB
# 对比两个镜像的环境变量
$ docker inspect -f "{{ .Config.Env }}" demo_nginx:v1
[PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin NGINX_VERSION=1.20.1 NJS_VERSION=0.5.3 PKG_RELEASE=1]
$ docker inspect -f "{{ .Config.Env }}" demo_nginx:v2
[PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin NGINX_VERSION=1.20.1 NJS_VERSION=0.5.3 PKG_RELEASE=1 DEBUG=true]