跳到主要内容

docker commit 命令

docker commit 命令用于将容器的当前状态保存为一个新的镜像。这个命令通常用于在容器中进行了一些修改后,希望将这些修改保存为一个新的镜像,以便后续使用或分享。

命令格式

docker commit [选项] 容器名 [新容器名[:标签]]

如果不指定标签,默认使用 latest 标签。

选项

  • -a, --author: 指定镜像的作者信息。
  • -m, --message: 为提交的镜像添加提交信息,类似于 Git 的 commit message。
  • -p, --pause: 在提交镜像之前暂停容器(默认行为)。使用 --pause=false 可以在提交时不暂停容器。

示例

  1. commit创建镜像

    # commit前(1个镜像)
    ~ ❯ docker images
    REPOSITORY TAG IMAGE ID CREATED SIZE
    www-zxzsk-com 25-02-25 2c191be673a9 9 hours ago 265MB
    ~ ❯ docker ps
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    79da8c3608b5 www-zxzsk-com:25-02-25 "/docker-entrypoint.…" 9 hours ago Up 12 minutes 0.0.0.0:8000->80/tcp, :::8000->80/tcp www-zxzsk-com

    # commit(用容器提交一个镜像)
    ~ ❯ docker commit www-zxzsk-com www-zxzsk-com:25-02-26
    sha256:218724e94b4f173d13b15a1a7fa22aca482c0e0743c39b77cc4e0ce7deaaadf3

    # commit后(2个镜像)
    ~ ❯ docker images
    REPOSITORY TAG IMAGE ID CREATED SIZE
    www-zxzsk-com 25-02-26 218724e94b4f 4 seconds ago 284MB
    www-zxzsk-com 25-02-25 2c191be673a9 9 hours ago 265MB

    不指定标签时为 latest

  2. commit时添加作者信息和提交信息

    # 第一次commit(27版)
    ~ ❯ docker commit -a "soulio" -m "新增两篇文章" www-zxzsk-com www-zxzsk-com:25-02-27
    sha256:299843c28c8d26900fca5c43252aacc109dac2a7d63cacd157a10e52da579606

    # 查看镜像commit记录(27版)
    ~ ❯ docker image history www-zxzsk-com:25-02-27
    IMAGE CREATED CREATED BY SIZE COMMENT
    299843c28c8d 3 minutes ago nginx -g daemon off; 19.6MB 新增两篇文章
    2c191be673a9 9 hours ago /bin/sh -c #(nop) CMD ["nginx" "-g" "daemon… 0B
    8065e8d6dd49 9 hours ago /bin/sh -c #(nop) EXPOSE 80 0B
    d514b859a42c 9 hours ago /bin/sh -c #(nop) COPY dir:188dd89178a91a16c… 77MB
    dcfe8435e3e9 9 hours ago /bin/sh -c rm /usr/share/nginx/html/index.ht… 0B
    6025739ea6b3 9 hours ago /bin/sh -c #(nop) LABEL maintainer=soulio@z… 0B
    a72860cb95fd 8 months ago CMD ["nginx" "-g" "daemon off;"] 0B buildkit.dockerfile.v0
    <missing> 8 months ago STOPSIGNAL SIGQUIT 0B buildkit.dockerfile.v0
    <missing> 8 months ago EXPOSE map[80/tcp:{}] 0B buildkit.dockerfile.v0
    <missing> 8 months ago ENTRYPOINT ["/docker-entrypoint.sh"] 0B buildkit.dockerfile.v0
    <missing> 8 months ago COPY 30-tune-worker-processes.sh /docker-ent… 4.62kB buildkit.dockerfile.v0
    <missing> 8 months ago COPY 20-envsubst-on-templates.sh /docker-ent… 3.02kB buildkit.dockerfile.v0
    <missing> 8 months ago COPY 15-local-resolvers.envsh /docker-entryp… 336B buildkit.dockerfile.v0
    <missing> 8 months ago COPY 10-listen-on-ipv6-by-default.sh /docker… 2.12kB buildkit.dockerfile.v0
    <missing> 8 months ago COPY docker-entrypoint.sh / # buildkit 1.62kB buildkit.dockerfile.v0
    <missing> 8 months ago RUN /bin/sh -c set -x && groupadd --syst… 113MB buildkit.dockerfile.v0
    <missing> 8 months ago ENV PKG_RELEASE=2~bookworm 0B buildkit.dockerfile.v0
    <missing> 8 months ago ENV NJS_RELEASE=2~bookworm 0B buildkit.dockerfile.v0
    <missing> 8 months ago ENV NJS_VERSION=0.8.4 0B buildkit.dockerfile.v0
    <missing> 8 months ago ENV NGINX_VERSION=1.27.0 0B buildkit.dockerfile.v0
    <missing> 8 months ago LABEL maintainer=NGINX Docker Maintainers <d… 0B buildkit.dockerfile.v0
    <missing> 8 months ago /bin/sh -c #(nop) CMD ["bash"] 0B
    <missing> 8 months ago /bin/sh -c #(nop) ADD file:6c4730e7b12278bc7… 74.8MB

    # 部署容器(27版)
    ~ ❯ docker run -d -P --restart always --name www-zxzsk-com-27 www-zxzsk-com:25-02-27
    65b43c26f2a655568478081975b5d1cf6c4aeaf156c819dfb954965d6f19b83f
    ~ ❯ docker ps
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    65b43c26f2a6 www-zxzsk-com:25-02-27 "/docker-entrypoint.…" 4 seconds ago Up 3 seconds 0.0.0.0:32770->80/tcp, :::32770->80/tcp www-zxzsk-com-27
    79da8c3608b5 www-zxzsk-com:25-02-25 "/docker-entrypoint.…" 9 hours ago Up 56 minutes 0.0.0.0:8000->80/tcp, :::8000->80/tcp www-zxzsk-com

    # commit第二次(28版)
    ~ ❯ docker commit -a "soulio" -m "修改主页样式" www-zxzsk-com-27 www-zxzsk-com:25-02-28
    sha256:d7d34d1fee56656a53cbbb5accbc3d279ed7a24d13bf9e03628dbf4c4041b351
    ~ ❯ docker images
    REPOSITORY TAG IMAGE ID CREATED SIZE
    www-zxzsk-com 25-02-28 d7d34d1fee56 9 seconds ago 284MB
    www-zxzsk-com 25-02-27 299843c28c8d 9 minutes ago 284MB
    www-zxzsk-com 25-02-26 218724e94b4f 45 minutes ago 284MB
    www-zxzsk-com 25-02-25 2c191be673a9 10 hours ago 265MB

    # 查看commit历史(28版)
    ~ ❯ docker image history www-zxzsk-com:25-02-28
    IMAGE CREATED CREATED BY SIZE COMMENT
    d7d34d1fee56 22 seconds ago nginx -g daemon off; 1.09kB 修改主页样式
    299843c28c8d 9 minutes ago nginx -g daemon off; 19.6MB 新增两篇文章
    2c191be673a9 10 hours ago /bin/sh -c #(nop) CMD ["nginx" "-g" "daemon… 0B
    8065e8d6dd49 10 hours ago /bin/sh -c #(nop) EXPOSE 80 0B
    d514b859a42c 10 hours ago /bin/sh -c #(nop) COPY dir:188dd89178a91a16c… 77MB
    dcfe8435e3e9 10 hours ago /bin/sh -c rm /usr/share/nginx/html/index.ht… 0B
    6025739ea6b3 10 hours ago /bin/sh -c #(nop) LABEL maintainer=soulio@z… 0B
    a72860cb95fd 8 months ago CMD ["nginx" "-g" "daemon off;"] 0B buildkit.dockerfile.v0
    <missing> 8 months ago STOPSIGNAL SIGQUIT 0B buildkit.dockerfile.v0
    <missing> 8 months ago EXPOSE map[80/tcp:{}] 0B buildkit.dockerfile.v0
    <missing> 8 months ago ENTRYPOINT ["/docker-entrypoint.sh"] 0B buildkit.dockerfile.v0
    <missing> 8 months ago COPY 30-tune-worker-processes.sh /docker-ent… 4.62kB buildkit.dockerfile.v0
    <missing> 8 months ago COPY 20-envsubst-on-templates.sh /docker-ent… 3.02kB buildkit.dockerfile.v0
    <missing> 8 months ago COPY 15-local-resolvers.envsh /docker-entryp… 336B buildkit.dockerfile.v0
    <missing> 8 months ago COPY 10-listen-on-ipv6-by-default.sh /docker… 2.12kB buildkit.dockerfile.v0
    <missing> 8 months ago COPY docker-entrypoint.sh / # buildkit 1.62kB buildkit.dockerfile.v0
    <missing> 8 months ago RUN /bin/sh -c set -x && groupadd --syst… 113MB buildkit.dockerfile.v0
    <missing> 8 months ago ENV PKG_RELEASE=2~bookworm 0B buildkit.dockerfile.v0
    <missing> 8 months ago ENV NJS_RELEASE=2~bookworm 0B buildkit.dockerfile.v0
    <missing> 8 months ago ENV NJS_VERSION=0.8.4 0B buildkit.dockerfile.v0
    <missing> 8 months ago ENV NGINX_VERSION=1.27.0 0B buildkit.dockerfile.v0
    <missing> 8 months ago LABEL maintainer=NGINX Docker Maintainers <d… 0B buildkit.dockerfile.v0
    <missing> 8 months ago /bin/sh -c #(nop) CMD ["bash"] 0B
    <missing> 8 months ago /bin/sh -c #(nop) ADD file:6c4730e7b12278bc7… 74.8MB
  3. 提交时不暂停容器

    docker commit --pause=false my_container my_new_image

    这将在不暂停容器的情况下提交镜像。


注意事项:

  • docker commit 通常用于临时保存容器的状态,但在生产环境中,建议使用 Dockerfile 来构建镜像,因为 Dockerfile 提供了更可重复和可维护的构建过程。
  • 提交的镜像不会包含容器的卷(volumes)数据。

通过 docker commit 命令,你可以快速保存容器的当前状态,但为了更好的可维护性和可重复性,建议使用 Dockerfile 来构建镜像。