GitHub热门项目Docker:在Windows WSL2环境下的安装与使用

云信安装大师
90
AI 质量分
11 5 月, 2025
3 分钟阅读
0 阅读

GitHub热门项目Docker:在Windows WSL2环境下的安装与使用

引言

Docker作为GitHub上最受欢迎的开源项目之一,已经成为现代开发不可或缺的工具。本文将详细介绍如何在Windows WSL2环境中安装和使用Docker,让Windows用户也能享受到Linux原生环境下的Docker体验。

准备工作

在开始之前,请确保满足以下条件:

  1. Windows 10版本2004或更高(建议使用最新版)
  2. 已启用WSL2功能
  3. 已安装一个WSL2发行版(如Ubuntu)

检查WSL版本

代码片段
wsl --list --verbose

确保你的发行版使用的是WSL2(VERSION列显示为2)

第一步:安装Docker Desktop

  1. 访问Docker官网
  2. 下载Windows版本的Docker Desktop安装包
  3. 运行安装程序,按照向导完成安装

重要选项
– 勾选”Install required Windows components for WSL 2″
– 安装完成后不要立即启动

第二步:配置Docker使用WSL2后端

  1. 右键桌面右下角的Docker图标,选择”Settings”
  2. 进入”General”选项卡,确保勾选:
    • Use the WSL 2 based engine
  3. 进入”Resources” > “WSL Integration”
    • Enable integration with my default WSL distro
    • 选择你常用的WSL发行版(如Ubuntu)

第三步:验证安装

打开WSL终端(Ubuntu),运行以下命令验证:

代码片段
docker --version
docker-compose --version
docker run hello-world

如果看到类似以下输出,说明安装成功:

代码片段
Hello from Docker!
This message shows that your installation appears to be working correctly.

Docker基础使用示例

示例1:运行Nginx容器

代码片段
# 拉取Nginx镜像
docker pull nginx

# 运行Nginx容器(-d表示后台运行,-p指定端口映射)
docker run -d -p 8080:80 --name my-nginx nginx

# 查看运行中的容器
docker ps

# Windows浏览器访问 http://localhost:8080

示例2:构建自定义镜像

  1. 创建一个简单的Node.js应用目录:
代码片段
mkdir my-node-app && cd my-node-app
  1. 创建app.js文件:
代码片段
const http = require('http');
const server = http.createServer((req, res) => {
    res.end('Hello Docker from Node.js!');
});
server.listen(3000);
  1. 创建Dockerfile
代码片段
FROM node:14-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]
  1. 构建并运行镜像:
代码片段
docker build -t my-node-app .
docker run -d -p 3000:3000 --name node-app my-node-app

# Windows浏览器访问 http://localhost:3000

WSL2特有注意事项

  1. 文件系统性能

    • WSL2对Linux文件系统性能更好,但对Windows文件系统性能较差
    • 最佳实践:将项目放在WSL文件系统中(如/home/username/projects)而非挂载的Windows目录中
  2. 内存管理

    代码片段
    # WLS配置文件中可以设置内存限制(通常位于%USERPROFILE%\.wslconfig)
    [wsl2]
    memory=4GB #限制最大内存为4GB 
    
  3. 端口转发

    • WSL2有自己的IP地址,不像WSL1那样直接共享Windows网络栈
    • localhost会自动转发到WSL2中的服务,无需特殊配置

Docker常用命令速查表

Command Description
docker ps List running containers
docker ps -a List all containers (including stopped)
docker images List all images
docker pull <image> Download an image
docker run <options> <image> Run a container
docker stop <container> Stop a running container
docker rm <container> Remove a container
docker rmi <image> Remove an image
docker exec -it <container> bash Enter a running container

Troubleshooting常见问题解决

  1. Docker命令报错”Permission denied”

    代码片段
    # WLS中执行以下命令将用户加入docker组并重启会话:
    sudo usermod -aG docker $USER && newgrp docker 
    
  2. 无法从Windows访问容器服务

    • 检查防火墙设置是否阻止了端口访问
    • WLS中检查服务是否正常监听:netstat -tuln
  3. 磁盘空间不足
    清理无用镜像和容器:

    代码片段
    docker system prune 
    

Docker与WLS深度集成技巧

  1. 在VSCode中使用
    安装”Remote-WSL”和”Docker”扩展后,可以直接在VSCode中管理WLS中的Docker环境。

  2. 开发工作流优化
    使用bind mount实现代码热重载:

    代码片段
    docker run -v $(pwd):/app -p ... 
    
  3. 多平台构建支持
    在Windows上构建ARM架构的镜像:

    代码片段
    docker buildx build --platform linux/arm64 ... 
    

Docker Compose实战示例

创建docker-compose.yml文件:

代码片段
version: '3'
services:
 web:
    image: nginx:alpine 
    ports:
      - "8080:80"
 db:
    image: postgres:13-alpine 
    environment:
      POSTGRES_PASSWORD: example 

启动服务栈:

代码片段
docker-compose up -d 

停止并清理:

代码片段
docker-compose down 

Windows与WLS之间的路径转换技巧

当需要在Windows和WLS之间传递路径时:

  • Windows路径转Linux路径(在WLS中使用)
代码片段
/mnt/c/Users/username/path/to/file → C:\Users\username\path\to\file`
  • Linux路径转Windows路径(在PowerShell中使用)
代码片段
wsl wslpath "C:\Users\username\path\to\file"

GPU加速支持(可选)

如果你需要使用GPU加速的容器:

  1. Windows端需要安装CUDA驱动
  2. WLS端需要启用CUDA支持

配置方法参考NVIDIA官方文档

Docker数据持久化策略推荐

  1. 命名卷(Named Volumes)
    适合数据库等需要持久化的数据
代码片段
docker volume create my-data && docker run -v my-data:/var/lib/mysql ...
  1. Bind Mounts
    适合开发环境代码同步
代码片段
docker run -v /host/path:/container/path ...
  1. tmpfs Mounts
    适合临时数据提高性能
代码片段
docker run --tmpfs /app/tmp ...

Docker网络模式解析

了解不同网络模式有助于调试连接问题:

  • bridge (默认):每个容器获得独立IP,通过桥接网络通信
  • host:容器直接使用主机网络栈
  • none:没有网络连接

查看网络详情:

代码片段
docker network inspect bridge 

CI/CD集成建议

可以在GitHub Actions中轻松集成Docker构建:

代码片段
jobs:
 build:
 runs-on: ubuntu-latest steps:
      -
 name: Checkout code uses: actions/checkout@v3 -
 name: Build Docker image run: docker build . -
 name: Push to registry run: docker push username/image-name 

# Windows runner同样支持但推荐使用Linux runner以获得最佳兼容性 

}

“`
}

}
}
}
}
}

原创 高质量