windows电脑WSL下本地构建docker镜像

没问题!在 WSL 里从零构建 Docker 镜像,是学习容器化最好的方式。我们不走捷径(不直接用 docker pull),而是亲手写配置文件、打包应用、构建并运行

跟着下面 5 步走,你就能拥有自己构建的第一个镜像。


第 1 步:确认 WSL 环境就绪

先确保 Docker 能在 WSL 里运行(不需要在 Windows 装 Docker Desktop,WSL 内可直接安装引擎)。

bash 复制代码
# 检查 Docker 是否安装
docker --version

# 如果没安装,一键安装(适用于 Ubuntu/Debian)
sudo apt update && sudo apt install docker.io -y

# 关键:给当前用户权限,免 sudo 运行(需要重启终端生效)
sudo usermod -aG docker $USER

安装后如果提示服务未启动,执行 sudo service docker start 即可。


WSL2 从零本地构建 Docker 镜像完整教程

前提条件:

  1. Windows 已安装 WSL2(不是WSL1)
  2. WSL 内部已经装好 Docker(Docker Desktop Windows 或者 WSL内原生docker)
  3. WSL终端可以正常执行 docker infodocker --version,没有报错
    小提示:如果你用的是 Windows Docker Desktop,记得开启 Settings → Resources → WSL Integration,打开你所用发行版的开关,WSL里面就可以直接用windows的docker引擎。

第一步:确认docker环境正常

打开你的WSL终端(Ubuntu等)

bash 复制代码
# 查看版本
docker --version
# 查看服务状态,确认没有报错
docker info

如果这里报错,先解决docker启动问题,再往下。

第二步:创建项目文件夹(全部操作在WSL内部,不要在Windows资源管理器操作)

⚠️重要:代码、Dockerfile建议放在WSL文件系统内(~/下面),不要挂载到 /mnt/c Windows磁盘,否则构建速度极慢。

bash 复制代码
# 创建工作目录并进入
mkdir ~/docker-demo
cd ~/docker-demo

我们做一个极简示例:一个简单的 Python web 小应用,用来练习构建镜像。

1. 写简单应用代码 app.py

bash 复制代码
cat > app.py << 'EOF'
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello Docker! Build image locally from WSL\n"

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)
EOF

2. 依赖文件 requirements.txt

bash 复制代码
cat > requirements.txt << 'EOF'
flask==2.3.3
EOF

3. 核心文件:Dockerfile(没有后缀!文件名就叫 Dockerfile)

Dockerfile 是镜像构建脚本,docker 靠这个文件一步步生成镜像。

bash 复制代码
cat > Dockerfile << 'EOF'
FROM python:3.11-slim

WORKDIR /app

COPY requirements.txt .

# pip指定清华pypi源
RUN pip install --no-cache-dir -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt

COPY app.py .

EXPOSE 5000

CMD ["python", "app.py"]
EOF

现在目录里面应该有3个文件:

复制代码
~/docker-demo/
├── app.py
├── requirements.txt
└── Dockerfile

可以用 ls 确认文件都存在。

第三步:本地构建 docker 镜像

更换可用的镜像源

bash 复制代码
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<'EOF'
{
  "registry-mirrors": [
    "https://docker.nju.edu.cn",
    "https://docker.m.daocloud.io",
    "https://mirror.baidubce.com"
  ]
}
EOF

sudo systemctl daemon-reload
sudo systemctl restart docker

然后:

语法:docker build -t <镜像名:标签> .

末尾那个 . 代表构建上下文是当前文件夹,千万不能丢。

bash 复制代码
docker build -t my-flask-demo:v1 .

执行后你会看到 docker 按顺序执行 Dockerfile 每一行步骤:

复制代码
Step 1/6 : FROM python:3.11-slim
Step 2/6 : WORKDIR /app
Step 3/6 : COPY requirements.txt .
Step 4/6 : RUN pip install ...
Step 5/6 : COPY app.py .
Step 6/6 : EXPOSE 5000
Step 7/7 : CMD ["python","app.py"]

每一个Step都会生成一层镜像层,docker会做缓存;修改代码重新构建,不变的步骤会直接复用缓存,速度很快。

查看本地已经构建好的镜像

bash 复制代码
docker images

你可以看到列表里出现 my-flask-demo,TAG是 v1

第四步:用自己构建出来的镜像启动容器测试

bash 复制代码
docker run -d -p 5000:5000 --name demo-container my-flask-demo:v1

参数说明:

  • -d:后台运行
  • -p 5000:5000:宿主机(WSL)端口5000映射容器内部5000
  • --name demo-container:给容器起名字

测试访问:

  1. 在WSL里面访问:
bash 复制代码
curl http://127.0.0.1:5000

看到输出 Hello Docker! Build image locally from WSL 代表成功。

如果你是Docker Desktop,Windows浏览器直接打开 http://localhost:5000 也可以访问。

查看正在运行容器:

bash 复制代码
docker ps

第五步:修改代码,重新构建,体验镜像更新

修改 app.py

bash 复制代码
cat > app.py << 'EOF'
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
    return "✅我修改了代码,重新build本地镜像成功!\n"

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)
EOF

重新构建,换一个版本标签 v2:

bash 复制代码
docker build -t my-flask-demo:v2 .

停止旧容器,用新版本镜像启动:

bash 复制代码
# 停止旧容器
docker stop demo-container
# 删除旧容器
docker rm demo-container
# 启动v2版本
docker run -d -p 5000:5000 --name demo-container my-flask-demo:v2

curl访问,看到新输出,完成镜像迭代。

相关推荐
小灰灰搞电子3 小时前
Rust 相关容器(集合)详解
开发语言·容器·rust
上学的小垃圾9 小时前
基于docker安装MySQL(openEuler系统)
linux·mysql·docker·容器
kakakahahahaha10 小时前
【Windows】C盘低空间反复复发的排查与扩容边界
c语言·windows·电脑·笔记本电脑·内容运营·软件需求
2301_8000742112 小时前
map,list简单方法
windows·python·list
技术不好的崎鸣同学12 小时前
Windows 红队实战:前言
windows
吴声子夜歌13 小时前
Guava——基本工具(二)
windows·python·guava
猎嘤一号15 小时前
【2026 最新】Windows 11 右键菜单还原为 Windows 10 经典样式:一条命令、原理、回退与新版说明
windows·python
qq_3692243315 小时前
ddraw.dll丢失是什么原因引起的?老游戏运行报错,多种可行修复手段汇总分享
windows·游戏·dll·dll修复·dll丢失·dll错误
BR_D16 小时前
Windows 下 nvm 安装与完整使用教程
windows·nodejs·nvm