一.Docker镜像的简单概述
Docker镜像是一个只读的Docker容器模板,含有启动Docker容器所需的文件系统结构及其内容,因此是启动一个Docker容器的基础。Docker镜像的文件内容以及一些运行Docker容器的配置文件组成了Docker容器的静态文件系统运行环境–rootfs。可以这么理解,Docker镜像是Docker容器的静态视角,Docker容器是Docker镜像的运行状态
二.镜像的分层结构
1.共享宿主机的内核
2.base镜像提供的是最小的linux发行版
其实就是linux的根/文件系统
3.同一docker主机支持运行多种linux发行版
4.采用分层结构的做大好处是“共享资源”
不同镜像应用的base images相同时,文件资源便可以实现共享,只需备份一份,节省空间
(1)查看宿主机内核版本
[root@server1 ~]# hostnamectl
Static hostname: server1
Icon name: computer-vm
Chassis: vm
Machine ID: adbb5cea5daa4badbfdbfa7e54d8a796
Boot ID: 51a87e4fea66403bb6fd5af6253a0309
Virtualization: kvm
Operating System: Red Hat Enterprise Linux Server 7.3 (Maipo) ##宿主机版本
CPE OS Name: cpe:/o:redhat:enterprise_linux:7.3:GA:server
Kernel: Linux 3.10.0-514.el7.x86_64 ##内核版本
Architecture: x86-64
(2)创建容器,以ubuntu和rhel7.为例
[root@server1 ~]# docker load -i ubuntu.tar ##添加镜像
[root@server1 ~]# docker load -i rhel7.tar
[root@server1 ~]# docker images ##查看拉取的镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
game2048 latest 19299002fdbe 2 years ago 55.5MB
ubuntu latest 07c86167cdc4 3 years ago 188MB
rhel7 latest 0a3eb3fde7fd 5 years ago
[root@server1 ~]# docker run -it --name vm2 ubuntu ##创建并运行容器 -it:以交互式方式打开
root@968b6527f284:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@968b6527f284:/# uname -r ##查看创建的容器内核
3.10.0-514.el7.x86_64 ##与宿主机内核版本一致,开启秒进
[root@server1 ~]# docker run -it --name vm3 rhel7 bash
bash-4.2# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
bash-4.2# uname -r
3.10.0-514.el7.x86_64 ##内核版本与宿主机一致
5.Copy-on-Write为可写容器层
容器以下所有镜像曾都是只读的,docker查找文件时是从上往下依次查找;容器层用来保存镜像变化的部分,并不会对镜像本身进行任何修改;一个镜像最多可以有127层
docker容器进行可写时,是在可写容器层进行可写动作,经底层镜像层的文件会先复制到可写层再执行删除、创建等动作
[root@server1 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@server1 ~]# docker run -it --name vm1 ubuntu ##创建容器并运行
root@eda3efc58dbe:/# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
root@eda3efc58dbe:/# touch file{1..10} ##在此容器内创建文件
root@eda3efc58dbe:/# ls ##创建成功
bin etc file2 file5 file8 lib mnt root srv usr
boot file1 file3 file6 file9 lib64 opt run sys var
dev file10 file4 file7 home media proc sbin tmp
root@eda3efc58dbe:/# exit
exit
[root@server1 ~]# docker rm vm1 ##删除此容器,此时容器内创建的文件均没有保存
vm1
[root@server1 ~]# docker run -it --name vm1 ubuntu ##创建一个容器
root@b89eda1165bc:/# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
root@b89eda1165bc:/# touch file{1..10} ##容器内创建文件
root@b89eda1165bc:/# ls
bin etc file2 file5 file8 lib mnt root srv usr
boot file1 file3 file6 file9 lib64 opt run sys var
dev file10 file4 file7 home media proc sbin tmp
root@b89eda1165bc:/# exit
exit
[root@server1 ~]# docker commit vm1 ubuntu:v ##将此容器重新打包为一个镜像
sha256:c2f1ba9cb3fd7a568516c83e254996b5a71008742c5eef89df75f0e23fd74aa2
[root@server1 ~]# docker images ##查看镜像(v镜像存在)
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu v c2f1ba9cb3fd 8 seconds ago 188MB
game2048 latest 19299002fdbe 2 years ago 55.5MB
ubuntu latest 07c86167cdc4 3 years ago 188MB
rhel7 latest 0a3eb3fde7fd 5 years ago 140MB
[root@server1 ~]# docker rm vm1 ##删除创建的容器
vm1
[root@server1 ~]# docker run -it --name vm1 ubuntu:v ##运行此容器
root@8295ef1b62d4:/# ls ##创建的文件依然存在
bin etc file2 file5 file8 lib mnt root srv usr
boot file1 file3 file6 file9 lib64 opt run sys var
dev file10 file4 file7 home media proc sbin tmp
[root@server1 ~]# docker history ubuntu:v ##查看v镜像的构造历史
IMAGE CREATED CREATED BY SIZE COMMENT
c2f1ba9cb3fd 7 minutes ago /bin/bash 29B
07c86167cdc4 3 years ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 3 years ago /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$… 1.9kB
<missing> 3 years ago /bin/sh -c echo '#!/bin/sh' > /usr/sbin/poli… 195kB
<missing> 3 years ago /bin/sh -c #(nop) ADD file:b9504126dc5590898… 188MB
[root@server1 ~]# docker history ubuntu ##查看ubuntu镜像的构造历史
IMAGE CREATED CREATED BY SIZE COMMENT
07c86167cdc4 3 years ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 3 years ago /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$… 1.9kB
<missing> 3 years ago /bin/sh -c echo '#!/bin/sh' > /usr/sbin/poli… 195kB
<missing> 3 years ago /bin/sh -c #(nop) ADD file:b9504126dc5590898… 188MB
[root@server1 ~]# docker rm -f vm1 ##删除容器
vm1
[root@server1 ~]# docker rmi ubuntu:v ##删除此镜像
Untagged: ubuntu:v
Deleted: sha256:c2f1ba9cb3fd7a568516c83e254996b5a71008742c5eef89df75f0e23fd74aa2
Deleted: sha256:24cba2123fce1b0980f0ce09682d88262555163f8c9663086765459ce9c0b033
07c86167cdc4为ubuntu:v与ubuntu公用,即ubuntu:v基于 ubuntu 构造,
镜像构造时都是一层一层往上构造的,底层均为公用镜像层
版权声明:本文为weixin_44822212原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。