Docker 学习 1. 原理

目录

为什么会有 Docker ?

在 Docker 出现之前,如果要实现在一台电脑上同时运行多系统,需要使用虚拟机,例如 VMware。

虚拟机虽然可以虚拟多系统,但是其原理是虚拟系统内核,相当于每个虚拟机都在运行一个完整的操作系统。这样造成大量资源占用。

而 Docker 是与宿主机公用系统内核,占资源少,安装和启动速度快。

虚拟机原理

举个例子,用 VMware 虚拟出一个 Ubuntu ,用 Tomcat 服务运行网站。操作如下:

  1. 在宿主机上的操作系统中安装 VMware 软件。
  2. 复制 Ubuntu 系统安装文件 iso 。
  3. 在宿主机上的操作系统中虚拟出一个 Linux 内核。
  4. 给 Linux 内核分配相关硬件资源,例如CPU,内存,硬盘。(虚拟机要手动分配硬件资源)
  5. 在 Linux 内核上安装 Ubuntu 发行版。
  6. 在 Ubuntu 上安装 JDK。
  7. 在 JDK 上安装 Tomcat。
  8. 服务网站文件到 Tomcat 指定目录。

虚拟机原理

Docker 原理

同样的例子,用 Docker 虚拟出一个 Tomcat 服务运行网站。操作如下:

  1. 在宿主机的操作系统中安装 Docker 服务。
  2. 从 Docker Hub 拉取 Tomcat 镜像。
  3. 使用拉取的镜像生成 Tomcat 容器。
  4. 生成的容器没有 Linux 内核,而是和宿主机的操作系统公用 Linux 内核。(无需手动为容器分配硬件资源)
  5. 该容器第一层是 Linux 发行版,具体是什么发行版,由拉取的镜像定义,该层为只读镜像层。
  6. 该容器第二层是 JDK ,由拉取的镜像定义,该层为只读镜像层。
  7. 该容器第三层是 Tomcat ,由拉取的镜像定义,该层为只读镜像层。
  8. 该容器第四层是 可写容器层,所有文件增加,修改,删除(操作记录)都保存在该层中。程序要查找某文件,先到该层找。找不到再到更低一层找。

Docker 原理

Docker 的层可重用,例如 两个镜像 Tomcat 和 Nginx,他们的 Linux 发行版 都使用了 debian:bullseye,那么这两个镜像都公使用了该层。