Dockerfile + docker-compose 构建java镜像并运行服务

news2024/10/21 0:03:41

🏝️ 博主介绍

大家好,我是一个搬砖的农民工,很高兴认识大家 😊 ~
👨‍🎓 个人介绍本人是一名后端Java开发工程师,坐标北京 ~
🎉 感谢关注 📖 一起学习 📝 一起讨论 🌈 一起进步 ~
🙏 作者水平有限,欢迎各位大佬指正留言,相互学习进步 ~

目录

  • 🏝️ 博主介绍
  • 1. 目录结构 🚀
  • 2. Dockerfile 🚀
  • 3. docker-compose 🚀
  • 4. 执行命令 🚀
  • 5. 开通防火墙端口 🚀

1. 目录结构 🚀

  • docker-compose.yml/opt/pro_xx/jar
  • Dockerfile/opt/pro_xx/jar/springboot-basis
  • springboot-basis.jar: /opt/pro_xx/jar/springboot-basis
[root@localhost jar]# ls
docker-compose.yml  springboot-basis

[root@localhost jar]# ls springboot-basis
Dockerfile  springboot-basis.jar

2. Dockerfile 🚀

# AdoptOpenJDK 停止发布 OpenJDK 二进制,而 Eclipse Temurin 是它的延伸,提供更好的稳定性
FROM eclipse-temurin:8-jre

## 创建目录,并使用它作为工作目录
RUN mkdir -p /opt/pro_xx/jar/springboot-basis
WORKDIR /opt/pro_xx/jar/springboot-basis
## 将后端项目的 Jar 文件,复制到镜像中,前面是当前目录,后面是镜像中目录
COPY ./springboot-basis/springboot-basis.jar springboot-basis.jar

## 设置 TZ 时区
## 设置 JAVA_OPTS 环境变量,可通过 docker run -e "JAVA_OPTS=" 进行覆盖
ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms128m -Xmx128m"

## 暴露后端项目的 8082 端口
EXPOSE 8082

## 启动后端项目
## -Djava.security.egd=file:/dev/./urandom 是一个 Java 系统属性设置,用于指定随机数生成器的源
## /dev/urandom:这是一个非阻塞型随机数生成器
CMD java ${JAVA_OPTS} -Xms128m -Xmx128m -Djava.security.egd=file:/dev/./urandom -jar springboot-basis.jar

3. docker-compose 🚀

# version: '3.8'  新版本不需要指定 
services:  
  springboot-basis:  
    build:  
      context: .  # 指定docker-compose.yml文件所在的目录为构建上下文  
      dockerfile: springboot-basis/Dockerfile  # 指定app1目录下的Dockerfile  
    image: springboot-basis-image  # 为构建的镜像指定一个名称  
    container_name: springboot-basis-container  # 为容器指定一个名称(可选)  
    ports:  
      - "8082:8082"  
    networks:  
      - app_network  
    restart: unless-stopped  # 重启策略  
# 网络
networks:  
  app_network:  
    driver: bridge

4. 执行命令 🚀

[root@localhost jar]# pwd
/opt/pro_xx/jar

[root@localhost jar]# ls
docker-compose.yml  springboot-basis

[root@localhost jar]# docker-compose up -d
[+] Running 2/2
 ✔ Network jar_app_network               Created                                                                              0.2s
 ✔ Container springboot-basis-container  Started                                                                              0.2s
 
[root@localhost jar]# docker-compose ps
NAME                         IMAGE                    COMMAND                  SERVICE            CREATED              STATUS              PORTS
springboot-basis-container   springboot-basis-image   "/__cacert_entrypoin…"   springboot-basis   About a minute ago   Up About a minute   0.0.0.0:8082->8082/tcp, :::8082->8082/tcp

🌈 重新构建

[root@localhost jar]# docker-compose down
[+] Running 2/2
 ✔ Container springboot-basis-container  Removed                                                                             10.1s
 ✔ Network jar_app_network               Removed                                                                              0.1s

