当前位置: 首页 > news >正文

Windows 中使用dockers创建指定java web 为镜像和运行容器

以下是在 Windows 中使用 Docker 创建 Java Web 应用镜像并运行容器的分步指南:


步骤 1:安装 Docker

  1. 下载并安装 Docker Desktop for Windows
  2. 启动 Docker Desktop,确保使用 WSL 2 后端(推荐)或 Hyper-V。

步骤 2:准备 Java Web 应用

  1. 将你的 Java Web 项目编译为可部署文件(如 WARJAR)。
    • 如果使用 Maven:mvn clean package

    • 编译后文件通常位于 target/ 目录下(例如 app.warapp.jar)。


步骤 3:创建 Dockerfile
在项目根目录中创建一个名为 Dockerfile 的文件(无后缀),内容如下:

示例 1:使用 Tomcat 部署 WAR 文件

# 使用官方 Tomcat 镜像
FROM tomcat:9.0-jdk11# 删除默认的 ROOT 应用(可选)
RUN rm -rf /usr/local/tomcat/webapps/ROOT# 将 WAR 文件复制到 Tomcat 的 webapps 目录
COPY target/app.war /usr/local/tomcat/webapps/ROOT.war# 暴露端口
EXPOSE 8080# 启动 Tomcat
CMD ["catalina.sh", "run"]

示例 2:运行可执行 JAR 文件

# 使用 OpenJDK 镜像
FROM openjdk:11-jre-slim# 创建工作目录
WORKDIR /app# 复制 JAR 文件
COPY target/app.jar /app/app.jar# 暴露端口(根据实际应用端口修改)
EXPOSE 8080# 运行应用
CMD ["java", "-jar", "app.jar"]

步骤 4:构建 Docker 镜像

  1. 打开终端(PowerShell 或 CMD),导航到项目根目录(包含 Dockerfile 的目录)。

  2. 运行以下命令构建镜像:

    docker build -t java-web-app:latest .
    

    -t java-web-app:latest:指定镜像名称和标签。

    .:表示使用当前目录作为构建上下文。


步骤 5:运行容器
运行 Tomcat 容器

docker run -d -p 8080:8080 --name my-java-app java-web-app:latest

运行 JAR 容器

docker run -d -p 8080:8080 --name my-java-app java-web-app:latest

-d:后台运行容器。

-p 8080:8080:将容器端口 8080 映射到主机端口 8080

--name my-java-app:指定容器名称。


步骤 6:验证

  1. 访问 http://localhost:8080 查看应用是否正常运行。
  2. 检查容器日志:
    docker logs my-java-app
    

常见问题排查

  1. 端口冲突:如果 8080 端口被占用,修改映射端口(例如 -p 8081:8080)。
  2. 文件路径错误:确保 COPY 指令中的文件路径正确。
  3. 依赖缺失:如果应用依赖数据库或其他服务,使用 docker-compose.yml 编排多容器。

高级选项
使用 Docker Compose
创建 docker-compose.yml 文件:

version: '3'
services:web:build: .ports:- "8080:8080"restart: always

运行:

docker-compose up -d

持久化数据
为 Tomcat 挂载持久化卷:

docker run -d -p 8080:8080 -v /path/on/host:/usr/local/tomcat/webapps --name my-java-app java-web-app:latest

通过以上步骤,你可以将 Java Web 应用打包为 Docker 镜像并在容器中运行。

http://www.xdnf.cn/news/263881.html

相关文章:

  • C++ STL vector高级特性与实战技巧
  • AVFormatContext 再分析零
  • 在Windows系统中使用Docker发布镜像到镜像仓库
  • 用PyTorch搭建卷积神经网络实现MNIST手写数字识别
  • 生成式 AI 的工作原理
  • Elasticsearch 中的索引模板:如何使用可组合模板
  • 【在Spring Boot中集成Redis】
  • 【赵渝强老师】TiDB生态圈组件
  • 3D人物关系图开发实战:Three.js实现自动旋转可视化图谱(附完整代码)
  • 人工智能助力工业制造:迈向智能制造的未来
  • 别样健康养生之道
  • AI 与生物技术的融合:开启精准医疗的新纪元
  • ros2 humble 控制真实机械臂(以lerobot为例)
  • 一种基于重建前检测的实孔径雷达实时角超分辨方法——论文阅读
  • **Java面试大冒险:谢飞机的幽默与技术碰撞记**
  • 做响应式布局网页多简单
  • AI生成视频检测方法及其相关研究
  • WebRTC 服务器之Janus概述和环境搭建
  • Spring MVC入门
  • 第12章:精神力的禁忌边界
  • 强化学习--3.值函数的方法(贝尔曼方程)
  • 直播推流拉流Token验证流程(直播服务器:SRS,验证服务器:EGGS(nodejs))
  • 智能决策支持系统的系统结构:四库架构与融合范式
  • k8s笔记——kubebuilder工作流程
  • 嵌入式硬件篇---STM32F103C8T6STM32F103RCT6
  • Flink 的状态机制
  • Qt中实现工厂模式
  • 音视频开源项目列表
  • 【2025年】MySQL面试题总结
  • 实战探讨:为什么 Redis Zset 选择跳表?