安装与环境
目标:在三端(macOS / Windows / Linux)装上纯命令行 Docker,并跑通
hello-world。 不安装 Docker Desktop。
macOS(Colima)
Colima 是一个用 Lima 虚拟机跑容器运行时的轻量方案,是 macOS 上 Docker Desktop 的主流替代品。
前置
- 已安装 Homebrew。
- Apple Silicon(M 系列)与 Intel 均支持。
安装
brew install colima docker docker-composecolima:提供容器运行时(虚拟机)。docker:Docker CLI 客户端(命令行)。docker-compose:Compose v2 插件(命令为docker compose)。
启动 Colima
# 默认配置启动(2 CPU / 2GB 内存 / 60GB 磁盘)
colima start
# 自定义配置(推荐按机器规格调整)
colima start --cpu 4 --memory 8 --disk 100
# 完整示例:指定架构、磁盘与运行时
colima start --cpu 4 --memory 8 --disk 100 --arch aarch64常用参数:
| 参数 | 说明 | 默认 |
|---|---|---|
--cpu | CPU 核数 | 2 |
--memory | 内存(GB) | 2 |
--disk | 磁盘大小(GB) | 60 |
--arch | 架构(aarch64 / x86_64) | 自动 |
--runtime | 容器运行时(docker / containerd) | docker |
--kubernetes | 附带启动 Kubernetes | 关闭 |
验证与日常命令
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(管理员) 中:
# 安装 WSL2(自动启用虚拟机平台等组件)
wsl --install
# 或显式指定发行版
wsl --install -d Ubuntu
# 重启后,验证
wsl -l -v
# 应显示 NAME: Ubuntu VERSION: 2若已装 WSL 但版本是 1,升级到 2:
wsl --set-version Ubuntu 2
wsl --set-default-version 2在 Ubuntu 内安装 Docker Engine
进入 Ubuntu(PowerShell 中执行 wsl 或使用 Windows Terminal),然后:
# 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 守护进程,需要手动启动:
# 方式一:前台启动(调试用)
sudo dockerd
# 方式二:后台启动
sudo service docker start # 若支持 service
sudo dockerd > /tmp/dockerd.log 2>&1 & # 通用后台方式推荐:启用 systemd 实现开机自启,编辑 /etc/wsl.conf:
[boot]
systemd=true保存后回到 PowerShell 执行 wsl --shutdown 再重进 Ubuntu,然后:
sudo systemctl enable --now docker
sudo systemctl status docker验证
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)内:
hostname -I | awk '{print $1}' # 例如 172.24.135.42在 Windows PowerShell 内(不必进入 WSL):
wsl hostname -I # 例如 172.24.135.422. 用 WSL 的 IP 访问
# ① 在 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> 换成上一步查到的地址):
http://172.24.135.42:8080# 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
# ✗ 只绑定在 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):
# 查询 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:
[wsl2]
networkingMode=mirrored保存后回到 PowerShell 执行 wsl --shutdown,重进 Ubuntu 生效。之后可直接访问:
http://localhost:8080Windows 10 或较旧的 Windows 11 不支持该模式,仍按上面的 WSL IP 方式访问。
镜像模式下 Windows 与 WSL 共用端口空间,若 Windows 上已有程序占用该端口会冲突,需先释放。
参考:WSL 网络文档。
资源限制(可选)
在 Windows 用户目录 C:\Users\<你>\.wslconfig 中限制 WSL2 资源:
[wsl2]
memory=8GB
processors=4
swap=4GB修改后 wsl --shutdown 重启生效。
Windows 侧提醒:把项目放在 WSL 内(
~/下)性能最好,跨文件系统(/mnt/c)挂载会明显变慢。
Linux(原生)
以 Ubuntu/Debian 为例,与上文 WSL2 内的安装步骤完全一致(因为 WSL2 里就是 Ubuntu)。
一键脚本(适合快速体验)
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER或按官方 apt 源安装
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启动与自启
sudo systemctl enable --now docker
sudo systemctl status docker其他发行版(RHEL/CentOS 用 dnf、Arch 用 pacman 等)请参考 官方文档。
配置镜像加速(中国大陆可选)
拉取 Docker Hub 镜像慢时,配置国内镜像源(以 Linux/WSL2 为例,macOS Colima 略有不同):
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镜像加速地址可能变动或失效,请自行搜索当前可用的公共镜像源;生产环境建议使用私有仓库或代理。
卸载
# 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安装后自检清单
docker version # ① 客户端与服务端都在
docker info # ② 服务端详情(存储驱动、运行时等)
docker run --rm hello-world # ③ 能拉取并运行镜像
docker context ls # ④ 当前上下文正确(colima 或 default)