文章

03.Docker 进阶

03.Docker 进阶

Docker 镜像原理

基础

Docker 镜像本质是什么?

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

操作系统组成部分:

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

Linux 文件系统由 bootfs 和 rootfs 两部分组成

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

Docker 镜像原理

Docker 镜像是由特殊的文件系统叠加而成,

  • 最底端是 bootfs,并使用宿主机的 bootfs
  • 第二层是 root 文件系统 rootfs,称为 base image
  • 然后再往上可以叠加其他的镜像文件

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

一个镜像可以放在另一个镜像的上面。位于下面的镜像称为父镜像,最底部的镜像成为基础镜像。当从一个镜像启动容器时,Docker 会在最顶层加载一个读写文件系统作为容器

回答问题

  1. Docker 镜像本质是什么?

是一个分层文件系统

  1. Docker 中一个 centos 镜像为什么只有 200MB,而一个 centos 操作系统的 iso 文件要几个个 G?

Centos 的 iso 镜像文件包含 bootfs 和 rootfs,而 docker 的 centos 镜像复用操作系统的 bootfs,只有 rootfs 和其

他镜像层

  1. Docker 中一个 tomcat 镜像为什么有 600MB,而一个 tomcat 安装包只有 70 多 MB?

由于 docker 中镜像是分层的,tomcat 虽然只有 70 多 MB,但他需要依赖于父镜像和基础镜像,所有整个对外

暴露的 tomcat 镜像大小 600 多 MB

Docker 私有仓库

Docker 官方的 Docker hub:https://hub.docker.com

取镜像 到本地,也可以把我们自己的镜像推送上去。但是,有时候我们不希望将自己的镜 像放到公网当中,

那么这时我们就需要搭建自己的私有仓库来存储和管理自己的镜像。

私有仓库搭建

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 1、拉取私有仓库镜像
docker pull registry

# 2、启动私有仓库容器
docker run -id --name=registry -p 5000:5000 registry

# 3、打开浏览器  输入地址http://私有仓库服务器ip:5000/v2/_catalog,看到{"repositories":[]} 表示私有仓库  搭建成功

# 4、修改daemon.json   

vim /etc/docker/daemon.json    

# 在上述文件中添加一个key,保存退出。此步用于让 docker 信任私有仓库地址;注意将私有仓库服务器ip修改为自己私有仓库服务器真实ip 

{"insecure-registries":["私有仓库服务器ip:5000"]} 

{"insecure-registries":["192.168.220.12:5000"]} 

# 5、重启docker 服务
systemctl restart docker
docker start registry

将镜像上传至私有仓库

1
2
3
4
5
# 1、标记镜像为私有仓库的镜像
docker tag centos:7 192.168.220.12:5000/centos:7

# 2、上传标记的镜像
docker push 192.168.220.12:5000/centos:7

从私有仓库拉取镜像

1
2
#拉取镜像
docker pull 192.168.220.12:5000/centos:7
本文由作者按照 CC BY 4.0 进行授权