惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

aimingoo的专栏
aimingoo的专栏
有赞技术团队
有赞技术团队
博客园 - Franky
J
Java Code Geeks
美团技术团队
WordPress大学
WordPress大学
V
Visual Studio Blog
量子位
Hugging Face - Blog
Hugging Face - Blog
V
V2EX
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
人人都是产品经理
人人都是产品经理
博客园 - 三生石上(FineUI控件)
博客园 - 司徒正美
爱范儿
爱范儿
宝玉的分享
宝玉的分享
博客园 - 【当耐特】
D
DataBreaches.Net
云风的 BLOG
云风的 BLOG
The Cloudflare Blog
MyScale Blog
MyScale Blog
The GitHub Blog
The GitHub Blog
博客园_首页
U
Unit 42
O
OpenAI News
T
The Blog of Author Tim Ferriss
Microsoft Security Blog
Microsoft Security Blog
H
Help Net Security
S
SegmentFault 最新的问题
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Threat Research - Cisco Blogs
月光博客
月光博客
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Cisco Talos Blog
Cisco Talos Blog
T
Tailwind CSS Blog
A
About on SuperTechFans
AWS News Blog
AWS News Blog
Recorded Future
Recorded Future
A
Arctic Wolf
H
Hackread – Cybersecurity News, Data Breaches, AI and More
T
Tenable Blog
大猫的无限游戏
大猫的无限游戏
I
Intezer
K
Kaspersky official blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
The Register - Security
The Register - Security
G
Google Developers Blog
雷峰网
雷峰网
V
Vulnerabilities – Threatpost

博客园 - lizhigang

DBeaver 打开 utf8的sql文件 SMT 贴片机与 MES 系统集成指南 容器访问外部服务(10.100.1.90:9090)防火墙规则配置总结 Docker 容器间通信故障排查与修复操作总结 Docker 容器部署与运维总结报告 Nginx Docker 容器白名单配置操作总结 使用 pnpm 构建 Vue2 项目操作总结(Node 16 → Node 22) 前端项目 Docker 镜像构建完整操作总结 Windows 11 下使用 MySQL Workbench 还原多数据库备份文件操作指南 从内网私有仓库迁移镜像到阿里云 ACR 完整指南 wsl网络设置允许访问ssh(端口22) 在 Windows 11 上安装 Docker Nginx配置 访问数据库报错 Windows系统运行RuoYi-Vue完整指南 RuoYi-Vue 项目结构分析 win11 报错 windows 11 如何使用 Microsoft Hyper-V VMware 替代产品 IntelliJ IDEA 社区版支持 Spring Boot 开发说明文档 imes开发部署(IDEA社区版 差异) IntelliJ IDEA 社区版默认支持 Spring Boot 吗? imes开发部署 IDEA 端口被占用 解决办法 使用MySQL Workbench进行数据库备份 ruoyi-nbcio ktg-mes、ktm-mes-ui部署 Widows下安装和配置Redis Windows下Redis安装与配置全攻略 mes开源 imes:注意 若依框架:开源
在 WSL2 + Docker Desktop 环境下构建前后端 Docker 镜像
lizhigang · 2026-05-25 · via 博客园 - lizhigang

https://chat.deepseek.com/share/26rlloqp40befs1ey5

在 WSL2 + Docker Desktop 环境下构建前后端 Docker 镜像

本文档记录了在 Windows 11 + WSL2 + Docker Desktop 环境中,从零开始构建公司内部项目(imes-server 后端、imes-ui 前端)Docker 镜像的全过程。适用于本地开发环境。


目录

  1. 环境准备
  2. 构建后端镜像 imes-server
  3. 构建前端镜像 imes-ui
  4. 附录:常用命令速查
  5. 最终本地镜像清单
  6. 总结与关键要点

1. 环境准备

1.1 安装 WSL2 与 Ubuntu

PowerShell(管理员) 中执行:

# 启用 WSL 功能
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

# 重启电脑后,设置 WSL2 为默认版本
wsl --set-default-version 2

# 安装 Ubuntu 22.04
wsl --install -d Ubuntu

