前言
在前面的文章里我们已经详细介绍了构建镜像的两种常用方式,下面我们将具体看看如何实际操作,以及镜像的优化方式。
一、commit封装镜像
以ubuntu的镜像为例:
1.导入ubuntu镜像
[root@server1 ~]# docker load -i ubuntu.tar
56abdd66ba31: Loading layer [==================================================>] 196.8MB/196.8MB
9468150a390c: Loading layer [==================================================>] 208.9kB/208.9kB
11083b444c90: Loading layer [==================================================>] 4.608kB/4.608kB
5f70bf18a086: Loading layer [==================================================>] 1.024kB/1.024kB
Loaded image: ubuntu:latest
2.建立容器vm1,运行ubuntu,并建立文件,然后ctrl+p+q退出
[root@server1 ~]# docker run -it --name vm1 ubuntu
root@9d9659548963:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@9d9659548963:/# mkdir test
root@9d9659548963:/# cd test/
root@9d9659548963:/test# ls
root@9d9659548963:/test# touch file{1..10}
root@9d9659548963:/test# ls
file1 file10 file2 file3 file4 file5 file6 file7 file8 file9
3.在上面的基础上我们删除vm1容器,然后重新建立,查看建立的文件是否还存在
[root@server1 ~]# docker rm -f vm1
vm1
[root@server1 ~]#
[root@server1 ~]# docker run -it --name vm1 ubuntu
root@36e4759bb7eb:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@36e4759bb7eb:/# cd test
bash: cd: test: No such file or directory
root@36e4759bb7eb:/#
可以看到,重新建立的容器里没有之前创建的文件
那么问题来了:如果我们得到一个原始的镜像后,需要往上百台的之机上构建容器并部署相关服务,做好的镜像没办法保存打包,那将是一件非常痛苦的事情;这个时候我们可以使用commit命令将容器构建成一个新的镜像
4.commit封装镜像
commit构建镜像三部曲:
- 运行容器
- 修改容器
- 将容器保存为新的镜像
我们直接使用上面构建的容器vm1,对它进行修改