Windows系统安装Docker容器搭建Linux环境

一、环境准备

1. 确认 Windows 功能已开启

打开 "控制面板 → 程序 → 启用或关闭 Windows 功能"

勾选 "适用于 Linux 的 Windows 子系统" 和 "虚拟机平台"

点"确定"后重启电脑。

开机后,管理员模式打开 Terminal, 启用 WSL 和支撑 WSL2 所需的虚拟机平台组件。

bash 复制代码
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

再次重启电脑。

2. 更新和升级 WSL2 内核

  • 下载安装包:从微软官方网站下载 WSL2 Linux 内核更新包
  • 安装完成后,在 Terminal(管理员)中运行:
bash 复制代码
wsl --update
wsl --set-default-version 2

如果你还没安装任何 Linux 发行版,可以直接运行:

bash 复制代码
wsl --install

3. 检查 WSL 发行版状态

在 Terminal(管理员)里输入:

bash 复制代码
wsl --list --verbose

可以看到已经安装的 Linux 发行版:

复制代码
NAME                   STATE           VERSION
Ubuntu                 Stopped         2
docker-desktop         Stopped         2
docker-desktop-data    Stopped         2

如果你还没安装任何 Linux 发行版,可以直接运行:

bash 复制代码
wsl --install

这会自动安装 Ubuntu 并设置 WSL2 为默认。

二、安装 Docker Desktop

1. 官网下载安装 Docker Desktop

  • Docker 官网 下载并安装最新版。
  • 安装过程中勾选 "Use WSL 2 based engine",并完成向导重启。

2. Docker Engine 配置镜像源

打开 Docker Desktop,进入设置页面 (齿轮图标) ,编辑 Docker Engine 为下面内容:

json 复制代码
{
  "builder": {
    "gc": {
      "defaultKeepStorage": "20GB",
      "enabled": true
    }
  },
  "dns": [
    "8.8.8.8",
    "8.8.4.4"
  ],
  "experimental": false,
  "features": {
    "buildkit": true
  },
  "insecure-registries": [
    "https://hub.atguigu.com"
  ],
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://registry.docker-cn.com",
    "http://hub-mirror.c.163.com",
    "https://cr.console.aliyun.com/",
    "https://mirror.ccs.tencentyun.com"
  ]
}

3. Docker Desktop 与 WSL 集成

打开设置的 Resources 页面。

打开 WSL integration 页面,勾选 Enable integration with my default WSL distro 选项。

然后检查 Advanced 页面内是否提示:You are using the WSL 2 backend。显示这个说明我们已经集成上了 WSL。

这里要求已安装至少一个 Linux 发行版(如 Ubuntu),如果没有安装,需要参考 环境准备 完成安装。

三、创建开发镜像

1. 编写 Dockerfile 脚本

通过编写 Dockerfile,可以在镜像里预装编译器、依赖包、工具链等,一次构建、随处可复用。

我们需要创建一个目录作为Docker的运行目录(如 D:\Tools\Docker\my-dev),然后在运行目录下面创建一个 Dockerfile 文件,粘贴以下内容:

bash 复制代码
# 1. 基础镜像
FROM ubuntu:22.04

# 关闭交互提示
ENV DEBIAN_FRONTEND=noninteractive

# 3. 替换为国内 HTTP 源,避免 ca-certificates 未安装时的证书校验错误
RUN sed -i 's|http://.*.ubuntu.com|http://mirrors.aliyun.com|g' /etc/apt/sources.list \
 && sed -i 's|http://security.ubuntu.com|http://mirrors.aliyun.com|g' /etc/apt/sources.list

# 4. 更新索引并安装必备包(含 ca-certificates),遇到下载错误时重试 3 次并跳过缺失包
RUN apt-get update \
 && apt-get install -y --no-install-recommends \
      ca-certificates \
      build-essential \
      git \
      curl \
      vim \
      python3 \
      python3-pip \
      nodejs \
      npm \
      --fix-missing \
      -o Acquire::Retries=3 \
 && rm -rf /var/lib/apt/lists/*

# 可选:更换回官方 HTTPS 源(此时已有 ca-certificates,可校验证书)
# RUN sed -i 's|http://mirrors.aliyun.com|https://archive.ubuntu.com|g' /etc/apt/sources.list

# 4. 创建一个非 root 用户,避免容器内文件权限问题
ARG USERNAME=dev
ARG UID=1000
RUN useradd -m -u ${UID} -s /bin/bash ${USERNAME} \
    && apt-get update \
    && apt-get install -y sudo \
    && echo "${USERNAME} ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers \
    && rm -rf /var/lib/apt/lists/*

# 5. 切换到普通用户
USER ${USERNAME}

# 6. 工作目录
WORKDIR /workspace

# 7. 默认启动 shell
CMD ["bash"]

2. 构建镜像

打开 Terminal 切到该目录:

bash 复制代码
mkdir D:\Tools\Docker\my-dev
cd D:\Tools\Docker\my-dev

这里我为了防止一次性构建时拉取 ubuntu:22.04 时间过长,所以先手动拉下来。

bash 复制代码
docker pull ubuntu:22.04

然后构建镜像(给它起个易记的名字,比如 ubuntu-demo):

bash 复制代码
docker build -t ubuntu-demo .

其中,-t ubuntu-demo 是给镜像命名,. 表示在当前目录作为构建上下文,Dockerfile 也在这里。

3. 运行开发容器

把本地项目(或任意代码目录)挂载到容器中,保持代码与容器内同步。

bash 复制代码
docker run -it --rm --name ubuntu-dev -v D:\Tools\Docker\my-dev:/workspace -w /workspace ubuntu-demo
  • --rm:退出后自动删除容器
  • -v 本地目录:容器目录:映射代码
  • -w /workspace:进入容器后的工作路径

此时,你将进入容器的 bash,且 /workspace 下即是 Windows 里的 my-dev

4. 容器内验证

进入容器后可执行:

bash 复制代码
# 验证基础工具
git --version
gcc --version
python3 --version
npm --version

# 测试 sudo
sudo echo "sudo OK"

确保一切都正常。

相关推荐
二月夜2 小时前
Linux大量CLOSE_WAIT句柄与Tomcat线程阻塞的关联解析
linux·运维·tomcat
大聪明-PLUS2 小时前
Linux 下的 C 语言编程:创建你自己的命令 shell
linux·嵌入式·arm·smarc
yuuki2332332 小时前
【C++】揭秘STL:stack与queue的底层实现
java·c++·windows
qq_317620312 小时前
03:Docker数据管理与网络
docker·数据持久化·端口映射·网络模式·volume数据卷
oMcLin2 小时前
Debian 10 使用 LVM 配置后无法挂载卷:修复 LVM 配置错误的方法
运维·debian
oMcLin2 小时前
CentOS 7 系统启动失败解决方案:排查与修复 GRUB 引导问题
linux·运维·centos
Irene19912 小时前
使用 Docker 的 Node.js(附:三种 Node.js 环境详细对比)
docker·容器·node.js
CAU界编程小白2 小时前
Linux系统编程系列之模拟shell
linux
weixin_425023002 小时前
Java开发高频实用技巧汇总(List操作/多线程/反射/监控等)
java·windows·list