前段时间听朋友说现在流行docker容器,所以最近研究了一下,docker安装都比较简单,但是发现官方提供的images不尽如人意,功能太少了。就想能否把自己安装好的系统转换成docker镜像。
参考文章https://www.cnblogs.com/-beyond/p/9259923.html
参考文章https://www.jianshu.com/p/f8f851318165
docker版本 | docker 1.7 |
---|---|
docker安装的操作系统版本 | redhat 6.5 |
本次制作docker images的系统 | kali linux |
在制作docker镜像之前,需要先把需要系统安装好,我是在虚拟机里面通过下载的ISO镜像已经安装好系统kali linux。
root@kali:~# more /etc/issue
Kali GNU/Linux Rolling \n \l
root@kali:~# ls /
bin dev home initrd.img.old lib32 libx32 media opt root sbin sys usr vmlinuz
boot etc initrd.img lib lib64 lost+found mnt proc run srv tmp var vmlinuz.old
网上有贴子说/proc、/sys、/run、/dev等一些与系统镜像无关的文件可以不需要打包,所以此次也是过滤了相关目录
tar -zcvf /tmp/kali.tar.gz --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/run --exclude=/boot --exclude=/tmp /
1、将打出的包拷贝到一个安装好的docker的环境中,我上传的位置是/soft
2、执行导入
方式一:
[root@localhost]# cd /soft
[root@localhost soft]# cat kali.tar.gz | docker import - kali
Error response from daemon: Error processing tar file(exit status 1): write /usr/share/ieee-data/oui.txt: no space left on device
磁盘空间不足,先对磁盘进行扩容,参照linux扩容完成分区扩容。再进行导入
[root@localhost soft]# cat kali.tar.gz | docker import - kali
sha256:953ce62dfa5a3e44dff79c942d6e1a5eb7aa40d2c27dd2c7b91652bd0a88cc66
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
kali latest 953ce62dfa5a 16 hours ago 9.97GB
tomcat latest 6408fdc94212 2 weeks ago 507MB
方式二:
[root@localhost ~]# cd /soft
[root@localhost soft]# ls
kali.tar.gz
[root@localhost soft]# docker import kali.tar.gz kali2:2
sha256:fd9fb0c5525d95640dd9c9789f99f4ac4424657b42bbb833561bd2fd2bf0793d
[root@localhost soft]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
kali2 2 fd9fb0c5525d 4 minutes ago 9.97GB
kali latest 953ce62dfa5a 16 hours ago 9.97GB
tomcat latest 6408fdc94212 2 weeks ago 507MB
可以看到导入的两个镜像,kali和kali2,整个系统镜像容量接近10G了,下面是运行镜像。
3、运行导入的镜像
[root@localhost soft]# docker run -t -i kali /bin/bash
root@535ada3fcb51:/# more /etc/issue
Kali GNU/Linux Rolling \n \l
root@535ada3fcb51:/# df -h
Filesystem Size Used Avail Use% Mounted on
overlay 37G 19G 19G 51% /
tmpfs 64M 0 64M 0% /dev
tmpfs 909M 0 909M 0% /sys/fs/cgroup
shm 64M 0 64M 0% /dev/shm
/dev/mapper/rhel-root 37G 19G 19G 51% /etc/hosts
tmpfs 909M 0 909M 0% /proc/asound
tmpfs 909M 0 909M 0% /proc/acpi
tmpfs 909M 0 909M 0% /proc/scsi
tmpfs 909M 0 909M 0% /sys/firmware
root@535ada3fcb51:/# ifconfig -a
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.2 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet)
RX packets 42 bytes 5584 (5.4 KiB)
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
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 1000 (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@535ada3fcb51:/# exit
exit
[root@localhost soft]# docker run -t -i kali2 /bin/bash
Unable to find image 'kali2:latest' locally
docker: Error response from daemon: pull access denied for kali2, repository does not exist or may require 'docker login': denied: requested access to the resource is denied.
See 'docker run --help'.
[root@localhost soft]# docker run -t -i kali2:2 /bin/bash
root@24786ff2d9fa:/# more /etc/issue
Kali GNU/Linux Rolling \n \l
root@24786ff2d9fa:/# ifconfig -a
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.2 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet)
RX packets 17 bytes 2236 (2.1 KiB)
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
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 1000 (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@24786ff2d9fa:/# df -h
Filesystem Size Used Avail Use% Mounted on
overlay 37G 19G 19G 51% /
tmpfs 64M 0 64M 0% /dev
tmpfs 909M 0 909M 0% /sys/fs/cgroup
shm 64M 0 64M 0% /dev/shm
/dev/mapper/rhel-root 37G 19G 19G 51% /etc/hosts
tmpfs 909M 0 909M 0% /proc/asound
tmpfs 909M 0 909M 0% /proc/acpi
tmpfs 909M 0 909M 0% /proc/scsi
tmpfs 909M 0 909M 0% /sys/firmware
root@24786ff2d9fa:/# exit
可以看到导入的两个镜像都能够启动成功,镜像就是我们之前打包的那个kali系统,这里要注意一点的是我们打包的镜像是没有设定RUN命令的参数,即容器启动时,要运行的命令,所以如果直接启动会报错误。
[root@localhost soft]# docker run -t -i kali2:2
docker: Error response from daemon: No command specified.
See 'docker run --help'.
如果要直接启动的话,需要配置启动运行的命令,可以参考使用Dockerfile来构建镜像
4、删除镜像
我们导入了两个镜像,将其中一个删除掉,删除镜像前,需要先停止运行的容器,然后先删容器,再删除镜像,要不然会报错。
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
kali2 2 fd9fb0c5525d 20 minutes ago 9.97GB
kali latest 953ce62dfa5a 16 hours ago 9.97GB
tomcat latest 6408fdc94212 2 weeks ago 507MB
[root@localhost ~]# docker rmi kali2
Error: No such image: kali2
[root@localhost ~]# docker rmi kali2:2
Error response from daemon: conflict: unable to remove repository reference "kali2:2" (must force) - container 24786ff2d9fa is using its referenced image fd9fb0c5525d
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
24786ff2d9fa kali2:2 "/bin/bash" 11 minutes ago Exited (0) 11 minutes ago gifted_heyrovsky
535ada3fcb51 kali "/bin/bash" 12 minutes ago Exited (0) 11 minutes ago kind_elbakyan
129ea7942bc7 tomcat "catalina.sh run" 2 days ago Exited (143) 18 hours ago strange_meitner
26af23ddec01 tomcat "catalina.sh run" 2 days ago Exited (143) 2 days ago sweet_buck
6d52607bb879 tomcat "catalina.sh run" 2 days ago Exited (143) 2 days ago lucid_jang
900348fc8288 tomcat "/bin/bash" 2 days ago Exited (0) 2 days ago vigilant_bhaskara
2a8bbfb35a9f tomcat "/bin/bash" 2 days ago Exited (0) 2 days ago agitated_allen
1ab624e5128e tomcat "/bin/bash" 2 days ago Created 8080/tcp bold_borg
[root@localhost ~]# docker rm 24786ff2d9fa
24786ff2d9fa
[root@localhost ~]# docker rmi kali2:2
Untagged: kali2:2
Deleted: sha256:fd9fb0c5525d95640dd9c9789f99f4ac4424657b42bbb833561bd2fd2bf0793d
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
kali latest 953ce62dfa5a 16 hours ago 9.97GB
tomcat latest 6408fdc94212 2 weeks ago 507MB
5、镜像做好之后就可以push到docker hub上了,不过这个镜像容量太大,这样push的时候就会很慢很慢。可以在内部搭建私有仓库,这样速度会快很多,后面需要使用的时候pull下来就行。