使用 Docker 部署 Java 项目(通俗易懂)

news2025/4/13 20:20:01

目录

1、下载与配置 Docker

1.1 docker下载(这里使用的是Ubuntu,Centos命令可能有不同)

1.2 配置 Docker 代理对象

2、打包当前 Java 项目

3、进行编写 DockerFile,并将对应文件传输到 Linux 中

3.1 编写 dockerfile 文件

3.2 使用 WinSCP 进行两端的文件传输

4、进行创建镜像,运行容器,并加入到同一网络中

4.1 创建镜像

4.2 运行容器

4.3 统一网络

4.4 使用 DockerCompose 进行部署项目(自行了解)

5、测试当前项目的接口,是否能正确访问


docker 部署 java 项目

前言:

📜置顶有 Docker 的最全最易懂的配套 pdf 文件

搜索镜像的网站(推荐):Docker DocsDocker Documentation is the official Docker library of resources, manuals, and guides to help you containerize applications.icon-default.png?t=O83Ahttps://docs.docker.com/

1、下载与配置 Docker

1.1 docker下载(这里使用的是Ubuntu,Centos命令可能有不同)

以下命令,默认不是 root 用户操作,若是,可去除 sudo 命令前缀

更新软件包索引:

sudo apt update

安装必要的依赖项(如果需要的话):

sudo apt install apt-transport-https ca-certificates curl software-properties-common

添加Docker的官方GPG密钥(如果从官方仓库安装):

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

设置Docker的稳定版仓库:

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

再次更新软件包索引:

sudo apt update

安装Docker CE:

sudo apt install docker-ce docker-ce-cli containerd.io

验证安装:

sudo docker --version

启动Docker服务:

sudo systemctl start docker

设置Docker开机自启动(可选):

sudo systemctl enable docker

1.2 配置 Docker 代理对象

回到 ~ 主目录,进入 /etc/docker/daemon.json 配置文件,vim 将以下高亮的信息填入其中

# 将内容写入 /etc/docker/daemon.json 文件,root 用户可以去掉 sudo
# 配置 Docker 镜像,使用多个镜像源来提高镜像下载速度
echo '{
  "registry-mirrors": [
    "https://proxy.1panel.live",
    "https://docker.1ms.run",
    "https://docker.ketches.cn"
  ]
}' | sudo tee /etc/docker/daemon.json


# 重启 Docker 服务以使配置生效
sudo systemctl restart docker


2、打包当前 Java 项目

在 maven 中,先 clean 后 package 打包

这样,就能得到项目中对应模块的 .jar 包


3、进行编写 DockerFile,并将对应文件传输到 Linux 中

Window 和 Linux 之间的文件传输软件下载地址:

文件传输工具WinSCP下载安装教程_winscp安装教程-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/qq_26383975/article/details/120220823

3.1 编写 dockerfile 文件

FROM openjdk:17-jdk

ARG APP_PATH=/opt

WORKDIR $APP_PATH

# Copy Application
COPY auth.jar $APP_PATH/auth.jar
RUN mkdir logs

ENV JAVA_OPTS="-Xms512m -Xmx512m -XX:-HeapDumpOnOutOfMemoryError" \
    SPRING_PROFILES_ACTIVE=local

EXPOSE 9313

# 指定docker容器启动时运行jar包
#ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Xmx768m","-jar","/opt/data-annotation.jar","--spring.profiles.active=dev"]
CMD java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar /opt/auth.jar

以上文件大致结构解释(其他以外的配置根据自己需求进行添加):

3.2 使用 WinSCP 进行两端的文件传输

注意:运行容器的时候尽量不要使用 root 权限的用户进行操作,减少安全风险

在此之前,若以 root 的身份进行操作文件传输软件,需要先启用 ssh 权限:

在 Ubuntu 中启用 root 用户的远程登录权限_ubuntu root远程登录-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/heromps/article/details/144549653然后进行切换到 root 用户,并更改密码:

新安装的Ubuntu系统中默认的root用户密码是多少,怎么修改?_ubuntu22.04默认密码-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/Dreamhai/article/details/109764502在 WinSCP 中以 root 进行登录:

传输相关文件,并根据 dockerfile 信息,将其 .jar 包与 dockerfile 建立在同一个目录下:


4、进行创建镜像,运行容器,并加入到同一网络中

4.1 创建镜像

根据 dockerfile 创建对应的镜像,这里是在 auth 目录下进行创建(命令最后的 . 是表示当前目前下,不能省略)

docker build -t auth:1.0 -f Dockerfile-auth .

