docker自定义镜像-ISO镜像转为docker images

前言

     前段时间听朋友说现在流行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

正文

01前提条件

     在制作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

02打包系统

     网上有贴子说/proc、/sys、/run、/dev等一些与系统镜像无关的文件可以不需要打包,所以此次也是过滤了相关目录

tar -zcvf /tmp/kali.tar.gz --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/run --exclude=/boot --exclude=/tmp /

打包压缩之后3.6G
在这里插入图片描述

03导入docker

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下来就行。

发布了22 篇原创文章 · 获赞 7 · 访问量 528

猜你喜欢

转载自blog.csdn.net/bjywxc/article/details/103276753