# 这里需要加--build才能重新构建镜像,否则使用已存在镜像
[root@localhost jar]# docker-compose up --build -d
[+] Building 18.2s (9/9) FINISHED                                                                              docker:default
 => [springboot-basis internal] load build definition from Dockerfile                                                         0.0s
 => => transferring dockerfile: 1.02kB                                                                                        0.0s
 => [springboot-basis internal] load metadata for docker.io/library/eclipse-temurin:8-jre                                    18.0s
 => [springboot-basis internal] load .dockerignore                                                                            0.0s
 => => transferring context: 2B                                                                                               0.0s
 => [springboot-basis 1/4] FROM docker.io/library/eclipse-temurin:8-jre@sha256:fb70a1d7a31c4e1fe5efdca36dc35cfe7e593a3be70d2  0.0s
 => [springboot-basis internal] load build context                                                                            0.1s
 => => transferring context: 24.92MB                                                                                          0.1s
 => CACHED [springboot-basis 2/4] RUN mkdir -p /opt/pro_xx/jar/springboot-basis                                               0.0s
 => CACHED [springboot-basis 3/4] WORKDIR /opt/pro_xx/jar/springboot-basis                                                    0.0s
 => [springboot-basis 4/4] COPY ./springboot-basis/springboot-basis.jar springboot-basis.jar                                  0.1s
 => [springboot-basis] exporting to image                                                                                     0.0s
 => => exporting layers                                                                                                       0.0s
 => => writing image sha256:26f4766dec23d1f053e5a8a6d8afbb2a58beeb9511752ab7f611edcfb2c20bed                                  0.0s
 => => naming to docker.io/library/springboot-basis-image                                                                     0.0s
[+] Running 2/2
 ✔ Network jar_app_network               Created                                                                              0.1s
 ✔ Container springboot-basis-container  Started                                                                              0.2s

5. 开通防火墙端口 🚀

🍨 如果需要对外访问,需要开通服务器防火墙

⚡ 推荐参考:CentOS 系统如何在防火墙开启端口

sudo firewall-cmd --zone=public --permanent --add-port=8082/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --zone=public --list-ports

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

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

相关文章

推荐一款多显示器管理工具:DisplayMagician

DisplayMagician是一款开源工具,专为Windows用户设计,能够通过一个快捷方式轻松自动配置屏幕和声音。它特别适合游戏玩家和应用程序用户,可以实现屏幕配置、声音设备切换以及启动额外程序等功能,最后在游戏或应用程序关闭时&#…

Qml-Item的Id生效范围

Qml-Item的Id生效范围 前置声明 本实例在Qt6.5版本中做的验证同一个qml文件中,id是唯一的,即不同有两个相同id 的Item;当前qml文件中声明的id在当前文件中有效(即如果其它组件中传入的id,与当前qml文件中id 相同,当前…

基于curl和wget命令编写的多文件或大文件批量上传下载

最近需要在windows和服务器linux系统之间传递大量的文件,部分文件非常大(TB以上),并且文件夹中包含文件或文件夹,需要先进行上传再进行组织,因此就想办法结合curl和wget命令编写了命令或脚本工具&#xff0…

三菱PLC伺服-停止位置不正确故障排查

停止位置不正确时,请确认以下项目。 1)请确认伺服放大器(驱动单元)的电子齿轮的设定是否正确。 2)请确认原点位置是否偏移。 1、设计近点信号(DOG)时,请考虑有足够为0N的时间能充分减速到爬行速度。该指令在DOG的前端开始减速到爬行速度&…

【云从】六、云存储

文章目录 1、应用架构2、存储设备3、存储方案3.1 直连式存储DAS3.2 网络连接存储NAS3.3 存储区域网络SAN3.4 分布式存储ServerSAN3.5 软件定义存储SDS 4、云存储4.1 云硬盘CBS4.2 文件存储CFS4.3 对象存储COS 1、应用架构 2、存储设备 硬盘性能对比: 硬盘接口对比&…

C语言(函数)—函数栈帧的创建和销毁

目录 前言 补充知识 一、函数线帧是什么? 二、函数线帧的实现(举例说明) 两数之和代码 ​编辑两数之和 汇编代码分析 执行第一条语句 执行第二条语句 执行第三条语句 执行第四、五、六条语句 执行第七条语句 执行第八、九、十条语句 执行第十…

Scroll 生态首个 meme 项目 $Baggor,我们可以有哪些期待?

在最近几个月里,加密市场整体表现平稳,无论是比特币还是山寨币板块,都处于震荡状态,并未显示出突破前高的迹象。然而,在这样的市场背景下,meme币却持续扛起了大旗,令这个看似不太熊的熊市不断引…

递归算法笔记

根据b站视频整理的 **视频地址:**https://www.bilibili.com/video/BV1S24y1p7iH/?spm_id_from333.788.videopod.sections&vd_source6335ddc7b30e1f4510569db5f2506f20 最常见的一个递归例子: 斐波那契数列:1,2,3…

