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

🏝️ 博主介绍

大家好,我是一个搬砖的农民工,很高兴认识大家 😊 ~
👨‍🎓 个人介绍本人是一名后端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.mzph.cn/pingmian/57572.shtml

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

相关文章

使用flask构建一个简单的文件同步系统

使用Python构建文件同步系统:步骤指南 在当今互联网时代,能够在本地机器和远程服务器之间同步文件的能力变得至关重要。无论是备份重要文档、与团队成员共享大文件,还是在多个设备间保持数据一致性,一个强大的文件同步系统都能发…

【有啥问啥】智能座舱中的儿童遗留检测(CPD,Child Presence Detection)技术详解

智能座舱中的儿童遗留检测(CPD,Child Presence Detection)技术详解 引言 儿童遗留检测(CPD,Child Presence Detection)系统是一项旨在保护儿童免受因被遗忘在车内而导致的热中暑危险的重要安全技术。近年…

HCIP-HarmonyOS Application Developer 习题(十五)

(判断)1、在HarmonyOs中发布带权限公共事件,发布者首先要在config.json中申请所需的权限。 答案:正确 分析:发布携带权限的公共事件:构造CommonEventPublishInfo对象,设置订阅者的权限。 &#…

基于pytorch搭建CNN

先上代码 import torch import torch.nn as nn import torch.optim as optim import torch.nn.functional as F from torchvision import datasets, transforms import matplotlib.pyplot as plt import numpy as np import pandas as pd import matplotlibmatplotlib.use(tkA…

书生营 L0G4000 玩转HF/魔搭/魔乐社区

模型下载 在codespace上给环境装包,按照教材即可 运行后下载成功 建立下载json文件 新建下载internlm2_5-chat-1_8b的json文件 运行结果 基本上没啥问题,照着教程来就行 模型上传(可选) push的时候需要先认证token 最后的…

代码随想录:59. 螺旋矩阵 II

59. 螺旋矩阵 II x,y记录当前位置,b记录外层有多宽走完了。 接着模拟就行。向右向下向左向上四个方向一直走,直到不能走为止换方向。 注意换方向之间调整一下x,y的位置 class Solution {public int[][] generateMatrix(int n) {int answer[][]new int[…

vue使用 jsplumb 生成流程图

1、安装jsPlumb: npm install jsplumb 2、 在使用的 .vue 文件中引入 import { jsPlumb } from "jsplumb"; 简单示例: 注意:注意看 id 为"item-3"和"item-9"那条数据的连线配置 其中有几个小图片&#x…

Linux 权限的理解

内容摘要 本文内容包括shell的运行原理,包括外壳程序的原理、理解、和意义,以及从两个方面对于权限的理解(人和事物的属性)、修改文件的权限,包括修改文件的拥有者、修改文件拥有者所在的组的用户以及修改文件的三类用…

域渗透AD渗透攻击利用 MS14-068漏洞利用过程 以及域渗透中票据是什么 如何利用

目录 wmi协议远程执行 ptt票据传递使用 命令传递方式 明文口令传递 hash口令传递 票据分类 kerberos认证的简述流程 PTT攻击的过程 MS14-068 漏洞 执行过程 wmi协议远程执行 wmi服务是比smb服务高级一些的,在日志中是找不到痕迹的,但是这个主…

鸿蒙中富文本编辑与展示

富文本在鸿蒙系统如何展示和编辑的?在文章开头我们提出这个疑问,带着疑问来阅读这篇文章。 富文本用途可以展示图文混排的内容,在日常App 中非常常见,比如微博的发布与展示,朋友圈的发布与展示,都在使用富文…

【树莓派 5B】anaconda换源 更换清华源

【树莓派 5B】anaconda换源 更换清华源 前言 本文基于树莓派5B上运行的 Raspberrypi-OS-64bit (Debian 12 Bookworm)平台,更换 Anaconda 官方源为清华大学镜像源,旨在解决网络连接超时、连接官方源失败、下载速度慢的问题。 参…

spring (Aop) day 1024

ok了家人们,继续学习spring ,这段知识点有点绕,建议搭配b站的视频去学,passion!!! 八.AOP-面向切面编程 8.1 动态代理 8.1.1 概述 什么是代理?在现实生活中,代理很常见…

Python多进程编程:使用`multiprocessing.Queue`进行进程间通信

Python多进程编程:使用multiprocessing.Queue进行进程间通信 1. 什么是multiprocessing.Queue?2. 为什么需要multiprocessing.Queue?3. 如何使用multiprocessing.Queue?3.1 基本用法3.2 队列的其他操作3.3 队列的阻塞与超时 4. 适…

学习虚幻C++开发日志——TSet

TSet 官方文档:虚幻引擎中的Set容器 | 虚幻引擎 5.5 文档 | Epic Developer Community (epicgames.com) TSet 是通过对元素求值的可覆盖函数,使用数据值本身作为键,而不是将数据值与独立的键相关联。 默认情况下,TSet 不支持重…

iOS 18.2开发者预览版 Beta 1版本发布,欧盟允许卸载应用商店

苹果今天为开发人员推送了iOS 18.2开发者预览版 Beta 1版本 更新(内部版本号:22C5109p),本次更新距离上次发布 Beta / RC 间隔 2 天。该版本仅适用于支持Apple Intelligence的设备,包括iPhone 15 Pro系列和iPhone 16系…

【设计模式系列】观察者模式

一、什么是观察者模式 观察者模式(Observer Pattern)是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生变化时,所有依赖于它的对象都会得到通知并自动更新。这种模式也被称为发布-订阅模式&…

「重磅」中国电信数据湖+数据中台实施方案(附60页方案)

来源:公众号-数据分析小兵 作者按 哈喽,大家好,我是数据分析小兵,今天小兵向大家分享中国电信基于数据湖的数据中台实施方案。 方案核心内容一:数据湖的搭建与实施 数据湖是一套针对海量多源异构数据,具备数据采集、数据存储、数据计算、数据访问、数据管理的技术架构…

代码随想录:206. 反转链表

206. 反转链表 创建头结点,使用头插法,并用新的结点保存值插入里面。 空间复杂度O(n2) /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val…

1.CentOS安装

CentOS安装 新建虚拟机 选择安装方式 指定镜像方式 选择操作系统类型 设置虚拟机名称和位置 指定磁盘大小 点击“自定义硬件” 指定内存大小 指定镜像位置 点击“开启此虚拟机” 选择“Install CentOS 7”并回车 选择语言 选择安装“GNOME桌面”环境 配置安装位置 配置网络和…