Skip to content

安装与环境 ​

目标:在三端(macOS / Windows / Linux)装上纯命令行 Docker,并跑通 hello-world。 不安装 Docker Desktop。

macOS(Colima) ​

Colima 是一个用 Lima 虚拟机跑容器运行时的轻量方案,是 macOS 上 Docker Desktop 的主流替代品。

前置 ​

  • 已安装 Homebrew。
  • Apple Silicon(M 系列)与 Intel 均支持。

安装 ​

bash
brew install colima docker docker-compose
  • colima:提供容器运行时(虚拟机)。
  • docker:Docker CLI 客户端(命令行)。
  • docker-compose:Compose v2 插件(命令为 docker compose)。

启动 Colima ​

bash
# 默认配置启动(2 CPU / 2GB 内存 / 60GB 磁盘)
colima start

# 自定义配置(推荐按机器规格调整)
colima start --cpu 4 --memory 8 --disk 100

# 完整示例:指定架构、磁盘与运行时
colima start --cpu 4 --memory 8 --disk 100 --arch aarch64

常用参数:

参数说明默认
--cpuCPU 核数2
--memory内存(GB)2
--disk磁盘大小(GB)60
--arch架构(aarch64 / x86_64)自动
--runtime容器运行时(docker / containerd)docker
--kubernetes附带启动 Kubernetes关闭

验证与日常命令 ​

bash
docker version          # Client 与 Server 都应显示
docker run --rm hello-world

# Colima 生命周期管理
colima status           # 查看状态
colima stop             # 停止虚拟机(释放资源)
colima start            # 再次启动
colima restart          # 重启
colima delete           # 删除虚拟机(连同数据)
colima ssh              # 进入虚拟机(排查底层问题)

Docker CLI 会自动切换到 colima 上下文;
若连接异常,手动执行 docker context use colima。

Windows(WSL2) ​

在 WSL2 的 Ubuntu 发行版内安装原生 Docker Engine,无需 Docker Desktop。

安装 WSL2 + Ubuntu ​

在 PowerShell(管理员) 中:

powershell
# 安装 WSL2(自动启用虚拟机平台等组件)
wsl --install

# 或显式指定发行版
wsl --install -d Ubuntu

# 重启后,验证
wsl -l -v
# 应显示 NAME: Ubuntu  VERSION: 2

若已装 WSL 但版本是 1,升级到 2:

powershell
wsl --set-version Ubuntu 2
wsl --set-default-version 2

在 Ubuntu 内安装 Docker Engine ​

进入 Ubuntu(PowerShell 中执行 wsl 或使用 Windows Terminal),然后:

bash
# 1. 安装依赖
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg

# 2. 添加 Docker 官方 GPG 密钥与源
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
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo $VERSION_CODENAME) stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 3. 安装 Docker Engine 与 Compose 插件
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io \
  docker-buildx-plugin docker-compose-plugin

# 4. 将当前用户加入 docker 组(免 sudo)
sudo usermod -aG docker $USER
# 退出重进 WSL 后生效(或 newgrp docker)

启动 dockerd(关键步骤) ​

WSL2 不会自动启动 Docker 守护进程,需要手动启动:

bash
# 方式一:前台启动(调试用)
sudo dockerd

# 方式二:后台启动
sudo service docker start          # 若支持 service
sudo dockerd > /tmp/dockerd.log 2>&1 &   # 通用后台方式

推荐:启用 systemd 实现开机自启,编辑 /etc/wsl.conf:

ini
[boot]
systemd=true

保存后回到 PowerShell 执行 wsl --shutdown 再重进 Ubuntu,然后:

bash
sudo systemctl enable --now docker
sudo systemctl status docker

验证 ​

bash
docker version
docker run --rm hello-world

从 Windows 访问容器端口(重点) ​

WSL2 里跑的 Docker,端口是发布在 WSL2 这个"虚拟机"内部的,不是发布在 Windows 本机上。
Windows 和 WSL2 各自有独立的网络栈,所以浏览器里直接打开 http://localhost:8080 经常打不开—— 必须用 WSL2 的 IP 地址访问。

一句话记住:容器端口发布在 WSL 里,就要用 WSL 的地址去访问。

1. 先拿到 WSL2 的 IP ​

在 Ubuntu(WSL)内:

bash
hostname -I | awk '{print $1}'      # 例如 172.24.135.42

在 Windows PowerShell 内(不必进入 WSL):

powershell
wsl hostname -I                     # 例如 172.24.135.42

2. 用 WSL 的 IP 访问 ​

bash
# ① 在 WSL 内启动一个映射 8080 的容器
docker run -d --name web -p 8080:80 nginx

# ② WSL 内自检(先确认 WSL 这一层是通的)
curl -I http://127.0.0.1:8080
curl -I http://$(hostname -I | awk '{print $1}'):8080

然后在 Windows 上访问(<WSL-IP> 换成上一步查到的地址):