陆续将其他模块的镜像给创建好:

4.2 运行容器

这里是运行 anth 模块的容器

docker run -d -p 9313:9313 --name exam_auth 3ddbf5bc0dae

陆续将其他模块的容器运行起来:

4.3 统一网络

若当前 docker 中没有自定义网络,可以创建一个,这里我已经创建了

docker network create [OPTIONS] NETWORK_NAME

然后将这些容器依次加入到这个自定义的网络中

前者 exam_net 是当前的网络名,后者是需要加入进来的容器名

docker network connect exam_net exam_auth

查看当前网络中的容器是否都加入了进来

inspect 后面填入当前的网络 ID或名称

docker network inspect bea8eac2916b

4.4 使用 DockerCompose 进行部署项目(自行了解)

前提:目前流行这种做法,因为更加简便,不用像上面 4.1、4.2、4.3 繁琐

使用Docker和DockerCompose进行java项目部署_dockercompose部署java项目-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/qq_45854695/article/details/139643245

可以在一个 compose 中配置多个容器的信息(当然,使用 compose 的话其他的 dockerfile 内容也是要有一定变化的,毕竟前者可以简化后者),之后只需要运行一行命令即可容器创建、运行并统一网络

docker-compose -f docker-compose-dev.yml up -d


5、测试当前项目的接口,是否能正确访问

前提:

在测试接口前,需要保证打包前原项目中的 .yml 文件中 local 的 ip (这里mysql 和 redis 等一些 ip 看情况进行更改)是否设置为当前服务器的 ip ,如果 ip 不一致,之前进行打包的 .jar 包进行访问时会失败

先查看对应服务的日志,查看是否正常运行

docker logs [OPTIONS] CONTAINER

这里使用 Apipost 进行访问 auth 登录接口,可见接口访问成功,即项目已部署成功

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2276870.html

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

相关文章

二手车交易系统的设计与实现(代码+数据库+LW)

摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统二手车交易信息管理难度大,容错率低&#xf…

抖音ip属地没有手机卡会显示吗

在数字时代,社交媒体平台如抖音已成为人们日常生活的重要组成部分。随着抖音等应用对用户体验和隐私保护的不断优化,IP属地显示功能逐渐走进大众视野。这一功能旨在提高网络环境的透明度,打击虚假信息和恶意行为。然而,对于没有手…

springMVC---resultful风格

目录 一、创建项目 pom.xml 二、配置文件 1.web.xml 2.spring-mvc.xml 三、图解 四、controller 一、创建项目 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi…

[Git] 深入理解 Git 的客户端与服务器角色

Git 的一个核心设计理念是 分布式&#xff0c;每个 Git 仓库都可以既是 客户端&#xff0c;也可以是 服务器。为了更好地理解这一特性&#xff0c;我们通过一个实际的 GitHub 远程仓库和本地仓库的场景来详细说明 Git 如何在客户端和服务器之间协作&#xff0c;如何独立地进行版…

网络安全-RSA非对称加密算法、数字签名

数字签名非常普遍&#xff1a; 了解数字签名前先了解一下SHA-1摘要&#xff0c;RSA非对称加密算法。然后再了解数字签名。 SHA-1 SHA-1&#xff08;secure hash Algorithm &#xff09;是一种 数据加密算法。该算法的思想是接收一段明文&#xff0c;然后以一种不可逆的方式将…

了解 ASP.NET Core 中的中间件

在 .NET Core 中&#xff0c;中间件&#xff08;Middleware&#xff09; 是处理 HTTP 请求和响应的核心组件。它们被组织成一个请求处理管道&#xff0c;每个中间件都可以在请求到达最终处理程序之前或之后执行操作。中间件可以用于实现各种功能&#xff0c;如身份验证、路由、…

【三维数域】三维数据调度-负载均衡和资源优化

在处理大规模三维数据时&#xff0c;负载均衡和资源优化是确保系统高效运行、提供流畅用户体验的关键。这两者不仅影响到系统的性能和稳定性&#xff0c;还直接决定了用户交互的质量。以下是关于如何在三维数据调度中实现有效的负载均衡和资源优化的详细探讨。 一、负载均衡 负…

AI大模型开发—1、百度的千帆大模型调用(文心一言的底层模型,ENRIE等系列)、API文档目的地

文章目录 前言一、千帆大模型平台简介二、百度平台官网初使用1、平台注册和使用2、应用注册 并 申请密钥3、开启千帆大模型 API调用a、API文档b、 前言 本章旨在为读者奉献一份实用的操作指南&#xff0c;深入探索如何高效利用百度千帆大模型平台的卓越功能。我们将从账号注册…

