容器提交 - docker commit
- 作用
- 根据容器生产一个新镜像
- 命令格式
- docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
- 常用参数
- -a, --author 作者
- -c, --change list Apply Dockerfile instruction to the created image (我暂时还不知道,要学到docker file再解释)
- -m, --message 注释,相当于git 的 -m
- -p, --pause 提交时暂停容器,默认会暂停
docker commit -a "xiaodeng" -m "install net-tools" 2c777 centos-net:v1.0
容器的导出 - docker export
- 作用
- 将容器打包成 容器tar文件
- 命令格式
- docker export [OPTIONS] CONTAINER
- 常用参数
- -o, --output 当前路径下的名称.tar
容器生成镜像 - docker import
- 作用
- 根据容器生成的 tar文件 生成一个新镜像
- 命令格式
- docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
- 常用参数
- -c, --change Apply Dockerfile instruction to the created image
- -m, --message 注释,相当于git 的 -m
docker import -m 'new 镜像' net-tools1.tar net-tools-image:v1.0
docker import和docker commit对比
分别打印docker commit 和 docker import 还有初始的 centos 的history
root@break-virtual-machine:~# docker history net-tools:v1.0
IMAGE CREATED CREATED BY SIZE COMMENT
604c980eec58 18 minutes ago /bin/bash 40.8MB 容器使用commit的镜像
5d0da3dc9764 2 years ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 2 years ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
<missing> 2 years ago /bin/sh -c #(nop) ADD file:805cb5e15fb6e0bb0… 231MB
root@break-virtual-machine:~# docker history centos
IMAGE CREATED CREATED BY SIZE COMMENT
5d0da3dc9764 2 years ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 2 years ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
<missing> 2 years ago /bin/sh -c #(nop) ADD file:805cb5e15fb6e0bb0… 231MB
root@break-virtual-machine:~# docker history net-tools-image:v1.0
IMAGE CREATED CREATED BY SIZE COMMENT
f1c4e55cd323 7 minutes ago 261MB 使用docker import生成的镜像
root@break-virtual-machine:~#
使用 docker commit 生成
docker commit -a "芝士小邓" -m "容器使用commit的镜像" c288 net-tools:v1.0
使用 docker import 生成
# 先生成tar文件
docker export -o net-tools-tar.tar c288b
# 再使用 docker import 生成镜像文件
docker import -m "使用docker import生成的镜像" net-tools-tar.tar net-tools-image:v1.0
可以看到docker import 将所有的变更进行了合并形成新的一层记录,而docker commit 会保留变更的记录.
如若使用 docker inspect命令去查看centos镜像和使用docker commit 生成的镜像的详细信息,会发现,使用后者的Config属性的Hostname属性的值是前者的镜像id,如果使用docker inspect 查看docker import 生成的镜像你会发现它的Config属性中什么都没有,也就是说使用docker import构建的会丢失所有的原来的信息(源数据)