Linux 使用xtrabackup备份MySQL数据

目录 一:xtrabackup 介绍二:实现数据备份1. 实现全备份2. 实现增量备份3. 实现差异备份4. 全备份时压缩数据5. 全备份时排除指定表不备份6. 全备份时排除指定库不备份 三:实现数据还原1. 全备份数据恢复流程2. 全备份压缩后的数据恢复流程3. …

神仙公司名单(长沙)

神仙公司(长沙) 小周末,继续 神仙公司系列。 长沙,湖南省的省会城市,不仅以其深厚的历史文化底蕴著称,同时也是一个充满活力的现代都市。 长沙的经济活力、教育资源、医疗资源、就业机会、居住环境、生活成…

python中堆的用法

Python 堆(Headp) Python中堆是一种基于二叉树存储的数据结构。 主要应用场景: 对一个序列数据的操作基于排序的操作场景,例如序列数据基于最大值最小值进行的操作。 堆的数据结构: Python 中堆是一颗平衡二叉树&am…

15分钟学Go 第2天:安装Go环境

第2天:安装Go环境 1. 引言 在学习Go语言之前,首先需要配置好本地开发环境。本节将详细介绍如何在Windows 11上安装和配置Go语言环境,包括安装步骤、环境变量设置、VS Code配置与测试、以及常见问题解决方案。完成这些步骤后,你将…

Excel:vba实现筛选出有批注的单元格

实现的效果:代码: Sub test() Dim cell As RangeRange("F3:I10000").ClearlastRow Cells(Rows.Count, "f").End(xlUp).Row MsgBox lastrow For Each cell In Range("a1:a21")If Not cell.Comment Is Nothing ThenMsgBox…

【AIGC】2024-arXiv-InstantStyle:文本到图像生成中保持风格的免费午餐

2024-arXiv-InstantStyle: Free Lunch towards Style-Preserving in Text-to-Image Generation InstantStyle:文本到图像生成中保持风格的免费午餐摘要1. 引言2. 相关工作2.1 文本到图像的传播模型2.2 风格化图像生成2.3 扩散模型中的注意力控制 3. 方法3.1 动机3.2…

keil中编译遇到错误“error #94-D the size of an array must be greater than zero”解决方法

这一期,我们来看一个在keil中编译时候遇到定义数组元素个数为0时候遇到的一个错误。 错误: 先看错误:编译提示错误“error: #94-D: the size of an array must be greater than zero” ,意思是这个数组内元素个数不能定义为0个&…

【AIGC】解锁高效GPTs:ChatGPT-Builder中系统提示词Prompt的设计与应用

博客主页: [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 💯前言💯系统提示词系统提示词的作用与重要性系统提示词在构建GPTs中的作用结论 💯ChatGPT-Builder系统提示词的详细解读OpenAI为Builder编写的系统提示词系统提示词对…

R语言详解predict函数

R语言中predict函数在建立模型&#xff0c;研究关系时常用。但是不同type得到的结果常常被混为一谈&#xff0c;接下来&#xff0c;探讨predict得到的不同结果。 #数据 set.seed(123) n<-1000 age<-rnorm(n,mean50,sd10) gender<-rbinom(n,1,0.5) disease<-rbinom…

OpenCV高级图形用户界面(12)用于更改指定窗口的大小函数resizeWindow()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::resizeWindow() 函数用于更改指定窗口的大小。这使得你可以根据需要调整窗口的宽度和高度。 注释 指定的窗口大小是指图像区域的大小。工具栏…

Maxwell 底层原理 详解

Maxwell 是一个 MySQL 数据库的增量数据捕获&#xff08;CDC, Change Data Capture&#xff09;工具&#xff0c;它通过读取 MySQL 的 binlog&#xff08;Binary Log&#xff09;来捕获数据变化&#xff0c;并将这些变化实时地发送到如 Kafka、Kinesis、RabbitMQ 或其他输出端。…

字节跳动青训营——入营考核解答(持续更新中~~~)

考核内容&#xff1a; 在指定的题库中自主选择不少于 15 道算法题并完成解题&#xff0c;其中题目难度分配如下&#xff1a; 简单题不少于 10 道中等题不少于 4 道困难题不少于 1 道 解答代码 20. 百分位数&#xff08;中等&#xff09; 代码实现&#xff1a; import jav…