在 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.mzph.cn/web/77227.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云域名迁移至Amazon Route 53的完整指南

在当今的云计算时代,域名管理和DNS服务的选择对于网站性能和可用性至关重要。本文将详细介绍如何将阿里云上的域名迁移至Amazon Route 53,以充分利用AWS生态系统的优势。 1. 简介 Amazon Route 53是一种可用性高、可扩展性强的域名系统(DNS)web服务。它为开发者和企业提供了一…

AI网络渗透kali应用(gptshell)

kali安装gptshell 一、shellGPT 工具介绍 ShellGPT‌是一款由AI大型语言模型&#xff08;LLM&#xff09;驱动的终端命令行工具。它能帮助用户直接在终端与AI交互&#xff0c;自动生成、解释、执行各类 Linux 命令&#xff0c;大大提升了运维和开发效率。ShellGPT 支持接入 O…

STM32 I2C总线通信协议

引言 在嵌入式系统开发领域&#xff0c;I2C&#xff08;Inter-Integrated Circuit&#xff09;总线作为经典的双线制串行通信协议&#xff0c;凭借其简洁的物理层设计和灵活的通信机制&#xff0c;在传感器互联、存储设备控制、显示模块驱动等场景中占据重要地位。本文将深入剖…

spring,spring boot, spring cloud三者区别

Spring Framework vs Spring Boot vs Spring Cloud 1. Spring Framework 定位&#xff1a;基础框架&#xff0c;提供核心的IoC容器、AOP、事务管理、数据访问、Web MVC等能力。特点&#xff1a; 模块化设计&#xff1a;可单独使用某些模块&#xff08;如仅用Spring JDBC&…

每日算法-250425

每日算法打卡 - 2025年4月25日 记录今天完成的几道 LeetCode 算法题&#xff0c;分享解题思路和代码。 2178. 拆分成最多数目的正偶数之和 题目 解题思路 贪心算法 解题过程 题目要求我们将一个偶数 finalSum 拆分成尽可能多的 不同 正偶数之和。 为了使拆分出的数字数量…

SQL进阶知识:四、索引优化

今天介绍下关于索引优化的详细介绍&#xff0c;并结合MySQL数据库提供实际例子。 索引优化是数据库性能优化的关键环节之一&#xff0c;尤其是在处理大量数据时。索引可以加快查询速度&#xff0c;减少数据扫描范围&#xff0c;但不当的索引设计也可能导致性能问题。以下是关于…

(PYTHON)函数

函数的基本概念&#xff1a; python中函数分为以下四种&#xff1a; 1&#xff0c;python内置函数&#xff1a;如abs&#xff0c;len&#xff0c;max&#xff0c;min&#xff1b; 2&#xff0c;标准库函数&#xff1a;通过import声明标准库&#xff0c;如&#xff1a;math&a…

Winform(1.Winform控件学习)

使用的控件有:Button,Label,TextBox button:表示一个按钮,用户点击按钮触发事件 click事件最常用 label:标签,用于显示文本 Name属性:变量名称 textBox:输入框 Form1代码: using System; using System.Collections.Generic; using System.ComponentModel; using Sys…

linux centOS7.9 No package docker-ce available

docker pull apache/apisix:3.2.2-centos Error response from daemon: missing signature key 处理方式如下&#xff1a; 问题&#xff1a;在纯净机里安装docker时报错No package docker-ce available。 解决办法&#xff1a; 1、更新yum&#xff0c;使用yum -y upgrade&#…

小白学习java第15天:JDBC

1.数据库驱动 想一下我们之前是怎么操作数据库&#xff0c;是不是使用SQL语句对其mysql数据库管理系统&#xff0c;然后管理系统在进行数据库&#xff08;硬盘文件里面的&#xff09;进行操作。那么我现在想使用应用程序对其数据库进行操作&#xff0c;应该怎么办呢&#xff1…

django之数据的翻页和搜索功能