1.2 安装 Docker Desktop

  • 下载 Docker Desktop for Windows
  • 安装时选择 Use WSL 2 instead of Hyper-V(默认)
  • 安装完成后,在 Settings → Resources → WSL Integration 中:
    • 勾选 Enable integration with my default WSL distro
    • 勾选已安装的发行版(如 Ubuntu
    • 点击 Apply & Restart

1.3 验证 Docker 环境

# 进入 Ubuntu 终端
wsl -d Ubuntu

# 测试 Docker 命令
docker --version
docker ps

⚠️ 重要:不要在 docker-desktop 这个特殊的 WSL 发行版中存放代码或运行 docker 命令,它仅用于 Docker 引擎后台,空间极小(约 136MB)。请始终在常规 Ubuntu 发行版中进行开发。

1.4 克隆项目代码

在 Ubuntu 中执行:

cd ~
mkdir imes
cd imes
git clone -b develop http://devops.inspur.com/ITE__mes/imes-server.git
git clone -b develop http://devops.inspur.com/ITE__mes/imes-ui.git

2. 构建后端镜像 imes-server

2.1 进入项目目录

cd ~/imes/imes-server
ls -la   # 确认有 Dockerfile、pom.xml 及各个模块目录

2.2 Dockerfile 关键内容(已存在,无需修改)

ARG build_from=devops.inspur.com:80/ite/mes/repo/local_repo/imes-docker/base/maven-openjdk:17-jdk-alpine
ARG run_from=devops.inspur.com:80/ite/mes/repo/local_repo/imes-docker/base/amazoncorretto:22
FROM ${build_from} AS build
WORKDIR /build
COPY . .
RUN mvn -B -X clean package -Dmaven.test.skip=true -Dautoconfig.skip
FROM ${run_from}
COPY --from=build /build/ktg-admin/target/ktg-admin.jar /ktg-admin.jar
ENTRYPOINT ["java", "-jar", "/ktg-admin.jar"]

2.3 执行构建

docker build -t imes-server:latest .

构建过程说明

  • 使用 Maven 基础镜像(maven-openjdk:17-jdk-alpine)作为编译环境
  • Maven 编译整个多模块项目,生成 ktg-admin/target/ktg-admin.jar
  • 使用 amazoncorretto:22 作为运行基础镜像
  • 将 jar 包复制到运行镜像

耗时:约 5-6 分钟(取决于机器性能)

2.4 验证镜像

docker images | grep imes-server

输出示例:

imes-server                                      latest    79911b7a47ed   1.34GB          655MB

3. 构建前端镜像 imes-ui

3.1 进入项目目录

cd ~/imes/imes-ui
ls -la   # 确认有 Dockerfile、nginx.conf.template、package.json 等

3.2 Dockerfile 关键内容(已存在,无需修改)

ARG build_from=devops.inspur.com:80/ite/mes/repo/local_repo/imes-docker/base/node:14-alpine
ARG run_from=devops.inspur.com:80/ite/mes/repo/local_repo/imes-docker/base/nginx:alpine
FROM ${build_from} AS build
WORKDIR /app
COPY . .
RUN npm config set phantomjs_cdnurl https://npmmirror.com/mirrors/phantomjs && \
    npm config set registry https://registry.npmmirror.com && \
    npm install && npm run build:prod
FROM ${run_from}
COPY --from=build /app/dist /usr/share/nginx/html
COPY nginx.conf.template /etc/nginx/nginx.conf.template
WORKDIR /etc/nginx/
EXPOSE 80
ENTRYPOINT envsubst '$BACKEND_SERVICE'  < nginx.conf.template > ./conf.d/default.conf && cat ./conf.d/default.conf && nginx -g 'daemon off;'

3.3 执行构建

docker build -t imes-ui:latest .

构建过程说明

  • 使用 node:14-alpine 作为编译镜像
  • 设置 npm 镜像源为淘宝镜像加速
  • 执行 npm installnpm run build:prod 生成静态文件到 dist 目录
  • 使用 nginx:alpine 作为运行镜像
  • dist 复制到 /usr/share/nginx/html
  • 复制 nginx.conf.template 并配置入口点

耗时:约 6-7 分钟

3.4 验证镜像

docker images | grep imes-ui

输出示例:

imes-ui                                          latest    80e47be87854   229MB           90MB

4. 附录:常用命令速查

4.1 WSL 相关

wsl --list -v                  # 查看发行版及版本
wsl -d Ubuntu                  # 进入 Ubuntu
wsl --shutdown                 # 重启所有 WSL 实例(解决网络问题)

4.2 Docker 镜像操作

docker images                  # 列出本地镜像
docker save -o <file.tar> 镜像名   # 导出镜像
docker load -i <file.tar>           # 导入镜像
docker tag <old> <new>              # 打标签
docker rmi 镜像名                   # 删除镜像
docker system prune -a -f           # 清理未使用的镜像/容器/缓存(谨慎使用)

5. 最终本地镜像清单

镜像名称 标签 磁盘使用量 内容大小
imes-server latest 1.34 GB 655 MB
imes-ui latest 229 MB 90 MB
devops.inspur.com:80/.../amazoncorretto 22 982 MB 484 MB
devops.inspur.com:80/.../maven-openjdk 17-jdk-alpine 684 MB 340 MB
devops.inspur.com:80/.../nginx alpine 111 MB 53.8 MB
devops.inspur.com:80/.../node 14-alpine 261 MB 124 MB
devops.inspur.com:80/.../node 22-slim 479 MB 233 MB

注:基础镜像中的 node:22-slim 本地可能有两份不同 ID,来源不同但功能相同。


6. 总结与关键要点

  • 开发环境:始终使用常规 WSL 发行版(如 Ubuntu),不要使用 docker-desktop 存放代码或运行命令。
  • 构建优化:建议为项目添加 .dockerignore 文件,排除 .gitnode_modulestarget 等,减小构建上下文。
  • 镜像管理:构建完成后可通过 docker images 查看,使用 docker save 备份或分发镜像。
  • 基础镜像:项目中使用的私有仓库基础镜像已通过 Dockerfile 中的 ARG 指定,确保本地存在或可访问。

本总结涵盖从环境搭建到镜像构建的全流程,可作为内部开发文档直接使用。如有其他问题,请根据具体错误日志进一步排查。