1.1 Docker 简介
Docker 之父 Solomon Hykes 有一个经典比喻:Docker 就好比传统的货运集装箱。
!NOTE 2008 年 LXC (LinuX Contiainer) 发布,但是没有行业标准,兼容性非常差; Docker 在 2013 年首次发布,由 Docker, Inc 开发。
1.1.1 什么是 Docker

Docker 是管理容器的引擎,是为应用打包、部署的平台,并非单纯的虚拟化技术。 它具有以下几个重要特点和优势:
- 轻量级虚拟化 Docker 容器相较于传统的虚拟机更加轻量和高效,能够快速启动和停止,节省系统资源。 例如,启动一个 Docker 容器可能只需要几秒钟,而启动一个虚拟机则可能需要几分钟。
- 一致性 确保应用程序在不同的环境中(开发、测试、生产)具有一致的运行表现。 无论在本地还是云端,应用的运行环境都能保持相同,减少 "在我电脑上能跑" 这类环境差异问题。
- 可移植性 可以轻松地将 Docker 容器从一个平台迁移到另一个平台,无需担心依赖和环境配置的差异。 本地开发打包好的容器,可以无缝部署到云服务器上。
- 高效的资源利用 多个 Docker 容器可以共享主机的操作系统内核,相比虚拟机不需要独立操作系统,资源利用率更高。
- 易于部署和扩展 能够快速部署新的应用实例,并且可以根据业务流量轻松完成水平扩展。
总而言之,Docker 极大地简化了应用程序的开发、部署和管理流程,提高了开发效率和运维的便利性,在现代软件开发、云计算领域被广泛使用。
1.1.2 Docker 在企业中的应用场景
在企业中,Docker 作为业务的最小载体被大规模使用。借助 Docker,企业可以更加高效地部署业务应用,同时节约服务器资源。
!NOTE IaaS(Infrastructure as a Service):基础设施即服务 PaaS(Platform as a Service):平台即服务 SaaS(Software as a Service):软件即服务
Docker 可以运行在 IaaS 层之上,作为 PaaS 平台的底层基础,是微服务、CI/CD 流水线、私有云平台非常核心的底层组件。
1.1.3 Docker 与虚拟化的对比
| 对比项 | 虚拟机 | Docker 容器 |
|---|---|---|
| 操作系统 | 拥有独立完整虚拟机 OS | 共享宿主机操作系统内核 |
| 存储 | 镜像较大,一般 GB 级别 | 镜像小巧,多为 MB 级别 |
| 性能 | 存在额外 CPU、内存虚拟化开销 | 几乎无性能损耗,接近原生 |
| 移植性 | 笨重,和虚拟化方案耦合高 | 轻量,镜像一次构建随处运行 |
| 隔离性 | 硬件级完全隔离 | 内核提供的资源隔离,安全隔离 |
| 部署速度 | 慢,分钟级启动 | 快速,秒级启动 |
| 运行密度 | 单机数量有限 | 单机可以支持上千个容器 |
1.1.4 Docker 的优势
- 对于开发人员:Build once、Run anywhere(一次构建,随处运行)
- 对于运维人员:Configure once、Run anything(一次配置,承载各类业务)
容器技术统一了开发与运维的交付标准,大大提升 IT 人员的工作效率。
1.2 部署 Docker
官方文档地址:Docker Docs
本次部署环境:RHEL9 系列,使用阿里 Docker 源
1.2.1 容器的工作方法
Docker 底层依托 Linux 内核特性实现资源隔离与资源限制:
- Namespace:实现 PID、网络、挂载、用户等资源隔离,让容器内部看起来是独立系统
- Cgroups:限制容器 CPU、内存、磁盘 IO 等资源上限,防止单容器耗尽宿主机资源
- UnionFS:联合文件系统,实现分层镜像,镜像复用、只读分层 + 容器读写层
1.2.2 部署第一个容器
1.2.2.1 配置软件仓库
使用阿里云 Docker CE 镜像源,适配 RHEL9 x86_64
[root@docker-node1 ~]# cat /etc/yum.repos.d/docker.repo
[docker]
name=docker
baseurl=https://mirrors.aliyun.com/docker-ce/linux/rhel/9.3/x86_64/stable/
gpgcheck=0
1.2.2.2 安装 Docker-ce 并修改启动文件
# 安装docker-ce
[root@docker-node1 ~]# dnf install docker-ce -y
# 编辑docker启动文件,指定使用iptables(RHEL9默认是nftables)
[root@docker-node1 ~]# vim /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --iptables=true
说明:RHEL9 默认 nftables,部分企业网络环境习惯使用 iptables,添加 --iptables=true 参数适配。
1.2.2.3 激活内核网络选项并启动服务
# 加载网桥过滤模块
[root@docker-node1 ~]# echo br_netfilter > /etc/modules-load.d/docker_mod.conf
[root@docker-node1 ~]# modprobe -a br_netfilter
# 配置内核转发与网桥过滤参数
[root@docker-node1 ~]# cat > /etc/sysctl.d/docker.conf <<EOF
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
# 生效sysctl配置
[root@docker-node1 ~]# sysctl --system
# 开机自启并立刻启动docker服务
[root@docker-node1 ~]# systemctl enable --now docker
1.2.2.4 验证 Docker + 运行第一个容器
# 查看docker版本
docker --version
# 查看docker详细信息
docker info
# 运行hello-world测试容器
docker run hello-world
输出 hello-world 提示信息,代表 Docker 环境部署成功。