数据的翻页和搜素功能 目录 1.实现搜素功能 2.实现翻页功能 一、实现搜素功能 我们到bootstrap官网, 点击组件, 然后找到输入框组, 并点击作为额外元素的按钮。 我们需要使用上面红色框里面的组件, 就是搜素组件, 代码部分就是下面红色框框出来的部分。 把这里的代码复制…

Kotlin Multiplatform--02:项目结构进阶

Kotlin Multiplatform--02&#xff1a;项目结构进阶 引言正文 引言 在上一章中&#xff0c;我们对 Kotlin Multiplatform 项目有了基本的了解&#xff0c;已经可以进行开发了。但我们只是使用了系统默认的项目结构。本章介绍了如何进行更复杂的项目结构管理。 正文 在上一章中&…

【Git】连接github时的疑难杂症(DNS解析失败)

大家好&#xff0c;我是jstart千语。最近在将项目推送到github的时候&#xff0c;突然github就拒绝访问了&#xff0c;即使挂了VPN&#xff0c;网页也进不去&#xff0c;通过git也不能把代码推送上去。 即使后面看别人的一些解决方案&#xff0c;比如取消代理啊、更换ssh的方式…

ViTMAE:掩码自编码器是可扩展的视觉学习者

摘要 本文展示了掩码自编码器&#xff08;MAE&#xff09;作为计算机视觉中的可扩展自监督学习方法。我们的MAE方法很简单&#xff1a;我们对输入图像进行随机掩码&#xff0c;并重建缺失的像素。该方法基于两个核心设计。首先&#xff0c;我们开发了一种非对称的编码器-解码器…

全球碳化硅晶片市场深度解析:技术迭代、产业重构与未来赛道争夺战(2025-2031)

一、行业全景&#xff1a;从“材料突破”到“能源革命”的核心引擎 碳化硅&#xff08;SiC&#xff09;作为第三代半导体材料的代表&#xff0c;凭借其宽禁带&#xff08;3.26eV&#xff09;、高临界击穿场强&#xff08;3MV/cm&#xff09;、高热导率&#xff08;4.9W/cmK&…

AWS Glue ETL设计与调度最佳实践

一、引言 在AWS Glue中设计和调度ETL过程时&#xff0c;需结合其无服务器架构和托管服务特性&#xff0c;采用系统化方法和最佳实践&#xff0c;以提高效率、可靠性和可维护性。本文将从调度策略和设计方法两大维度详细论述&#xff0c;并辅以实际案例说明。 二、调度策略的最…

数据结构手撕--【二叉树】

目录 定义结构体&#xff1a; 初始化&#xff1a; 手动创建一个二叉树&#xff1a; 前序遍历&#xff1a; 中序遍历&#xff1a; 后序遍历 二叉树节点个数&#xff1a; 叶子节点个数&#xff1a; 二叉树第k层节点个数&#xff1a; 二叉树的高度&#xff1a; 查找值为x…

2025 Java 开发避坑指南:如何避免踩依赖管理的坑?

在 Java 开发的世界里&#xff0c;依赖管理就像是一座看不见的桥梁&#xff0c;连接着项目所需的各种第三方库和框架。然而&#xff0c;这座桥梁并非总是稳固&#xff0c;稍有不慎就可能掉入 “依赖地狱”&#xff0c;导致项目编译失败、运行异常。2025 年&#xff0c;随着开源…

用node打开一个网页

前言 使用node打开网页&#xff0c;要求跨平台 方案 使用子进程来用命令行打开网页链接就可以了&#xff0c;需要注意的是Mac系统使用的是open命令&#xff0c;Windows系统使用的是start命令&#xff0c;Linux等系统使用xdg-open命令。针对不同的操作系统使用不同的命令。 封…

使用功能包组织C++节点的具体教程

在 ROS&#xff08;Robot Operating System&#xff09;中&#xff0c;使用功能包&#xff08;package&#xff09;来组织 C 节点是一种常见且有效的方式&#xff0c;它能让代码结构更清晰、便于管理和复用。 1. 环境准备 确保已经安装了 ROS&#xff0c;这里以 ROS 2 Humble…