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 info、docker --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 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
rockmelodies3 天前
# Windows Server2008 R2 Standard(SP1镜像U盘)重置本地管理员密码【完整详细步骤】
windows·密码破解
虎头金猫3 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
分布式存储与RustFS3 天前
MinIO 官方 Docker 镜像被移除:依赖它的项目该怎么办
docker·云原生·devops·对象存储·minio·分布式存储
玉&心3 天前
通过Arthas在线诊断K8S中的内存及JVM等使用情况
docker·k8s·arthas
xing-xing3 天前
Docker容器中Nginx站点根目录网页配置访问
nginx·docker
赵文宇(温玉)3 天前
CoreDNS的hosts插件的缺行配置导致k8s集群异常
容器·kubernetes·rancher
guo_wen_qiang3 天前
上传本地镜像到harbor中
docker·容器·持续部署
羑悻的小杀马特3 天前
Dockerfile 全景指南:从入门编写dockerfile到生产环境镜像优化实战,一步步带你从啃透制作指令到镜像制作落地!
docker·dockerfile·镜像制作
BianHuanShiZhe3 天前
docker常见命令
docker