搭建Docker环境:你的第一台集装箱码头

操作系统选择,其实没那么纠结

很多人问我:“我该用Windows、Mac还是Linux?”

我个人的观点很直接:选你日常开发的操作系统就行。Docker的设计初衷就是跨平台,别为了它专门装个双系统。但不同系统的安装方式确实有区别,我整理了个表给你看。

操作系统 安装方式 核心依赖 我踩过的坑
Windows 10/11 Docker Desktop 或 WSL2 后端 WSL2、Hyper-V Hyper-V与VirtualBox冲突
macOS (Intel) Docker Desktop HyperKit 磁盘镜像文件膨胀
macOS (Apple Silicon) Docker Desktop (Apple Silicon版) Rosetta 2 可选 部分老镜像兼容问题
Linux 包管理器安装 docker-ce cgroups、namespaces Rootless模式启动失败

Linux用户呢?其实更爽。Docker原生跑在Linux内核上,不需要虚拟机层。我基本只用包管理器装docker-ce,省事。

# Ubuntu / Debian
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

# CentOS / RHEL
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
注意:装完别忘了把当前用户加入docker组,不然每次都得sudo。我曾经忘了这步,敲了一上午sudo docker,手腕都快废了。

Docker Desktop vs 纯命令行:选哪个?

这个问题的答案,说白了取决于你愿不愿意看GUI。

Docker Desktop适合刚接触Docker的人,也适合喜欢可视化操作的人。它自带了一个漂亮的Dashboard,可以查看容器、镜像、卷、网络的状态。我刚开始学Docker那会儿,全靠这个Dashboard来理解“容器到底跑没跑起来”。

纯命令行更适合那些追求极致效率的人。比如我,现在基本只用命令行。因为真要搞自动化、写CI/CD脚本、调生产环境,最后还是得用docker命令。

Docker Desktop的优点

  • 一键安装,默认配置
  • 包含Dashboard、Kubernetes单节点
  • 自动更新
  • 不用操心后端虚拟化技术

Docker Desktop的槽点

  • Windows/Mac上它跑了一个虚拟机,占用资源较高
  • 磁盘镜像文件动不动几十GB
  • 商业公司要付费

命令行安装的优势

  • 只装你需要的组件,轻量
  • 完全可脚本化
  • 不会自动重启恶心你

Windows上的安装与配置

Windows是比较麻烦的。我踩过最深的坑就是Hyper-V与VirtualBox不兼容。你如果之前装过VirtualBox,那安装Docker Desktop时可能会遇到蓝屏或者无法启动。

推荐安装流程:

  1. 先开启WSL2(Windows Subsystem for Linux 2)
  2. 从Docker官网下载Docker Desktop for Windows
  3. 安装时选择“使用WSL2后端”
  4. 装完后重启

为什么要用WSL2后端?因为它比Hyper-V更轻量,启动更快,文件共享也更顺畅。

# 检查WSL2是否已启用
wsl --status

# 列出已安装的WSL发行版
wsl --list --verbose

# 如果看不到WSL2,需要手动安装
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
wsl --set-default-version 2

个人习惯:我会在Docker Desktop的设置里把磁盘镜像放在非系统盘。不然C盘分分钟被撑爆。路径一般在 Settings → Resources → Advanced → Disk image location。

注意:Windows版的Docker Desktop默认使用Hyper-V后端。如果你装的Windows是家庭版,可能没有Hyper-V功能。那就必须用WSL2后端了。否则报错“Docker Desktop requires Windows Pro or Enterprise”。

解决方法:
打开PowerShell(管理员),运行:

dism.exe /online /enable-feature /featurename:Microsoft-Hyper-V /all /norestart

然后重启,再不行就检查BIOS里的虚拟化是否开启。

macOS上的安装与配置

Mac用户相对幸福,Docker Desktop for Mac装起来基本一路下一步。

# 用Homebrew安装也行,但我个人推荐直接去官网下载
brew install --cask docker

但是,Apple Silicon芯片(M1/M2/M3)的用户要注意:Docker Desktop已经原生支持ARM架构了,但并不是所有镜像都支持ARM架构。你在跑x86_64的镜像时,Docker Desktop会自动用QEMU模拟,性能会差不少。

我记得有一次在M1 Pro上跑一个老项目的基础镜像,结果构建时间比在Intel Mac上慢了3倍。后来我换成了arm64基础镜像,速度才恢复。

