Docker 学习 1. 原理
为什么会有 Docker ?
在 Docker 出现之前,如果要实现在一台电脑上同时运行多系统,需要使用虚拟机,例如 VMware。
虚拟机虽然可以虚拟多系统,但是其原理是虚拟系统内核,相当于每个虚拟机都在运行一个完整的操作系统。这样造成大量资源占用。
而 Docker 是与宿主机公用系统内核,占资源少,安装和启动速度快。
虚拟机原理
举个例子,用 VMware 虚拟出一个 Ubuntu ,用 Tomcat 服务运行网站。操作如下:
- 在宿主机上的操作系统中安装 VMware 软件。
- 复制 Ubuntu 系统安装文件 iso 。
- 在宿主机上的操作系统中虚拟出一个 Linux 内核。
- 给 Linux 内核分配相关硬件资源,例如CPU,内存,硬盘。(虚拟机要手动分配硬件资源)
- 在 Linux 内核上安装 Ubuntu 发行版。
- 在 Ubuntu 上安装 JDK。
- 在 JDK 上安装 Tomcat。
- 服务网站文件到 Tomcat 指定目录。
Docker 原理
同样的例子,用 Docker 虚拟出一个 Tomcat 服务运行网站。操作如下:
- 在宿主机的操作系统中安装 Docker 服务。
- 从 Docker Hub 拉取 Tomcat 镜像。
- 使用拉取的镜像生成 Tomcat 容器。
- 生成的容器没有 Linux 内核,而是和宿主机的操作系统公用 Linux 内核。(无需手动为容器分配硬件资源)
- 该容器第一层是 Linux 发行版,具体是什么发行版,由拉取的镜像定义,该层为只读镜像层。
- 该容器第二层是 JDK ,由拉取的镜像定义,该层为只读镜像层。
- 该容器第三层是 Tomcat ,由拉取的镜像定义,该层为只读镜像层。
- 该容器第四层是 可写容器层,所有文件增加,修改,删除(操作记录)都保存在该层中。程序要查找某文件,先到该层找。找不到再到更低一层找。
Docker 的层可重用,例如 两个镜像 Tomcat 和 Nginx,他们的 Linux 发行版 都使用了 debian:bullseye,那么这两个镜像都公使用了该层。