Top

Docker-image(commit|export|save)

将Docker容器导出成镜像的方式

我的环境是Centos7.4!1台服务器:Server

192.168.237.128-server
1.使用docker history docker.io/nginx 可以查看镜像是如何制作的.

1. Export-将容器导出成镜像

1.1 下载镜像并启动

[root@server ~]# docker pull nginx
[root@server ~]# docker run --restart=always -itd -p 80:80 docker.io/nginx
f39a583e724c1a664a5c6c156eb4ea7dce32c8b166abde088f2a2bb80a944134

1.2 取一个百度首页替换nginx的index

↓获取百度的index.html页面
[root@server ~]# wget www.baidu.com/index.html [root@server ~]# docker cp index.html f39a583e724c:/usr/share/nginx/html/index.html

1.3 把目前的Nginx容器导出来

↓不加-o则镜像在/var/lib/docker/image/overlay2/下(使用export的时候会把内部的信息弄丢失,但是磁盘里的数据不会.)
[root@server ~]# docker export -o nginx_v1.tar f39a583e724c
↓查看导出情况
[root@server ~]# ls nginx_v1.tar -lh -rw------- 1 root root 107M Apr 10 05:35 nginx_v1.tar

1.4 导入镜像

1.5 导入镜像并运行

↓导入镜像
[root@server ~]# docker import nginx_v1.tar nginx:v3 sha256:dbbe9d9bda44e78d176b8d1a1ad92d6e0a067e01273569618aa9fd392c081806
↓导入出错:镜像文件启动命令丢失导致(因为用的是export出来的镜像,所以有些信息会丢失.)
[root@server ~]# docker run --restart=always -itd -p 80:80 nginx:v3 /usr/bin/docker-current: Error response from daemon: No command specified. See '/usr/bin/docker-current run --help'.
↓所以我们在后面加入启动参数
[root@server ~]# docker run --restart=always -itd -p 80:80 nginx:v3 /bin/bash 073701c4ae1b9a1cce34d53cd720955305ebe4da866e060b523038e8333edc25
↓重新进入容器手动启动nginx
[root@server ~]# docker exec -it 073701c4ae1b /bin/bash root@073701c4ae1b:/# nginx

1.6 测试

↓内部Nginx启动成功:成功映射到外部.
无法显示

2. Commit-将容器导出成镜像

2.1 直接使用commit命令将容器导成镜像并查看

↓将容器变为镜像.
[root@server ~]# docker commit f39a583e724c docker.io/nginx:v1 sha256:d36626339046c31f456d0537d6e6843d166c29bc3d440c92d2f5237bac5d230e [root@server ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/nginx v1 d36626339046 6 minutes ago 109 MB
↓顺便讲一下导出.
[root@server ~]# docker save -o nginx_v2.tar d36626339046 [root@server ~]# ls -lh nginx_v2.tar -rw------- 1 root root 108M Apr 10 08:15 nginx_v2.tar

2.2 运行并测试

[root@server ~]# docker run --restart=always -itd -p 8080:80 nginx:v1
df6e121272fdee1af67338e4d6abe00f44820e170d99cd0b97ceff6baa50da6c
无法显示

3. Save-将镜像下载到本地

↓将Image-ID为691a82db1ecd的镜像下载到宿主机.
[root@client docker]# docker save 691a82db1ecd -o kubernetes-dashboard-amd64.tar [root@client docker]# ls -lh kubernetes-dashboard-amd64.tar -rw------- 1 root root 133M May 3 06:26 kubernetes-dashboard-amd64.tar