Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。Docker是内核虚拟化,不使用Hypervisor是不完全虚拟化,依赖内核的特性实现资源隔离。本文主要介绍Docker CLI 中 docker commit 常用命令。

1、docker commit 简介

docker commit是根据容器的更改创建一个新镜像,将容器的文件更改或设置提交到新镜像中。这允许你通过运行交互式shell调试容器,或者将工作数据集导出到另一台服务器。一般来说,最好使用Dockerfiles以文档化和可维护的方式管理镜像。提交操作不包括容器内挂载的卷中包含的任何数据。默认情况下,当镜像被提交时,正在提交的容器及其进程将暂停。这减少了在创建提交过程中遇到数据损坏的可能性。如果不希望出现这种行为,可以将--pause选项设置为false。--change选项将对创建的镜像应用Dockerfile指令。支持的Dockerfile指令:CMD|ENTRYPOINT|ENV|EXPOSE|LABEL|ONBUILD|USER|VOLUME|WORKDIR

2、docker commit 语法

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

参考文档:https://docs.docker.com/engine/reference/commandline/commit/

3、docker commit 命令

1)commit 容器

docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS              NAMES
c3f279d17e0a        ubuntu:12.04        /bin/bash           7 days ago          Up 25 hours                            desperate_dubinsky
197387f1b436        ubuntu:12.04        /bin/bash           7 days ago          Up 25 hours                            focused_hamilton
docker commit c3f279d17e0a  svendowideit/testimage:version3

f5283438590d
docker images

REPOSITORY                        TAG                 ID                  CREATED             SIZE
svendowideit/testimage            version3            f5283438590d        16 seconds ago      335.7 MB

2)提交一个带有新配置的容器

docker ps

CONTAINER ID       IMAGE               COMMAND             CREATED             STATUS              PORTS              NAMES
c3f279d17e0a        ubuntu:12.04        /bin/bash           7 days ago          Up 25 hours                            desperate_dubinsky
197387f1b436        ubuntu:12.04        /bin/bash           7 days ago          Up 25 hours                            focused_hamilton
docker inspect -f "{{ .Config.Env }}" c3f279d17e0a

[HOME=/ PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin]
docker commit --change "ENV DEBUG=true" c3f279d17e0a  svendowideit/testimage:version3

f5283438590d
docker inspect -f "{{ .Config.Env }}" f5283438590d

[HOME=/ PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin DEBUG=true]

3)使用新的CMD提交一个容器并EXPOSE指令

docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS              NAMES
c3f279d17e0a        ubuntu:12.04        /bin/bash           7 days ago          Up 25 hours                            desperate_dubinsky
197387f1b436        ubuntu:12.04        /bin/bash           7 days ago          Up 25 hours                            focused_hamilton
docker commit --change='CMD ["apachectl", "-DFOREGROUND"]' -c "EXPOSE 80" c3f279d17e0a  svendowideit/testimage:version4

f5283438590d
docker run -d svendowideit/testimage:version4

89373736e2e7f00bc149bd783073ac43d0507da250e999f3f1036e0db60817c0
docker ps

CONTAINER ID        IMAGE               COMMAND                 CREATED             STATUS              PORTS              NAMES
89373736e2e7        testimage:version4  "apachectl -DFOREGROU"  3 seconds ago       Up 2 seconds        80/tcp             distracted_fermat
c3f279d17e0a        ubuntu:12.04        /bin/bash               7 days ago          Up 25 hours                            desperate_dubinsky
197387f1b436        ubuntu:12.04        /bin/bash               7 days ago          Up 25 hours                            focused_hamilton

4、选项说明

选项

默认

描述

--author , -a

作者(如,姓名)

--change , -c

在创建的镜像上应用Dockerfile指令

--message , -m

提交信息

--pause , -p

true

在提交期间暂停容器

推荐文档

相关文档

大家感兴趣的内容

随机列表