1.准备阶段
首先,在一台虚拟机中安装好需要转换的ISO镜像,本文以CentOS 7.2为例;
其次,进入装好的系统,到根目录下面我们可以看到如下文件夹:
[root@localhost /]# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
其中/proc、/sys、/run、/dev这几个目录都是系统启动时自动生成的,虽然也属于文件系统一部分,但是他们每次开机都会有变化,所以打包的时候就应该忽略它们。
2.打包系统
直接运行如下命令
# tar -cvpf /tmp/system.tar --directory=/ --exclude=proc --exclude=sys --exclude=dev --exclude=run --exclude=boot .
命令运行完成后再/tmp目录生成了一个system.tar文件,如果tar文件太大的话,也可以继续压缩成tar.gz格式。
就可以把打包好的文件导入到docker了。
3.导入docker
tar文件导入到docker方法很多,下面两种办法测试了都可以。
cat system.tar |docker import - centos:7.2
docker import system.tar centos:7.2
[root@docker ~]# du -sh system.tar 1.2G system.tar [root@docker ~]# cat system.tar |docker import - centos:7.2 sha256:72cc6a6d481b512c04d7d1012bc6e50f54c856bdbd87b25c0b7aed9765af94c1 [root@docker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos 7.2 72cc6a6d481b 6 seconds ago 1.197 GB
4.导入成功后,接下去就可以运行容器了.
# docker run -t -i centos:7.2 /bin/bash
[root@docker ~]# docker run -it --rm centos:7.2 /bin/bash [root@476281ec40ee /]# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.17.0.2 netmask 255.255.0.0 broadcast 0.0.0.0 inet6 fe80::42:acff:fe11:2 prefixlen 64 scopeid 0x20<link> ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet) RX packets 6 bytes 508 (508.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 6 bytes 508 (508.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 0 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@476281ec40ee /]# exit exit [root@docker ~]#
镜像做好之后就可以push到docker hub上了,不过我发现做好的镜像还是挺大的有1.2G,这样push的时候就会很慢很慢。
原文:http://blog.51cto.com/dengaosky/2064111