解决方案:尽量选择linux/arm64的镜像,或者用--platform参数指定。

# 拉取arm64版本的ubuntu
docker pull --platform linux/arm64 ubuntu:22.04

# 也可以在Dockerfile里声明
FROM --platform=$BUILDPLATFORM ubuntu:22.04

Linux上的安装与配置

Linux上安装Docker更纯粹一些。但有不少细节容易忽略。

# 配置Docker的yum源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 安装docker引擎
sudo yum install docker-ce docker-ce-cli containerd.io

# 设置开机自启
sudo systemctl enable docker

# 启动Docker
sudo systemctl start docker

技巧:装完Docker后,第一件事不是去拉镜像,而是检查Docker是否正常运行。跑一下:

sudo docker run hello-world

如果看到“Hello from Docker!”,说明环境部署成功了。如果报错“Cannot connect to the Docker daemon”,那大概率是docker服务没启动。

# 检查docker服务状态
sudo systemctl status docker

# 如果没启动,手动启动
sudo systemctl start docker

# 再检查
sudo docker info

避坑指南:我曾经在一台CentOS 7服务器上装Docker,装完后死活跑不起来。找了半天原因,发现是操作系统内核版本太低(3.10),Docker 20.10以上版本要求内核版本至少4.0以上。最后只能升级内核或者降级Docker版本。

安装后的验证与配置

不管你用的是哪个操作系统,装完之后建议做这几件事:

  1. 检查版本信息
  2. 测试基本命令
  3. 配置国内镜像加速(如果在中国大陆)
  4. 配置非root用户运行
# 查看Docker版本
docker version
docker info

# 测试能不能跑容器
docker run --rm hello-world

# 查看当前镜像列表
docker images

# 查看容器列表
docker ps -a

加速配置:在中国大陆,拉取Docker Hub镜像可能会非常慢。我建议配置镜像加速器。

Windows/Mac用户可以在Docker Desktop的设置Docker Engine里添加:

{
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://dockerproxy.com"
  ]
}

Linux用户编辑/etc/docker/daemon.json:

{
  "registry-mirrors": ["https://docker.m.daocloud.io"],
  "live-restore": true,
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

配置完后重启Docker:

sudo systemctl daemon-reload
sudo systemctl restart docker

注意:配置镜像加速后,如果拉取私有仓库的镜像,可能会被镜像加速器缓存。如果你有私有仓库,建议在配置中排除掉它们。

Docker Desktop vs 命令行:我什么时候用谁

看了上面的对比,你可能更纠结了。我列个实际场景,你看哪个更适合你。

  • 只想快速体验Docker:用Docker Desktop,装完就跑
  • 正在写Dockerfile做调试:用命令行,因为频繁构建、删除操作,Desktop的GUI太慢
  • 本地开发环境管理:用Docker Desktop的Dashboard,一目了然
  • CI/CD脚本里:只能用命令行
  • 生产环境:纯命令行,不能装Desktop
  • 团队协作教学:Desktop更友好,可以展示容器状态

你想想看,一个技术你如果在生产环境里根本见不到桌面,那学它就不要依赖GUI。我个人建议:先用Docker Desktop入门,然后尽快切换到命令行。你早晚得面对终端。

我的建议:如果你问我,我会直接推荐Linux + 命令行。没有虚拟机开销,没有Hyper-V冲突,磁盘管理也简单。但如果你是Windows或者Mac用户,也别慌。Docker Desktop已经足够成熟了。只要别让它吃光你硬盘就行。

本章小结

至此,Docker环境搭建完成。你已经在Windows、Mac或者Linux上装好了Docker引擎,也知道Docker Desktop和纯命令行的优缺点。配置了镜像加速,也做了基本的验证。

Docker 环境搭建后核心模块 Docker CLI 后端引擎 Docker Daemon + containerd + runc 存储驱动 overlay2 / aufs / devicemapper 网络桥接 bridge / host / overlay / macvlan 镜像管理 分层存储 / 缓存机制 / 仓库交互 卷管理 bind mounts / named volumes 资源限制 CPU / 内存 / 磁盘I/O 限制 配置管理 daemon.json / 镜像加速 / 日志 常见命令验证 docker info / docker version / docker run hello-world

接下来,我会在之后的章节里带你一个个拆解这些模块。比如怎么拉镜像、怎么启动容器、怎么配网络。这些内容才是真正生产中用得上的东西。