文章目录
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 镜像是创建容器的基础,类似虚拟机的快照。
- 镜像是一个面向 Docker 容器引擎的只读模板,包含运行应用程序所需的所有内容,包括代码、运行时、库、环境变量和配置文件。
- 镜像也是一个压缩包,包含了完整的操作系统。
- 容器(Container)
- Docker 容器是从镜像创建的运行实例,可以被启动、停止和删除。
- 每个容器都是相互隔离、互不可见的,以保证平台的安全性。
- 容器可以看做是一个简易版的 Linux 环境和运行在其中的应用程序。
- 仓库(Repository)
- Docker 仓库用来集中保存镜像。
- 可以将创建的镜像上传到公有仓库或私有仓库。
- 在另一台机器上使用镜像时,只需从仓库获取。
Docker 数据存储
Docker 的镜像、容器、日志等内容默认存储在 /var/lib/docker
目录下。
Docker部署安装
- Docker 目前仅支持 64 位系统。
关闭防火墙和 SELinux
systemctl stop firewalld.service
setenforce 0
安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
- yum-utils:提供了
yum-config-manager
工具。 - device-mapper:Linux 内核中支持逻辑卷管理的通用设备映射机制。
- device-mapper-persistent-data 和 lvm2:device-mapper 存储驱动程序所需的依赖包。
设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装 Docker-CE 并设置为开机自动启动
yum install -y docker-ce docker-ce-cli containerd.io
systemctl start docker.service
systemctl enable docker.service
- Docker 系统包含两个程序:Docker 服务端和 Docker 客户端。
- Docker 服务端是一个服务进程,负责管理所有容器。
- Docker 客户端是 Docker 服务端的远程控制器,用于控制 Docker 服务端进程。
查看 Docker 版本信息
docker version
查看 Docker 信息
docker info
Client:
Context: default
Debug Mode: false
Plugins:
app: Docker App (Docker Inc., v0.9.1-beta3)
buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)
Server:
Containers: 0 # 容器数量
Running: 0
Paused: 0
Stopped: 0
Images: 1 # 镜像数量
Server Version: 20.10.3 # server 版本
Storage Driver: overlay2 # docker 使用的是 overlay2 文件驱动
Backing Filesystem: xfs # 宿主机上的底层文件系统
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs # Cgroups 驱动
Cgroup Version: 1
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: io.containerd.runtime.v1.linux runc io.containerd.runc.v2
Default Runtime: runc
Init Binary: docker-init
containerd version: 269548fa27e0089a8b8278fc4fc781d7f65a939b
runc version: ff819c7e9184c13b7c2607fe6c30ae19403a7aff
init version: de40ad0
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-693.el7.x86_64 # 宿主机的相关信息
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 976.3MiB
Name: localhost.localdomain
ID: Y4ES:FTH2:ZJL7:MRVE:RJVB:WJIB:S7BV:C5IZ:LMBR:E4G5:QWSM:SNDT
Docker Root Dir: /var/lib/docker # docker 数据存储目录
Debug Mode: false
Registry: https://index.docker.io/v1/ # registry 地址
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Registry Mirrors: # 加速站点
https://6ijb8ubo.mirror.aliyuncs.com/
Live Restore Enabled: false
Docker 系统信息
-
Client 部分:
- Context:当前使用的 Docker 上下文(默认为 “default”)。
- Debug Mode:客户端调试模式是否开启(此处为 false)。
- Plugins:列出已安装的 Docker 插件,如 Docker App 和 Buildx。
-
Server 部分(关键信息):
- Containers:
- Containers: 0(总容器数,包括运行、暂停和停止的容器)。
- Running: 0(正在运行的容器数)。
- Paused: 0(暂停的容器数)。
- Stopped: 0(停止的容器数)。
- Images: 1(本地镜像数)。
- Server Version: 20.10.3(Docker 服务器版本)。
- Storage Driver: overlay2(Docker 使用的存储驱动)。
- Backing Filesystem: xfs(宿主机上的底层文件系统)。
- Supports d_type: true(表示文件系统支持 d_type,有助于性能优化)。
- Native Overlay Diff: true(表示使用原生的 overlay diff 技术,提高性能)。
- Logging Driver: json-file(日志驱动)。
- Cgroup Driver: cgroupfs(Cgroups 驱动,用于资源限制和管理)。
- Plugins:列出 Docker 支持的卷、网络和日志插件。
- Swarm: inactive(Swarm 集群模式未启用)。
- Runtimes:列出 Docker 支持的运行时,如 runc。
- Default Runtime: runc(默认运行时)。
- Security Options:列出安全选项,如 seccomp(安全计算模式)。
- Kernel Version 和 Operating System:提供宿主机的内核版本和操作系统信息。
- Architecture:宿主机的架构(如 x86_64)。
- CPUs 和 Total Memory:宿主机的 CPU 数和总内存。
- Name 和 ID:Docker 主机的名称和唯一 ID。
- Docker Root Dir:Docker 数据存储的根目录(如 /var/lib/docker)。
- Debug Mode:服务器调试模式是否开启(此处为 false)。
- Registry:默认的 Docker 镜像仓库地址。
- Labels:Docker 主机的标签。
- Experimental:是否启用实验性功能(此处为 false)。
- Insecure Registries:列出不安全的镜像仓库地址(如 127.0.0.0/8)。
- Registry Mirrors:列出镜像加速站点,用于加速 Docker 镜像的拉取和推送。
- Live Restore Enabled:是否启用实时恢复功能(此处为 false)。
- Containers:
-
存储驱动(Storage Driver):Docker 使用 overlay2 作为其默认的存储驱动,它提供了高效的镜像和容器管理。
-
Cgroup 驱动(Cgroup Driver):cgroupfs 是 Linux 上用于限制、记录和隔离进程组所使用的物理资源(如 CPU、内存、磁盘 I/O 等)的机制。
-
运行时(Runtimes):Docker 支持多种容器运行时,其中 runc 是默认的运行时,用于启动和管理容器。
-
安全选项(Security Options):seccomp 是一种内核功能,用于在 Linux 上提供沙箱环境,限制容器内进程能够执行的系统调用。
-
镜像加速站点(Registry Mirrors):通过配置镜像加速站点,可以加速 Docker 镜像的下载速度,提高开发效率。