CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Docker 容器入门/课时/安装与环境
RawBlame
课时目录12 节

Docker 容器入门

  1. 01容器是什么
  2. 02安装与环境
  3. 03Docker CLI 基础
  4. 04镜像与分层
  5. 05编写 Dockerfile
  6. 06构建与优化
  7. 07镜像仓库
  8. 08数据卷与挂载
  9. 09网络
  10. 10Docker Compose
  11. 11容器安全基础
  12. 12综合练习与 K8s 方向

安装与环境

Docker Desktop、Engine、验证 docker version。

25 分钟

安装与环境

这一课你将能做到

  1. 在 Windows / macOS / Linux 任一平台完成 Docker 安装,并用 docker version 验证客户端与引擎都正常
  2. 配置国内镜像加速器,让 docker pull 从龟速变成秒级
  3. 跑通 hello-world 并拉取 MySQL 8.0 镜像,确认引擎、网络、存储三条链路全通

为什么要学

工具装不稳,后面 10 课全白搭。安装环节最容易踩的坑不在 Docker 本身,而在它的依赖上:Windows 要先有 WSL2、BIOS 要开虚拟化、国内网络要配加速器。把这些一次性处理干净,后面每课的命令才能顺畅执行。

同时这一课会帮你建立 Docker 的架构认知:docker 命令只是客户端,真正干活的是后台的 daemon。理解了这一点,你就明白为什么有「Docker Desktop」和「Docker Engine」两个东西、为什么 Linux 上默认要 sudo、为什么改配置要重启引擎。

本课程默认开发机是 Windows(Docker Desktop + WSL2),macOS 与 Linux 同样覆盖;生产部署场景(第 12 课)默认是 Linux 服务器 + Docker Engine。

先建立图像

你敲的命令                    后台真正干活的
┌─────────────┐   REST API   ┌──────────────────┐      ┌─────────────┐
│ docker CLI  │ ───────────→ │ dockerd (daemon)  │ ───→ │ Registry    │
│ docker.exe  │              │ 管镜像/容器/网络/卷 │      │ Docker Hub  │
└─────────────┘              └──────────────────┘      └─────────────┘

三个名词先分清:

名词是什么装在哪
Docker CLIdocker 命令行客户端所有平台
Docker Engine守护进程 + CLI + 运行时Linux 服务器(也可 Desktop 内置)
Docker DesktopEngine + GUI + WSL2 集成的桌面套件Windows / macOS

Windows 为什么需要 WSL2?因为 Linux 容器必须有 Linux 内核。WSL2 是微软提供的轻量级虚拟化 Linux 内核环境,Docker Desktop 把引擎跑在 WSL2 里,你在 PowerShell 敲命令,实际是转发给 WSL2 里的引擎。

跟着做

步骤 1:确认系统前提(Windows)

  1. Windows 10 64 位(2004 及以上,内部版本 19041+)或 Windows 11。
  2. 管理员身份打开 PowerShell,执行:
wsl --update
wsl --install
  1. 重启电脑。然后检查虚拟化是否开启:任务管理器 → 性能 → CPU → 「虚拟化:已启用」。若显示已禁用,需要进 BIOS 打开 Intel VT-x 或 AMD-V。

步骤 2:安装 Docker Desktop(Windows / macOS)

到 https://www.docker.com/products/docker-desktop/ 下载对应版本:

  • Windows:安装时保持默认勾选 Use WSL 2 based engine。
  • macOS:Apple 芯片(M1/M2/M3/M4)选 Apple Silicon 版。
  • 安装完成后启动 Docker Desktop,等右下角鲸鱼图标/状态条变绿。

步骤 3:Linux 服务器安装(Ubuntu 22.04 为例)

# 卸载旧版(如果有)
sudo apt-get remove -y docker docker-engine docker.io containerd runc

# 安装依赖与官方 GPG 密钥
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
  sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# 添加官方源并安装
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

sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 免 sudo 使用 docker(重新登录 shell 后生效)
sudo usermod -aG docker $USER

步骤 4:验证安装

docker version          # Client 和 Server 两段都有版本号才算引擎正常
docker info             # 引擎详情:镜像数、容器数、存储驱动、操作系统
docker run hello-world  # 拉取并运行官方测试镜像

hello-world 成功输出会包含一段「Hello from Docker!」——它证明三件事同时通了:CLI→daemon 通信、daemon→Registry 拉取、本地运行容器。

步骤 5:配置国内镜像加速

Docker Hub 在国内直连很慢且限流。打开 Docker Desktop → Settings → Docker Engine,在 JSON 里加 registry-mirrors:

{
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://docker.1ms.run"
  ]
}

点 Apply & Restart(会重启引擎)。Linux 服务器则编辑 /etc/docker/daemon.json 后执行:

sudo systemctl daemon-reload
sudo systemctl restart docker
docker info | grep -A 3 "Registry Mirrors"   # 确认加速器已加载

更稳的做法:登录阿里云控制台 → 容器镜像服务 → 镜像加速器,获取你的专属加速地址(每个账号一个,长期稳定)。

步骤 6:拉取业务镜像做全链路验证

docker pull mysql:8.0
docker images   # 应看到 mysql  8.0  一行

能稳定拉下来,说明加速器配置生效。这个镜像后面第 4、8、9、10 课都会反复使用。

