Docker镜像原理

112 阅读1分钟

思考

  • Docker 镜像的本质是什么?
  • Docker 中一个centos镜像为什么只有200M,而一个centos操作系统的iso文件要几个G
  • Docker 中一个tomcat镜像为什么有500M,而一个tomcat 安装包只有70M多?

操作系统组成部分

  • 进程调度子系统
  • 进程通信子系统
  • 内存管理子系统
  • 设备管理子系统
  • 文件管理子系统
  • 网络通信子系统
  • 作业控制子系统

文件管理子系统

  • bootfs:包含bootloader (引导加载程序) 和 kernel (内核)
  • rootfs: root文件系统,包含的就是典型Linux系统中的/dev,/proc,/bin,/etc等标准目录和文件。 不同的Linux发行版,bootfs基本一样,而rootfs不同,

bootfs_rootfs.jpeg

Docker 镜像原理

  • Docker镜像是由特殊文件系统叠加而成
  • 最底端是 bootfs,并使用宿主机的bootfs
  • 第二层是root文件系统 rootfs称为base image ,然后在往上叠加其他镜像。

统一文件系统(Union File System)技术能够将不同的层整合成一个文件系统,为这些层提供一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统。

当一个镜像启动容器的时候,Docker会在最顶层加载一个读写文件系统作为容器

镜像原理.png

操作验证

## 容器里可以写
docker run --name my_nginx -d -p 80:80 nginx

docker exec -it my_nginx /bin/bash

cat usr/share/nginx/html/index.html

echo "6666" > usr/share/nginx/html/index.html

## commit 制作新的镜像

docker commit 978c8c89b70f my_nginx_image 

## 运行该镜像

docker run --name my_nginx_666 -d -p 80:80 my_nginx_image