Ubuntu 22.04 Docker 完整使用手册
目录
- [Docker 概述](#Docker 概述)
- 环境准备
- [Docker 安装](#Docker 安装)
- [Docker 基础配置](#Docker 基础配置)
- [Docker 核心概念](#Docker 核心概念)
- 镜像管理
- 容器管理
- 数据卷管理
- 网络管理
- [Dockerfile 编写指南](#Dockerfile 编写指南)
- [Docker Compose](#Docker Compose)
- [Docker 仓库与镜像仓库](#Docker 仓库与镜像仓库)
- 容器监控与日志
- 安全最佳实践
- 性能优化
- 常见问题与故障排除
- 附录:常用命令速查
1. Docker 概述
1.1 什么是 Docker
Docker 是一个开源的容器化平台,用于开发、交付和运行应用程序。它通过操作系统级虚拟化技术(容器)来打包软件及其所有依赖项,确保应用在任何环境中都能一致地运行。
1.2 容器 vs 虚拟机
| 特性 | 容器 (Docker) | 虚拟机 (VM) |
|---|---|---|
| 启动时间 | 毫秒级 | 分钟级 |
| 内核 | 共享宿主机内核 | 独立内核 |
| 镜像大小 | MB ~ GB | GB ~ TB |
| 性能 | 接近原生 | 有一定损耗 |
| 资源利用率 | 高 | 较低 |
| 隔离性 | 进程级隔离 | 完全隔离 |
1.3 Docker 架构
Docker 采用 C/S 架构,包含以下核心组件:
- Docker Daemon (dockerd):后台守护进程,管理 Docker 对象(镜像、容器、网络、数据卷)
- Docker Client (docker CLI):命令行工具,与 Docker Daemon 通信
- Docker Registry:镜像仓库,如 Docker Hub
- Docker Objects:镜像、容器、网络、数据卷等
- containerd:底层的容器运行时,负责容器的生命周期管理
- runc:OCI 兼容的容器运行时,负责创建和运行容器
2. 环境准备
2.1 系统要求
- Ubuntu 22.04 LTS(任何变体均可:Server、Desktop)
- 64 位操作系统(x86_64 / amd64 或 arm64)
- Linux 内核版本 3.10 或更高(推荐 5.x+)
- 至少 2GB RAM(推荐 4GB+)
- 至少 20GB 可用磁盘空间
2.2 检查系统版本
bash
# 检查 Ubuntu 版本
lsb_release -a
# 或查看发行版信息文件
cat /etc/os-release
# 检查内核版本
uname -r
# 检查系统架构
uname -m
2.3 卸载旧版本(如果存在)
如果系统中存在旧版本的 Docker(如 docker.io、docker-engine),需要先卸载:
bash
# 卸载旧版本 Docker
sudo apt-get remove -y docker docker-engine docker.io containerd runc
# 注意:/var/lib/docker/ 目录中的镜像、容器、卷、网络等数据会保留
# 如需完全清理旧数据(谨慎!会丢失所有 Docker 数据):
# sudo rm -rf /var/lib/docker/
# sudo rm -rf /var/lib/containerd/
3. Docker 安装
3.1 方法一:使用官方脚本自动安装(推荐)
这是最简单快捷的方式,适用于大多数场景:
bash
# 步骤 1:下载并执行 Docker 官方安装脚本
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# 如果 curl 未安装,先安装 curl
sudo apt-get update && sudo apt-get install -y curl
3.2 方法二:使用 apt 仓库安装(推荐生产环境)
这种方式便于后续用 apt 管理 Docker 的升级。
步骤 1:更新包索引并安装依赖
bash
sudo apt-get update
sudo apt-get install -y \
ca-certificates \
curl \
gnupg \
lsb-release
步骤 2:添加 Docker 官方 GPG 密钥
bash
# 创建密钥存储目录
sudo install -m 0755 -d /etc/apt/keyrings
# 下载并添加 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 设置密钥文件权限
sudo chmod a+r /etc/apt/keyrings/docker.gpg
步骤 3:设置 Docker APT 仓库
bash
# 将 Docker 仓库添加到 apt 源
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
说明 :
$(dpkg --print-architecture)自动检测系统架构(amd64/arm64),$(lsb_release -cs)自动检测 Ubuntu 发行版代号(如 jammy)。
步骤 4:安装 Docker Engine
bash
# 更新包索引(此时会从新添加的 Docker 仓库拉取信息)
sudo apt-get update
# 安装 Docker Engine、CLI、containerd 和 Docker Compose 插件
sudo apt-get install -y \
docker-ce \
docker-ce-cli \
containerd.io \
docker-buildx-plugin \
docker-compose-plugin
3.3 验证安装
bash
# 检查 Docker 版本
sudo docker version
# 检查 Docker 系统信息
sudo docker info
# 运行 hello-world 测试容器
sudo docker run hello-world
如果看到 "Hello from Docker!" 信息,说明安装成功。
3.4 安装 Docker Compose
在 Ubuntu 22.04 中,如果在安装 Docker 时一并安装了 docker-compose-plugin,则可以直接使用 docker compose 命令(注意是子命令形式)。
如果需要独立的 docker-compose 二进制文件:
bash
# 方法 1:使用 apt 安装(版本可能较旧,不推荐)
sudo apt-get install -y docker-compose
# 方法 2:从 GitHub 下载最新版(推荐)
# 首先查看最新版本:https://github.com/docker/compose/releases
DOCKER_COMPOSE_VERSION="v2.27.0"
sudo curl -L \
"https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" \
-o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# 验证安装
docker-compose --version
4. Docker 基础配置
4.1 将普通用户加入 docker 组(免 sudo 运行)
默认情况下,运行 Docker 命令需要 sudo 权限。将用户加入 docker 组后可以免 sudo 执行:
bash
# 创建 docker 组(通常安装时已创建)
sudo groupadd docker
# 将当前用户加入 docker 组
sudo usermod -aG docker $USER
# 将指定用户加入 docker 组
# sudo usermod -aG docker username
# 使组变更生效(二选一)
# 选项 A:重新登录(注销当前会话后重新登录)
# 选项 B:激活对组的更改(无需注销)
newgrp docker
# 验证是否生效(无需 sudo)
docker run hello-world
安全警告 :
docker组的用户拥有相当于 root 的权限。将用户加入docker组等于授予其无密码的 root 权限。生产环境中请谨慎管理。
4.2 配置 Docker 开机自启
bash
# 启用 Docker 开机自动启动
sudo systemctl enable docker.service
sudo systemctl enable containerd.service
# 立即启动 Docker 服务
sudo systemctl start docker.service
# 查看 Docker 服务状态
sudo systemctl status docker.service
# 重启 Docker 服务
sudo systemctl restart docker.service
# 停止 Docker 服务
sudo systemctl stop docker.service
# 禁用 Docker 开机自启
sudo systemctl disable docker.service
4.3 Docker Daemon 配置文件
Docker Daemon 的配置文件位于 /etc/docker/daemon.json。如果文件不存在,可以手动创建。
bash
# 创建或编辑 daemon.json
sudo mkdir -p /etc/docker
sudo vim /etc/docker/daemon.json
常用配置项示例:
json
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://mirror.ccs.tencentyun.com"
],
"data-root": "/var/lib/docker",
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"exec-opts": ["native.cgroupdriver=systemd"],
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
],
"insecure-registries": [],
"live-restore": true,
"max-concurrent-downloads": 10,
"max-concurrent-uploads": 5,
"default-ulimits": {
"nofile": {
"Name": "nofile",
"Hard": 65535,
"Soft": 65535
}
}
}
配置说明:
| 配置项 | 说明 | 默认值 |
|---|---|---|
registry-mirrors |
镜像加速器地址列表 | [] |
data-root |
Docker 数据存储目录 | /var/lib/docker |
log-driver |
日志驱动类型 | json-file |
log-opts.max-size |
单个日志文件最大大小 | - |
log-opts.max-file |
最多保留的日志文件数 | - |
exec-opts |
运行时选项(建议使用 systemd cgroup 驱动) | - |
storage-driver |
存储驱动(推荐 overlay2) | overlay2 |
live-restore |
Daemon 重启时保持容器运行 | false |
max-concurrent-downloads |
最大并行下载数 | 3 |
max-concurrent-uploads |
最大并行上传数 | 5 |
修改配置后重启 Docker 服务:
bash
sudo systemctl daemon-reload
sudo systemctl restart docker
4.4 配置镜像加速器
由于网络原因,从 Docker Hub 拉取镜像可能很慢。配置国内镜像加速器可以显著提升速度。
在 /etc/docker/daemon.json 中配置:
json
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://docker.nju.edu.cn",
"https://mirror.ccs.tencentyun.com"
]
}
常用国内镜像加速器:
| 镜像加速器 | 地址 |
|---|---|
| DaoCloud | https://docker.m.daocloud.io |
| 南京大学 | https://docker.nju.edu.cn |
| Docker Proxy | https://dockerproxy.com |
| 腾讯云 | https://mirror.ccs.tencentyun.com |
| 阿里云(需注册) | https://<your-code>.mirror.aliyuncs.com |
配置完成后重启 Docker:
bash
sudo systemctl daemon-reload
sudo systemctl restart docker
# 验证镜像加速器是否生效
docker info | grep -A 5 "Registry Mirrors"