讲清楚要点

  1. CLI 与 daemon 是 C/S 架构:docker 命令通过 REST API(默认走 /var/run/docker.sock 或 TCP)与 daemon 通信。Linux 上 permission denied ... docker.sock 就是当前用户不在 docker 组,用 usermod -aG docker 解决。
  2. Docker Desktop 与 Engine 的定位:开发机用 Desktop(自带 GUI、WSL2 集成、资源限额设置);生产服务器用 Engine(纯命令行,systemd 管理服务)。命令完全一致,学一套两边通用。
  3. WSL2 是 Windows 跑 Linux 容器的基石:容器内是真正的 Linux 环境。想给 Docker 分配内存/CPU,在 .wslconfig 或 Docker Desktop → Resources 里调,而不是改容器参数。
  4. daemon.json 是引擎的全局配置文件:加速器、日志大小限制(log-driver/log-opts)、insecure-registries 都在这里配,改完必须重启引擎。
  5. 版本号含义:docker version 里 Client 是 CLI 版本,Server 是引擎版本。生产排障时先核对两边版本,太老的 CLI 对新引擎会缺命令。

你可能会懵的地方

  • Docker Desktop 和 Docker Engine 装哪个? Windows/macOS 开发机:只能装 Desktop(它内部已经包含 Engine)。Linux:服务器装 Engine;Linux 桌面机两者皆可,纯命令行用 Engine 就够。

  • WSL2 和传统虚拟机是一回事吗? 思路类似(都是虚拟出一个 Linux 内核),但 WSL2 由系统组件 Hyper-V 轻量虚拟化实现,秒级启动、文件互访无缝,比装 VMware 轻得多。Docker Desktop 依赖它,不需要你再装 VMware/VirtualBox。

  • 为什么 Linux 上 docker 命令要 sudo? 因为访问 daemon 的 socket 文件属主是 root。把自己加进 docker 组即可免 sudo——但要知道:docker 组权限约等于 root 权限,别把非运维同事加进去。

  • hello-world 到底干了什么? 它是一个十几 KB 的极简镜像,唯一动作是打印一段说明文字然后退出。它常驻镜像列表里,用 docker images 能看到,可 docker rmi hello-world 删掉。

  • 拉镜像报 toomanyrequests 限流怎么办? Docker Hub 对匿名用户按 IP 限流(约每 6 小时 100 次 pull)。解法:注册 Docker Hub 账号并 docker login(额度翻倍),或走配置好的加速器。

错法对照

错法问题正解
Windows 上不开 WSL2 直接装 Desktop引擎起不来先 wsl --install 再装 Desktop
虚拟化没开就反复重装 Docker重装无用BIOS 开启 VT-x / AMD-V
加速地址写进别的配置文件不生效写 daemon.json 的 registry-mirrors,重启引擎
Linux 上一直 sudo docker权限绕过不统一usermod -aG docker $USER 后重新登录
用 apt 直接装 docker.io版本旧、缺 compose 插件用官方 apt 源装 docker-ce 全家桶
Desktop 一启动就卡住就卸载重装治标不治本先 wsl --shutdown 再重启 Desktop

卡点急救

  1. 报错 WSL 2 installation is incomplete:管理员 PowerShell 执行 wsl --update,然后重启 Docker Desktop。
  2. Docker Desktop 卡在 Starting:PowerShell 执行 wsl --shutdown,等 10 秒再启动 Desktop;仍不行则检查 BIOS 虚拟化。
  3. docker pull 超时/龟速:docker info 确认加速器已加载;加速地址失效就换列表里的另一个,或用阿里云专属地址。
  4. Linux 上 permission denied 连接 docker.sock:sudo usermod -aG docker $USER,注销重新登录(newgrp docker 可临时生效)。
  5. 端口 hello-world 都跑不起来报网络错误:检查公司代理——Docker Desktop → Settings → Resources → Proxies 填入代理地址。

面试常问

  • 描述一下 Docker 的整体架构? 客户端 docker CLI 通过 REST API 调用 daemon(dockerd);daemon 负责构建、运行、管理容器,底层用 containerd + runc 创建进程;镜像从 Registry(Docker Hub / 私有仓库)拉取。三者可以分布在不同机器。

  • 为什么 Windows 上能跑 Linux 容器? Windows 自身内核不是 Linux,所以 Docker Desktop 用 WSL2 提供一个真正的 Linux 内核,容器跑在 WSL2 的轻量虚拟机里。Linux 容器永远需要 Linux 内核,这一点不因平台而变。

  • Docker Desktop 和 Docker Engine 的区别? Engine 是核心(daemon + CLI + 运行时),Linux 原生;Desktop 是面向开发者的封装,额外提供 GUI、WSL2/Hyper-V 集成、资源限额、自动更新。命令行体验一致。

  • 镜像加速的原理是什么? 配置的 mirror 相当于 Docker Hub 的只读缓存代理。拉取时 daemon 先请求 mirror,未命中再回源 Hub,命中后缓存后续请求直接返回。

自测三问

  1. docker run hello-world 成功运行,证明了哪三条链路是通的?
  2. 为什么改了 daemon.json 必须重启 Docker 引擎?重启会影响正在运行的容器吗?
  3. Windows 上想限制 Docker 总共只用 8GB 内存,应该在哪里设置?

小结一句话

安装的本质是把「CLI → 引擎 → Registry」三条链路接通:Windows 靠 WSL2 供内核,国内靠加速器供网速,hello-world 是三条链路的统一验收标准。

延伸

  • Docker Desktop 官方安装文档
  • Engine 安装(Ubuntu)
  • 下一课预告:Docker CLI 基础——用 run、ps、logs、exec 亲手操纵你的第一批容器。
加载本节练习…
← 上一课容器是什么下一课 →Docker CLI 基础