Docker入门(一)
什么是Docker
Docker是一种轻量级容器化平台,用于打包、分发和运行应用程序及其依赖项,实现跨环境一致性和高效部署。虽然Docker 和虚拟机(Virtual Machine,VM)都是用于虚拟化的技术,但它们有一些关键的区别
Docker:
- 轻量级: Docker 利用容器技术,容器与宿主系统共享内核,因此相比虚拟机更轻量级。容器包含应用程序及其所有依赖项,但不需要完整的操作系统副本。
- 快速启动: 由于容器共享内核和操作系统资源,Docker 容器的启动速度通常比虚拟机快得多。
- 资源利用率高: 由于共享内核,Docker 容器的资源利用效率更高。多个容器可以运行在同一台主机上,共享相同的操作系统内核。
- 一致性: Docker 提供了容器镜像,其中包含应用程序及其所有依赖项。这确保了在不同环境中部署时的一致性,避免了“在我的机器上能够工作”的问题。
- 容易迁移: 由于容器化应用程序的一致性,它们更容易在不同的环境中移植和部署。
虚拟机:
- 完全虚拟化: 虚拟机在宿主系统上运行一个完整的操作系统,通过虚拟化层(如 Hypervisor)模拟硬件。每个虚拟机都有自己的内核和操作系统。
- 相对较重: 由于每个虚拟机都包含完整的操作系统副本,虚拟机通常比容器更重,需要更多的资源。
- 启动较慢: 启动虚拟机需要启动整个操作系统,因此相对较慢。
- 资源利用率较低: 由于虚拟机独立运行完整的操作系统,资源利用率较低。在同一台主机上运行多个虚拟机可能导致资源浪费。
- 更高的隔离性: 虚拟机提供了更强的隔离,因为它们运行独立的操作系统实例,相对于容器有更高的安全性。
优势对比:
特性 | 容器 | 虚拟机 |
---|---|---|
启动 | 秒级 | 分钟级 |
硬盘使用 | 一般为MB | 一般为GB |
性能 | 接近原生 | 弱于 |
系统支持量 | 单机支持上千个容器 | 一般是几十个 |
Docker的基本概念
- 镜像(Image)
- 容器(Container)
- 仓库(Repository)
镜像是 Docker
运行容器的前提,仓库是存放镜像的场所,可见镜像更是 Docker
的核心
镜像(Image)
Docker镜像可以看作是一个特殊的文件系统,包含运行应用程序所需的一切:代码、运行时环境、库、环境变量和配置文件等。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
镜像是分层的,每一层代表了构建过程中的一个步骤。这些层是只读的,当容器启动时,Docker会在镜像的顶部添加一个可写层。如果容器修改了现有的一个文件,该文件会从底层复制到顶层的可写层中,然后在这个可写层中被修改。这种机制称为“写时复制”(Copy-on-Write)
容器(Container)
Docker 容器是一个独立运行的执行单元,包含应用程序和其所有依赖项。容器基于镜像创建。所以容器 (container) 的定义和镜像 (image) 几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的
所以实际上上容器 = 镜像 + 读写层
仓库(Repository)
Docker仓库(Docker Repository)是集中存放Docker镜像的地方,可以被认为是一个镜像的集合或库。它允许用户上传、存储、下载和共享Docker镜像。
Docker Registry
(仓库注册服务器)就是这样的服务。有时候会把仓库 (Repository
) 和仓库注册服务器 (Registry
) 混为一谈,并不严格区分。Docker 仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服务。实际上,一个 Docker Registry 中可以包含多个仓库 (Repository) ,每个仓库可以包含多个标签 (Tag),每个标签对应着一个镜像。所以说,镜像仓库是 Docker 用来集中存放镜像文件的地方类似于我们之前常用的代码仓库。