Docker 环境配置
本章将介绍如何在不同的操作系统上安装和配置 Docker。
安装 Docker
Windows 安装
系统要求
Docker Desktop 在 Windows 上支持两种后端架构:WSL 2 和 Hyper-V。两者功能一致,各有优缺点。
WSL 2 模式要求:
- WSL 版本 2.1.5 或更高
- 如果要使用增强容器隔离(Enhanced Container Isolation),需要 WSL 2.6 或更高版本(因为 ECI 依赖 Linux 内核 6.3.0+,而 WSL 2.6+ 捆绑内核 6.6)
- Windows 10 64位:企业版、专业版或教育版 22H2(内部版本 19045)
- Windows 11 64位:企业版、专业版或教育版 23H2(内部版本 22631)或更高版本
- 启用 WSL 2 功能
- 硬件要求:
- 64位处理器,支持二级地址转换(SLAT)
- 8GB 系统内存
- 在 BIOS/UEFI 中启用硬件虚拟化
Hyper-V 模式要求:
- Windows 10 64位:企业版、专业版或教育版 22H2(内部版本 19045)
- Windows 11 64位:企业版、专业版或教育版 23H2(内部版本 22631)或更高版本
- 启用 Hyper-V 和容器功能
- 硬件要求与 WSL 2 模式相同
重要说明:
- Docker Desktop 不支持 Windows Server 版本
- 运行 Windows 容器需要 Windows 10/11 专业版或企业版
- 家庭版和教育版只能运行 Linux 容器
安装步骤
方法一:交互式安装
-
从 Docker 官网 下载 Docker Desktop for Windows 安装程序
-
双击
Docker Desktop Installer.exe运行安装程序,默认安装位置为C:\Program Files\Docker\Docker -
在配置页面,根据需要选择使用 WSL 2 还是 Hyper-V 作为后端
-
按照安装向导完成安装
-
安装完成后,如果管理员账户与用户账户不同,需要将用户添加到
docker-users组:- 以管理员身份运行"计算机管理"
- 导航到"本地用户和组" > "组" > "docker-users"
- 右键添加用户到该组
- 注销并重新登录使更改生效
方法二:命令行安装
# 基本安装
Start-Process 'Docker Desktop Installer.exe' -Wait install
# 带参数安装(接受许可协议)
Start-Process 'Docker Desktop Installer.exe' -Wait -ArgumentList 'install', '--accept-license'
# 将用户添加到 docker-users 组
net localgroup docker-users <用户名> /add
常用安装参数:
| 参数 | 说明 |
|---|---|
--quiet | 静默安装,不显示信息输出 |
--accept-license | 自动接受 Docker 订阅服务协议 |
--installation-dir=<路径> | 更改默认安装位置 |
--backend=wsl-2 | 使用 WSL 2 后端(默认) |
--backend=hyper-v | 使用 Hyper-V 后端 |
--always-run-service | 安装后自动启动服务 |
WSL 2 验证与设置
如果选择 WSL 2 后端,首先验证 WSL 版本:
wsl --version
如果版本信息未显示,需要更新 WSL:
# 以管理员身份运行 PowerShell
wsl --install
wsl --update
如果由于安全策略无法访问 Microsoft Store,可以从 WSL GitHub Releases 下载 MSI 安装包。
验证安装
# 查看 Docker 版本
docker version
# 查看 Docker 详细信息
docker info
# 运行测试容器
docker run hello-world
macOS 安装
系统要求
- macOS 11 (Big Sur) 或更高版本
- Apple Silicon (M1/M2/M3/M4) 或 Intel 芯片
安装步骤
-
从 Docker 官网 下载对应芯片版本的 Docker Desktop
-
将 Docker.app 拖到 Applications 文件夹
-
打开 Docker Desktop 应用,等待启动完成
-
首次启动时需要接受 Docker 订阅服务协议
-
验证安装:
docker version
docker run hello-world
Linux 安装
Docker 在 Linux 上可以通过多种方式安装:使用 Docker Desktop、通过包管理器安装、或使用便捷脚本。
Ubuntu/Debian 安装
系统要求:
- Ubuntu Noble 24.04 (LTS)
- Ubuntu Jammy 22.04 (LTS)
- 64位系统,支持 x86_64、armhf、arm64、s390x、ppc64le 架构
卸载旧版本:
# 卸载可能存在的旧版本或非官方版本
sudo apt remove docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc
使用 apt 仓库安装(推荐):
# 1. 更新软件包索引并安装依赖
sudo apt update
sudo apt install ca-certificates curl
# 2. 创建 keyrings 目录
sudo install -m 0755 -d /etc/apt/keyrings
# 3. 添加 Docker 官方 GPG 密钥
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# 4. 设置 Docker 仓库
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Signed-By: /etc/apt/keyrings/docker.asc
EOF
# 5. 安装 Docker Engine
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 6. 验证安装
sudo docker run hello-world
安装特定版本:
# 列出可用版本
apt list --all-versions docker-ce
# 安装指定版本
VERSION_STRING=5:29.2.1-1~ubuntu.24.04~noble
sudo apt install docker-ce=$VERSION_STRING docker-ce-cli=$VERSION_STRING containerd.io docker-buildx-plugin docker-compose-plugin
CentOS/RHEL 安装
# 1. 安装必要工具
sudo yum install -y yum-utils
# 2. 添加 Docker 仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 3. 安装 Docker
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 4. 启动 Docker
sudo systemctl start docker
sudo systemctl enable docker
# 5. 验证安装
sudo docker run hello-world
使用便捷脚本安装
适用于开发环境快速安装:
# 下载脚本
curl -fsSL https://get.docker.com -o get-docker.sh
# 预览脚本将执行的步骤(不实际安装)
sudo sh ./get-docker.sh --dry-run
# 执行安装
sudo sh get-docker.sh
便捷脚本注意事项:
- 需要以 root 或 sudo 权限运行
- 自动检测 Linux 发行版并配置包管理器
- 安装最新的稳定版本
- 不适合生产环境
- 不用于升级现有安装
安装后配置
将用户添加到 docker 组
避免每次使用 docker 命令都需要 sudo:
# 将当前用户添加到 docker 组
sudo usermod -aG docker $USER
# 使更改生效
newgrp docker
# 或者注销并重新登录
配置镜像加速器
国内用户可以配置镜像加速器提高拉取速度。
Linux 配置
# 创建或编辑 daemon.json
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn"
]
}
EOF
# 重启 Docker 服务
sudo systemctl daemon-reload
sudo systemctl restart docker
Docker Desktop 配置(Windows/macOS)
打开 Docker Desktop 设置 -> Docker Engine,在 JSON 配置中添加:
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn"
]
}
点击 "Apply & Restart" 重启 Docker。
配置 Docker 数据目录
默认情况下,Docker 数据存储在 /var/lib/docker。如果需要更改:
# 编辑 daemon.json
sudo vi /etc/docker/daemon.json
添加以下配置:
{
"data-root": "/mnt/docker-data"
}
然后重启 Docker:
sudo systemctl restart docker
配置日志驱动
限制容器日志大小,防止磁盘被占满:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
配置存储驱动
Docker 支持多种存储驱动,推荐使用 overlay2:
{
"storage-driver": "overlay2"
}
重要变化(Docker Engine v29+):
从 Docker Engine 29.0 开始,新安装默认使用 containerd 镜像存储(containerd image store),取代了传统的 overlay2 存储驱动。containerd 镜像存储提供以下优势:
- 更好的多平台镜像支持
- 改进的性能和资源效率
- 与 Kubernetes 等容器编排工具更好的兼容性
- 支持新的
docker image ls树形视图
查看当前存储后端:
docker info | grep -i "storage"
# 使用 containerd 时显示: Storage Driver: overlay2
# 但实际上使用的是 containerd 的 snapshotter
注意事项:
- 现有 Docker 安装升级时不会自动切换到 containerd 镜像存储
- 配置了
userns-remap的守护进程暂时不支持 containerd 镜像存储 - 可以在 daemon.json 中显式配置:
"features": {"containerd-snapshotter": true}
cgroup v1 已弃用
Docker Engine v29 正式宣布 cgroup v1 已弃用。支持将持续到至少 2029 年 5 月,但建议尽快迁移到 cgroup v2。cgroup v2 提供以下改进:
- 统一的层级结构,简化资源管理
- 更好的资源分配粒度
- 改进的压力阻塞信息(PSI)
- 更现代的 API 设计
检查系统使用的 cgroup 版本:
# 方法 1:查看挂载点
mount | grep cgroup
# 如果输出包含 cgroup2,说明使用的是 cgroup v2
# 如果输出包含 cgroup(不带2),说明使用的是 cgroup v1
# 方法 2:查看文件系统
stat /sys/fs/cgroup/cgroup.controllers
# 文件存在则为 cgroup v2
迁移到 cgroup v2:
现代 Linux 发行版默认已使用 cgroup v2:
| 发行版 | cgroup v2 默认启用版本 |
|---|---|
| Ubuntu | 22.04+ |
| Debian | 11+ (Bullseye) |
| CentOS | 9+ |
| Fedora | 31+ |
| RHEL | 9+ |
如果你的系统仍在使用 cgroup v1,可以通过内核参数切换:
# 编辑 GRUB 配置
sudo vi /etc/default/grub
# 在 GRUB_CMDLINE_LINUX 中添加
GRUB_CMDLINE_LINUX="... systemd.unified_cgroup_hierarchy=1"
# 更新 GRUB 并重启
sudo update-grub # Debian/Ubuntu
sudo grub2-mkconfig -o /boot/grub2/grub.cfg # RHEL/CentOS
sudo reboot
Docker Desktop 配置
资源设置
在 Docker Desktop 设置中可以调整:
| 设置项 | 说明 |
|---|---|
| CPUs | 分配给 Docker 的 CPU 核心数 |
| Memory | 分配给 Docker 的内存大小 |
| Swap | 交换空间大小 |
| Disk image location | 虚拟磁盘位置 |
启用 Kubernetes
Docker Desktop 内置 Kubernetes 支持:
- 打开 Settings -> Kubernetes
- 勾选 "Enable Kubernetes"
- 点击 "Apply & Restart"
Docker Desktop 支持两种 Kubernetes 模式:
- kind:使用 kind 在 Docker 容器中运行 Kubernetes(默认)
- kubeadm:传统的 kubeadm 集群
Docker Desktop 新功能
Docker Desktop 持续引入新功能,以下是一些值得关注的新特性:
Docker Debug: 用于调试容器的命令行工具,现在对所有用户免费开放。可以在运行中的容器内执行命令、查看文件、调试网络问题。
# 调试运行中的容器
docker debug <container>
# 使用自定义镜像调试
docker debug --image nicolaka/netshoot <container>
Docker Model Runner: 在本地运行 AI 大语言模型(需要支持的硬件)。
# 拉取模型
docker model pull ai/llama3.2
# 运行模型
docker model run ai/llama3.2
# 查看模型列表
docker model ls
Docker Sandboxes: 安全隔离的微虚拟机环境,适合运行编码代理等不受信任的代码。
# 创建沙箱环境
docker sandbox create
Docker Desktop 网络设置
Docker Desktop 默认使用虚拟网络,可以通过配置调整:
{
"default-address-pools": [
{
"base": "10.0.0.0/16",
"size": 24
}
]
}
验证安装
检查版本和服务状态
# 查看 Docker 版本
docker version
# 查看 Docker 系统信息
docker info
# 查看 Docker 服务状态(Linux)
sudo systemctl status docker
运行测试容器
# 拉取并运行 hello-world 镜像
docker run hello-world
# 运行交互式容器
docker run -it ubuntu bash
# 在容器中执行命令
root@container:/# cat /etc/os-release
root@container:/# exit
测试 Docker Compose
# 检查 Docker Compose 版本
docker compose version
测试 Docker Buildx
# 检查 Buildx 版本
docker buildx version
# 创建并使用新的构建器
docker buildx create --name mybuilder --use
docker buildx inspect --bootstrap
常见问题排查
1. WSL 2 相关问题
问题:Windows 上提示 WSL 2 未安装或版本过低
解决方案:
# 启用 WSL
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
# 启用虚拟机平台
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
# 重启计算机后,设置 WSL 2 为默认版本
wsl --set-default-version 2
# 更新 WSL 内核
wsl --update
2. 权限问题
问题:执行 docker 命令提示权限不足
解决方案:
# 确保用户在 docker 组中
groups $USER
# 如果不在,添加用户到 docker 组
sudo usermod -aG docker $USER
# 重新登录或执行
newgrp docker
3. 网络问题
问题:无法拉取镜像
解决方案:
- 检查网络连接
- 配置镜像加速器
- 检查防火墙和代理设置
- 检查 DNS 配置
# 测试网络连接
ping google.com
# 测试 Docker Hub 连接
curl -I https://registry-1.docker.io/v2/
# 查看当前镜像配置
docker info | grep -A 5 "Registry Mirrors"
4. 磁盘空间问题
问题:Docker 占用磁盘空间过大
解决方案:
# 查看 Docker 磁盘使用情况
docker system df
# 清理未使用的镜像、容器、网络和构建缓存
docker system prune -a
# 只清理悬空镜像
docker image prune
# 只清理停止的容器
docker container prune
# 只清理未使用的卷
docker volume prune
5. 防火墙问题
问题:UFW 或 firewalld 与 Docker 端口冲突
Docker 通过 iptables 直接管理端口转发,可能绕过 UFW 规则。需要手动配置:
# 编辑 UFW 配置
sudo vi /etc/default/ufw
# 设置 DEFAULT_FORWARD_POLICY 为 ACCEPT
DEFAULT_FORWARD_POLICY="ACCEPT"
# 重新加载 UFW
sudo ufw reload
6. Docker Desktop 启动失败
问题:Docker Desktop 无法启动
解决方案:
- 重启 Docker Desktop
- 检查虚拟化是否启用
- 清理 Docker 数据目录
- 重新安装 Docker Desktop
# Windows 上重置 Docker Desktop
wsl --unregister docker-desktop
wsl --unregister docker-desktop-data
开发工具集成
VS Code 集成
- 安装 Docker 扩展
扩展 ID: ms-azuretools.vscode-docker
- 功能特性:
- 镜像和容器可视化管理
- Dockerfile 语法高亮和智能提示
- docker-compose.yml 支持
- 一键运行和调试容器
- 容器内代码调试
JetBrains IDE 集成
- IntelliJ IDEA:Docker Integration 插件
- PyCharm:内置 Docker 支持
- WebStorm:内置 Docker 支持
- GoLand:内置 Docker 支持
命令行自动补全
Bash:
# 添加到 ~/.bashrc
source /usr/share/bash-completion/completions/docker
source /usr/share/bash-completion/completions/docker-compose
Zsh:
# 使用 zsh-completions
brew install zsh-completions
# 或手动添加
fpath=(~/.zsh/completion $fpath)
autoload -Uz compinit && compinit
小结
Docker 环境配置要点:
- 在 Windows、macOS 和 Linux 上安装 Docker 的具体步骤
- 配置镜像加速器提高拉取速度
- 调整 Docker 资源配置(CPU、内存、磁盘)
- 验证 Docker 安装是否成功
- 解决常见安装和配置问题
- 与 VS Code、JetBrains IDE 等开发工具集成
练习
- 在你的操作系统上安装 Docker
- 运行
docker run hello-world验证安装 - 配置镜像加速器并测试拉取速度
- 使用
docker info查看 Docker 系统信息 - 安装 VS Code Docker 扩展并尝试管理容器
- 运行一个交互式 Ubuntu 容器并执行命令