Java Stream流操作List全攻略:Filter、Sort、GroupBy、Average、Sum实践

在Java 8及更高版本中&#xff0c;Stream API为集合处理带来了革命性的改变。本文将深入解析如何运用Stream对List进行高效的操作&#xff0c;包括筛选&#xff08;Filter&#xff09;、排序&#xff08;Sort&#xff09;、分组&#xff08;GroupBy&#xff09;、求平均值&…

《视听导报》是什么类型的报纸?报纸上发文章要交版面费吗?

作为个人成果发表的重要场所&#xff0c;报纸目前正得到越来越多单位的认可。不过在投稿时&#xff0c;我们既要考虑投稿的报纸是否符合评审标准&#xff0c;也要考虑发表文章的成本是否在我们的承受范围之内。 下面就让我们以《视听导报》为例&#xff0c;了解下如何查看报纸的…

candb++ windows11运行报错,找不到mfc140.dll

解决问题记录 mfc140.dll下载 注意&#xff1a;放置位置别搞错了

服务器引导异常,Grub报错: error: ../../grub-core/fs/fshelp.c:258:file xxxx.img not found.

服务器引导异常,Grub报错: error: ../../grub-core/fs/fshelp.c:258:file xxxx.img not found. 1. 故障现象2. 解决思路3. 故障分析4. 案件回溯5. 解决问题 1. 故障现象 有一台服务器业务报无法连接. 尝试用Ping命令发现无法ping通. 通过控制台查看发现有以下报错: error: ..…

LeetCode第432场周赛 (前3题|多语言)

比赛链接&#xff1a;第432场周赛 文章目录 3417. 跳过交替单元格的之字形遍历思路代码CJavaPython 3418. 机器人可以获得的最大金币数思路代码CJavaPython 3419. 图的最大边权的最小值思路代码CJavaPython 总结 3417. 跳过交替单元格的之字形遍历 思路 没啥好说的就是模拟 按…

下载导出Tomcat上的excle文档,浏览器上显示下载

目录 1.前端2.Tomcat服务器内配置3.在Tomcat映射的文件内放置文件4.重启Tomcat&#xff0c;下载测试 1.前端 function downloadFile() {let pictureSourceServer "http://192.168.1.1:8080/downFile/";let fileName "测试文档.xlsx";let fileURL pictu…

蓝桥杯备赛:顺序表和单链表相关算法题详解(上)

一.询问学号&#xff08;顺序表&#xff09; 1.题目来源&#xff1a; https://www.luogu.com.cn/problem/P3156 &#xff08;洛谷原题&#xff09; 2.解析与代码实现&#xff1a; &#xff08;1&#xff09;解析&#xff1a; 首先结合题目和输出样例不难看出这道题目是围绕两…

Java 基于微信小程序的高校科研团队管理系统设计与实现(附源码,部署,文档

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

C#,任意阶幻方(Magic Square)的算法与源代码

1 什么是幻方&#xff1f; 幻方&#xff08;Magic Square&#xff09;是一种将数字安排在正方形格子中&#xff0c;使每行、列和对角线上的数字和都相等的方法。 幻方也是一种中国传统游戏。旧时在官府、学堂多见。它是将从一到若干个数的自然数排成纵横各为若干个数的正方形&…

java求职学习day12

1 泛型机制&#xff08;熟悉&#xff09; 1.1 基本概念 &#xff08;1&#xff09;通常情况下集合中可以存放不同类型的元素&#xff0c;是因为将所有对象都看作Object类型放入&#xff0c;因此从集合中取出元素时&#xff0c;也是Object类型&#xff0c;为了表达该元素真实的…

uni-app h5修改浏览器导航栏的 title以及icon

1.title 在pages.json文件中修改:"navigationBarTitleText":"uni-app" 2.icon的修改 2.1 在static中新建一个index.html文件作为模板文件&#xff0c;并且将你的icon图片也放在static文件夹下 2.2 在index.html文件中加入如下代码&#xff08;记得icon文件…

Mac——Docker desktop安装与使用教程

摘要 本文是一篇关于Mac系统下Docker Desktop安装与使用教程的博文。首先介绍连接WiFi网络&#xff0c;然后详细阐述了如何在Mac上安装Docker&#xff0c;包括下载地址以及不同芯片版本的选择。接着讲解了如何下载基础镜像和指定版本镜像&#xff0c;旨在帮助用户在Mac上高效使…