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

在 Java 项目中搭建和部署 Docker 的详细流程

引言

在现代软件开发中,Docker 已成为一种流行的工具,用于简化应用的部署和运行环境的一致性。本文将详细介绍如何在 Java 项目中搭建和部署 Docker,包括配置文件、代码示例以及流程图。


一、整体工作流程

以下是整个流程的概览:

编写 Java 代码
构建 Java 项目
创建 Dockerfile
构建 Docker 镜像
运行 Docker 容器
发布镜像到 Docker Hub
在服务器上拉取并运行容器

二、搭建 Java 项目

2.1 创建一个简单的 Spring Boot 项目

项目结构
my-java-app/
├── src/main/java/com/example/demo/DemoApplication.java
├── src/main/resources/application.properties
├── pom.xml
└── Dockerfile
DemoApplication.java 文件内容:
package com.example.demo;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@SpringBootApplication
@RestController
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}@GetMapping("/")public String home() {return "Hello, Docker!";}
}
application.properties 文件内容:
server.port=8080
pom.xml 文件内容:
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>demo</artifactId><version>1.0-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.0</version></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

三、创建 Dockerfile

在项目根目录下创建一个名为 Dockerfile 的文件,定义如何构建 Docker 镜像。

Dockerfile 文件内容:
# 使用官方 OpenJDK 基础镜像
FROM openjdk:17-jdk-slim# 设置工作目录
WORKDIR /app# 复制 Maven 构建的 JAR 文件
COPY target/demo-1.0-SNAPSHOT.jar app.jar# 暴露端口
EXPOSE 8080# 启动命令
ENTRYPOINT ["java", "-jar", "app.jar"]

四、构建和运行 Docker 容器

4.1 构建 Java 项目

在项目根目录下运行以下命令,使用 Maven 构建项目:

mvn clean package

构建完成后,会在 target 目录下生成一个 JAR 文件,例如 demo-1.0-SNAPSHOT.jar

4.2 构建 Docker 镜像

在项目根目录下运行以下命令构建镜像:

docker build -t my-java-app .

4.3 运行容器

运行容器并将主机的 8080 端口映射到容器的 8080 端口:

docker run -d -p 8080:8080 --name my-running-app my-java-app

4.4 验证运行

访问 http://localhost:8080,您应该会看到页面显示 Hello, Docker!


五、发布镜像到 Docker Hub

5.1 登录 Docker Hub

登录到您的 Docker Hub 账户:

docker login

输入用户名和密码完成登录。

5.2 标记镜像

为镜像添加标签以便上传到 Docker Hub:

docker tag my-java-app your-dockerhub-username/my-java-app:1.0

5.3 推送镜像

将镜像推送到 Docker Hub:

docker push your-dockerhub-username/my-java-app:1.0

六、在服务器上部署

6.1 拉取镜像

在目标服务器上运行以下命令拉取镜像:

docker pull your-dockerhub-username/my-java-app:1.0

6.2 运行容器

运行容器并映射端口:

docker run -d -p 8080:8080 --name my-deployed-app your-dockerhub-username/my-java-app:1.0

6.3 验证部署

访问服务器的 http://<server-ip>:8080,验证应用是否正常运行。


七、总结

通过本文,我们详细介绍了如何在 Java 项目中搭建和部署 Docker。以下是关键点总结:

  1. 编写 Java 项目:使用 Spring Boot 快速构建一个 Web 应用。
  2. 创建 Dockerfile:定义应用的运行环境和启动方式。
  3. 构建和运行容器:通过 docker builddocker run 快速启动应用。
  4. 发布镜像:将镜像推送到 Docker Hub,便于分发和部署。
  5. 服务器部署:在目标服务器上拉取镜像并运行容器。

希望本文能帮助您快速掌握在 Java 项目中搭建和部署 Docker 的方法,并将其应用到实际项目中。如果您有任何问题或建议,请随时留言交流!


参考资料

  • Docker 官方文档
  • Spring Boot 官方文档
  • Docker Hub 文档
http://www.xdnf.cn/news/133993.html

相关文章:

  • Jenkins流水线管理工具
  • Estimands与Intercurrent Events:临床试验与统计学核心框架
  • Flink TaskManager详解
  • Unity开发者快速认识Unreal 的BluePrint(二)
  • 软件测试流程
  • 代理ip和实际ip的区别和联系
  • MySQL的MVCC【学习笔记】
  • stone 3d v3.3.0版本发布,含时间线和连接器等新功能
  • 零信任架构:重塑网络安全的IT新范式
  • Redis ⑥-string | hash | list
  • 金仓数据库征文-政务领域国产化数据库更替:金仓 KingbaseES 应用实践
  • 使用springboot+easyexcel实现导出excel并合并指定单元格
  • VuePress可以做什么?
  • Keras中Lambda层的常用方法
  • 告别默认配置!Xray自定义POC开发指南
  • Linux字符设备驱动开发的详细步骤
  • ubuntu22.04 命令行修改静态ip
  • 贝叶斯优化GAM回归(matlab代码)
  • 牛客小白月赛115-B题:签到题
  • Python Cookbook-6.9 快速复制对象
  • 代码随想录算法训练营第60期第十七天打卡
  • 小白如何使用Cursor运行python程序(含环境配置教程)
  • 隐形革命:环境智能如何重构“人-机-境“共生新秩序
  • 关于循环缓冲区
  • 【java源码】AI智能导诊系统,基于H5、小程序、app等多端,引导患者自助就诊挂号,实现科学就诊
  • 4G卡的DTU固件TCP通讯
  • 【Rust】Rust中的枚举与模式匹配,原理解析与应用实战
  • 秒级到毫秒:BFD的速度革命
  • Swift闭包(Closure)深入解析与底层原理
  • SAM 2 (Segment Anything ):图像与视频通用分割模型