text
http://172.24.135.42:8080
powershell
# PowerShell 中验证(Windows 10 1803+ 自带 curl.exe)
curl.exe http://172.24.135.42:8080

排错顺序:WSL 内 127.0.0.1 → WSL 内 WSL-IP → Windows 用 WSL-IP。
哪一步断了,问题就在那一层,不用瞎猜。

3. 三个最容易踩的坑 ​

坑 ①:端口映射写成了 127.0.0.1

bash
# ✗ 只绑定在 WSL 的 loopback 上,Windows 无论如何都访问不到
docker run -d -p 127.0.0.1:8080:80 nginx

# ✓ 绑定所有网卡,Windows 才能通过 WSL IP 进来
docker run -d -p 8080:80 nginx

坑 ②:WSL 的 IP 每次重启都会变

wsl --shutdown 或重启电脑后,WSL2 会被重新分配 IP,收藏的旧地址立即失效。
每次重开都用 wsl hostname -I 重新查一遍;想省事就改用下面的镜像网络模式。

坑 ③:局域网 / 手机等其他设备访问不了

NAT 模式下 WSL 的 IP 只在 Windows 主机内部可达,同一局域网的其他设备访问不到。
需要在 Windows 上做端口转发并放行防火墙(管理员 PowerShell):

powershell
# 查询 WSL 当前 IP
$wslIp = (wsl hostname -I).Trim().Split()[0]

# 把 Windows 的 8080 转发到 WSL 的 8080
netsh interface portproxy add v4tov4 listenport=8080 listenaddress=0.0.0.0 `
  connectport=8080 connectaddress=$wslIp

# 放行防火墙入站
New-NetFirewallRule -DisplayName "WSL Docker 8080" -Direction Inbound `
  -Protocol TCP -LocalPort 8080 -Action Allow

# 查看 / 删除已有规则
netsh interface portproxy show all
netsh interface portproxy delete v4tov4 listenport=8080 listenaddress=0.0.0.0

之后局域网设备访问 http://<Windows-IP>:8080(用 ipconfig 查看 Windows 的局域网 IP)。
注意:WSL 重启后 IP 变了,portproxy 规则要重新执行一遍。

4. 可选:改成镜像网络模式,直接支持 localhost ​

Windows 11 22H2 及以上支持 WSL 的镜像网络模式(mirrored),Windows 与 WSL 共用网络栈,
localhost 双向互通,就不必再记 WSL 的 IP。编辑 C:\Users\<你>\.wslconfig:

ini
[wsl2]
networkingMode=mirrored

保存后回到 PowerShell 执行 wsl --shutdown,重进 Ubuntu 生效。之后可直接访问:

text
http://localhost:8080

Windows 10 或较旧的 Windows 11 不支持该模式,仍按上面的 WSL IP 方式访问。
镜像模式下 Windows 与 WSL 共用端口空间,若 Windows 上已有程序占用该端口会冲突,需先释放。
参考:WSL 网络文档。

资源限制(可选) ​

在 Windows 用户目录 C:\Users\<你>\.wslconfig 中限制 WSL2 资源:

ini
[wsl2]
memory=8GB
processors=4
swap=4GB

修改后 wsl --shutdown 重启生效。

Windows 侧提醒:把项目放在 WSL 内(~/ 下)性能最好,跨文件系统(/mnt/c)挂载会明显变慢。

Linux(原生) ​

以 Ubuntu/Debian 为例,与上文 WSL2 内的安装步骤完全一致(因为 WSL2 里就是 Ubuntu)。

一键脚本(适合快速体验) ​

bash
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER

或按官方 apt 源安装 ​

bash
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
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo $VERSION_CODENAME) 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 usermod -aG docker $USER

启动与自启 ​

bash
sudo systemctl enable --now docker
sudo systemctl status docker

其他发行版(RHEL/CentOS 用 dnf、Arch 用 pacman 等)请参考 官方文档。

配置镜像加速(中国大陆可选) ​

拉取 Docker Hub 镜像慢时,配置国内镜像源(以 Linux/WSL2 为例,macOS Colima 略有不同):

bash
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<'EOF'
{
  "registry-mirrors": ["https://mirror.example.com"]
}
EOF
sudo systemctl restart docker   # macOS: colima restart

镜像加速地址可能变动或失效,请自行搜索当前可用的公共镜像源;生产环境建议使用私有仓库或代理。

卸载 ​

bash
# Linux / WSL2 内
sudo apt-get purge -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo rm -rf /var/lib/docker /etc/docker

# macOS
colima delete
brew uninstall colima docker docker-compose

安装后自检清单 ​

bash
docker version            # ① 客户端与服务端都在
docker info               # ② 服务端详情(存储驱动、运行时等)
docker run --rm hello-world   # ③ 能拉取并运行镜像
docker context ls         # ④ 当前上下文正确(colima 或 default)