跳到主要内容

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 容器

安装步骤

方法一:交互式安装

  1. Docker 官网 下载 Docker Desktop for Windows 安装程序

  2. 双击 Docker Desktop Installer.exe 运行安装程序,默认安装位置为 C:\Program Files\Docker\Docker

  3. 在配置页面,根据需要选择使用 WSL 2 还是 Hyper-V 作为后端

  4. 按照安装向导完成安装

  5. 安装完成后,如果管理员账户与用户账户不同,需要将用户添加到 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 芯片

安装步骤

  1. Docker 官网 下载对应芯片版本的 Docker Desktop

  2. 将 Docker.app 拖到 Applications 文件夹

  3. 打开 Docker Desktop 应用,等待启动完成

  4. 首次启动时需要接受 Docker 订阅服务协议

  5. 验证安装:

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 默认启用版本
Ubuntu22.04+
Debian11+ (Bullseye)
CentOS9+
Fedora31+
RHEL9+

如果你的系统仍在使用 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 支持:

  1. 打开 Settings -> Kubernetes
  2. 勾选 "Enable Kubernetes"
  3. 点击 "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 集成

  1. 安装 Docker 扩展
扩展 ID: ms-azuretools.vscode-docker
  1. 功能特性:
    • 镜像和容器可视化管理
    • 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 等开发工具集成

练习

  1. 在你的操作系统上安装 Docker
  2. 运行 docker run hello-world 验证安装
  3. 配置镜像加速器并测试拉取速度
  4. 使用 docker info 查看 Docker 系统信息
  5. 安装 VS Code Docker 扩展并尝试管理容器
  6. 运行一个交互式 Ubuntu 容器并执行命令