文章目录
Docker
概述
Docker 是一个开源的应用容器引擎,基于 Go 语言开发并遵循 Apache 2.0 协议开源。它允许在 Linux 容器中运行应用程序,是一种轻量级的“虚拟机”。Docker 的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自给自足的容器。
Docker 的 Logo 设计
Docker 的 Logo 设计为一条蓝色鲸鱼,拖着许多集装箱。鲸鱼代表宿主机,集装箱代表相互隔离的容器,每个集装箱中都包含自己的应用程序。
Docker 的设计宗旨
Docker 的设计宗旨是 Build, Ship and Run Any App, Anywhere。通过对应用组件的封装、发布、部署、运行等生命周期的管理,达到应用组件级别的“一次封装,到处运行”的目的。这里的组件可以是一个应用、一套服务,甚至是一个完整的操作系统。
容器化的优势
- 灵活:即使是最复杂的应用也可以集装箱化。
- 轻量级:容器利用并共享主机内核。
- 可互换:可以即时部署更新和升级。
- 便携式:可以在本地构建,部署到云,并在任何地方运行。
- 可扩展:可以增加并自动分发容器副本。
- 可堆叠:可以垂直和即时堆叠服务。
Docker 与 虚拟机的区别
特性 | Docker 容器 | 虚拟机 |
---|---|---|
启动速度 | 秒级 | 分钟级 |
计算能力损耗 | 几乎无 | 损耗 50%左右 |
性能 | 接近原生 | 弱于 |
系统支持量(单机) | 上千个 | 几十个 |
隔离性 | 资源隔离/限制 | 完全隔离 |
Linux 六大命名空间
命名空间 | 缩写 | 作用 | 效果 |
---|---|---|---|
MNT | 挂载 | 文件系统隔离 | 每个命名空间可以有自己的文件系统挂载点 |
NET | 网络 | 网络资源隔离 | 每个命名空间可以有自己的网络栈,包括网络接口、路由表等 |
PID | 进程 | 进程号隔离 | 每个命名空间有自己独立的 PID 编号空间 |
IPC | 间通 | 进程间通信隔离 | 每个命名空间有自己独立的 System V IPC 和 POSIX 消息队列 |
UTS | 主机 | 主机名、域名隔离 | 每个命名空间可以有自己的主机名和域名 |
USER | 用户 | 用户名、组名隔离 | 每个命名空间可以有自己的用户和组 ID 映射 |
Docker 的核心技术
Docker 容器本质上是宿主机的一个进程,通过以下技术实现资源隔离和限制:
- Namespace:实现资源隔离。
- Cgroup:实现资源限制。
- 写时复制技术(Copy-on-Write):实现高效的文件操作。
Docker 核心概念
- 镜像(Image)
- Docker