随机
Enter 搜索 ↑↓ 切换 Esc 清空

wsl_docker

命令

WSL2 中安装配置 Docker 环境

wsl_docker

WSL2 中安装配置 Docker 环境

补充说明

该教程提供在 WSL2 Linux 子系统中安装 Docker 引擎的完整方案,替代 Docker Desktop 在 Windows 上的使用。直接在 WSL2 中运行 Docker Engine 比 Docker Desktop 资源占用更低,且与 Linux 原生 Docker 环境完全一致,适合开发、测试和生产部署场景。

功能特点

主要章节

章节 内容
前置准备 启用 systemd、更新系统
安装 Docker 使用官方脚本安装 Docker Engine
启动 Docker systemd / 手动启动两种方式
免 sudo 执行 将用户添加到 docker 组
安装 Compose Docker Compose 插件安装
配置加速 镜像加速器配置
资源限制 限制 Docker 使用的内存和 CPU

注意事项

前置准备

启用 systemd

Docker 服务依赖 systemd 管理,参考 wsl_systemd 启用:

sudo nano /etc/wsl.conf

添加:

[boot]
systemd=true

重启 WSL:

wsl --shutdown
wsl

更新系统

# Ubuntu / Debian
sudo apt update && sudo apt upgrade -y

# Kali
sudo apt update && sudo apt full-upgrade -y

# Alpine
apk update && apk upgrade

安装依赖

# Ubuntu / Debian
sudo apt install -y ca-certificates curl gnupg lsb-release

# Alpine
apk add ca-certificates curl gnupg

安装 Docker Engine

使用官方安装脚本(推荐)

# 下载并运行 Docker 安装脚本
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

Ubuntu / Debian 手动安装

# 添加 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

# 添加 Docker 仓库
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

# 安装 Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Alpine 安装

# Alpine 使用 apk 安装 Docker
apk add docker docker-cli-compose openrc

# 安装 Docker 服务脚本
rc-update add docker boot

启动 Docker

方法一:systemd 启动(推荐)

如果已启用 systemd:

# 启动 Docker
sudo systemctl start docker

# 设置开机自启
sudo systemctl enable docker

# 查看状态
sudo systemctl status docker

方法二:手动启动 dockerd

如果未启用 systemd:

# 后台启动(保持运行)
sudo dockerd &

# 或使用 nohup
nohup sudo dockerd > /dev/null 2>&1 &

# 验证
docker info

方法三:Windows 开机自启 WSL + Docker

在 Windows 中创建计划任务或脚本:

# 创建启动脚本 start_wsl_docker.ps1
wsl -d ubuntu -u root bash -c "service docker start"

免 sudo 执行 Docker

# 创建 docker 组(如不存在)
sudo groupadd docker

# 将当前用户添加到 docker 组
sudo usermod -aG docker $USER

# 使权限生效
newgrp docker

# 验证(无需 sudo)
docker run hello-world

安装 Docker Compose

Docker Compose 已作为 Docker 插件随 Docker CE 安装:

# 验证
docker compose version

# 使用示例
docker compose up -d

如需独立的 docker-compose 二进制:

# 下载最新版
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 赋予执行权限
sudo chmod +x /usr/local/bin/docker-compose

# 验证
docker-compose --version

配置镜像加速器

配置 Docker 镜像加速

# 创建配置文件
sudo mkdir -p /etc/docker
sudo nano /etc/docker/daemon.json

添加以下内容(以阿里云为例):

{
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://mirror.ccs.tencentyun.com",
    "https://registry.cn-hangzhou.aliyuncs.com"
  ]
}

重启 Docker:

sudo systemctl restart docker

# 验证加速器生效
docker info | grep -A 3 "Registry Mirrors"

资源限制

限制 Docker 内存和 CPU

通过 .wslconfig 限制 WSL2 整体资源,间接限制 Docker:

在 PowerShell 中编辑:

notepad "$env:USERPROFILE\.wslconfig"
[wsl2]
memory=4GB
processors=2
localhostForwarding=true

重启 WSL:

wsl --shutdown
wsl

限制单个容器资源

# 限制内存和 CPU
docker run -d --name myapp \
  --memory="512m" \
  --cpus="0.5" \
  nginx

# 更新已运行容器的限制
docker update --memory="1g" --cpus="1" myapp

Docker 常用命令

命令 说明
docker ps 列出运行中的容器
docker ps -a 列出所有容器
docker images 列出本地镜像
docker pull <image> 拉取镜像
docker run -d <image> 后台运行容器
docker stop <container> 停止容器
docker rm <container> 删除容器
docker rmi <image> 删除镜像
docker logs -f <container> 查看容器日志
docker exec -it <container> bash 进入容器

Compose 项目部署

将 Compose 文件放在 WSL2 中的目录:

# 创建项目目录
mkdir ~/docker-projects && cd ~/docker-projects

# 创建 docker-compose.yml
cat > docker-compose.yml << 'EOF'
services:
  nginx:
    image: nginx:alpine
    ports:
      - "8080:80"
EOF

# 启动
docker compose up -d

# 访问 http://localhost:8080

常见问题

Docker 无法启动

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

# 查看日志
sudo journalctl -u docker --no-pager -n 50

# 手动启动 dockerd 查看错误
sudo dockerd

权限不足

# 如果遇到 permission denied
sudo usermod -aG docker $USER
# 然后退出重新登录 WSL

WSL 重启后 Docker 未启动

# 每次登录自动启动 Docker
echo 'sudo service docker start' >> ~/.bashrc

# 或使用 systemd(推荐)
sudo systemctl enable docker

端口冲突

如果 Windows 上的端口已被占用,修改 docker-compose 中的映射端口:

ports:
  - "8081:80"  # 将宿主机 8081 映射到容器 80

磁盘空间清理

# 清理未使用的容器、镜像、网络
docker system prune -af

# 查看磁盘占用
docker system df

验证安装

# Docker 版本
docker --version
docker compose version

# 运行测试容器
docker run --rm hello-world

# 运行 Nginx 测试
docker run -d -p 8080:80 --name test-nginx nginx:alpine
curl localhost:8080
docker stop test-nginx && docker rm test-nginx

# Docker 信息
docker info

参考链接

相关命令