Docker容器技术(三)——镜像的分层结构及构建

1. 镜像的分层结构

在这里插入图片描述

  • 共享宿主机的kernel
  • base镜像提供的是最小的Linux发行版
  • 同一docker主机支持运行多种Linux发行版
  • 采用分层结构的最大好处是:共享资源

比如当你已经拉取Nginx 1.17版本的镜像之后,若再次拉取Nginx 1.16 版本时,只需要下载不同的层即可,相同的层可以共享使用,这样就可以节省资源和网络带宽。当你删除其中某个镜像版本时,也只会删除掉不一样的层,因为其中共享的层另一个版本需要使用。

在这里插入图片描述

  • Copy-on-Write 可写容器层

  • 容器层以下所有镜像层都是只读的

  • docker从上往下依次查找文件

  • 容器层保存镜像变化的部分,并不会对镜像本身进行任何修改

  • 一个镜像最多127层

2. 镜像的构建

docker commit 构建新镜像三部曲

  • 运行容器
  • 修改容器
  • 将容器保存为新的镜像

缺点:

  • 效率低、可重复性弱、容易出错
  • 使用者无法对镜像进行审计,存在安全隐患

2.1 导入本地已经下载好的镜像

docker load -i rhel7.tar

在这里插入图片描述

docker history rhel7:latest

在这里插入图片描述

2.2 运行容器

docker run -it --rm rhel7 bash		# --rm退出之后就会自动删除

在这里插入图片描述

docker ps		#显示运行容器
docker ps -a	#显示所有容器(包括停止的容器)
docker pull busybox   				#拉取一个bysybox镜像
docker history busybox:latest 		#查看busybox在开启的时候执行什么
docker run -it busybox				#运行容器

在这里插入图片描述

2.3 修改容器

上面在busybox容器中创建了几个文件,已经修改过容器,修改完毕后退出保存即可。

使用ctrl+d 退出容器,但是这样退出容器就被停止了

在这里插入图片描述

#可以通过容器ID再次启动
docker start 4b39bedf3340
docker ps
docker attach 4b39bedf3340 		#再次连接
ctrl+pq							#这样退出表示让容器在后台运行

在这里插入图片描述

在这里插入图片描述

2.4 将容器保存为新的镜像

docker commit 4b39bedf3340 busybox:v1		#保存新的镜像
docker images								#查看所有镜像
docker history busybox:latest				#查看原始镜像
docker history busybox:v1					#查看新的镜像

在这里插入图片描述
在这里插入图片描述

可以看出,新保存的V1镜像只是在原始镜像上面又追加了一层,其余镜像层和原始镜像是完全一样的,一层一层往上叠加。

docker rm -f 4b39bedf3340		#删除容器(正在运行的容器需要使用 -f 强制删除)
docker run -it --rm busybox:v1

在这里插入图片描述
可以看到,通过这种打包镜像的方法,可以将我们修改后的数据得以保存,但是这种方法不推荐,因为将数据存到镜像层里面,它的文件系统读取速度效率非常低下,将数据存储到宿主机物理磁盘中更加高效,这个后面会说。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章