最近开始研究docker,如果想要自己创建个镜像,必须从Docker Hub上面获取一个基础镜像来创建;对于我们公司是定制的ISO,我就在想有没有办法把ISO转换成Docker格式,然后上传到Docker Hub上作为基础镜像使用。
1.准备阶段
首先,在一台虚拟机中安装好需要转换的ISO镜像,本文以CentOS 7.2为例;
其次,进入装好的系统,到根目录下面我们可以看到如下文件夹:
[[email protected] /]# 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
[[email protected] ~]# du -sh system.tar 1.2G system.tar [[email protected] ~]# cat system.tar |docker import - centos:7.2 sha256:72cc6a6d481b512c04d7d1012bc6e50f54c856bdbd87b25c0b7aed9765af94c1 [[email protected] ~]# 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
[[email protected] ~]# docker run -it --rm centos:7.2 /bin/bash [[email protected] /]# 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 [[email protected] /]# exit exit [[email protected] ~]#
镜像做好之后就可以push到docker hub上了,不过我发现做好的镜像还是挺大的有1.2G,这样push的时候就会很慢很慢。
原文地址:http://blog.51cto.com/dengaosky/2064111