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

ops/2024/10/18 15:30:21/

🏝️ 博主介绍

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

Dockerfile__22">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

dockercompose__46">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.ppmy.cn/ops/126510.html

相关文章

Lua

1.声明一个变量 只要赋值一个变量,就相当于新建了一个变量,默认全局变量,加一个local前缀之后,这个变量就变成了局部变量 a1//全局变量 local b2//局部变量2.nil类型 在Lua里没有被声明过的变量都是nil,nil是一种类…

ansible————playbook

一、playbook和ad hoc命令 ad hoc命令是单行,一个简单的任务,运行一次。ansible真正强大的地方是使用ansible的playbook重复运行多次复杂的任务。 一个play是是一组有序的任务,该paly对应着在inventory被选择的主机。一个playbook是一个包含…

基于MATLAB的实现垃圾分类Matlab源码

【图像识别】基于卷积神经⽹络(CNN)实现垃圾分类Matlab 源码 ⼀、垃圾分类 如何通过垃圾分类管理,最⼤限度地实现垃圾资源利⽤,减少垃圾处置量,改善⽣存环境质量,是当前世界各国共同关注的迫切问题之⼀。…

C#学习笔记(二)

C#学习笔记(二) 第 二 章 命名空间和类、数据类型、变量和代码规范一、命名空间-namespace1. 作用与具体表达形式-using2. 命名空间如何分类?3. 命名空间的命名规范 第 二 章 命名空间和类、数据类型、变量和代码规范 深水区 一、命名空间-…

对于 前端 解释下 node.js的必要性

现代前端开发工具和构建工具(如 Webpack、Babel、ESLint、Prettier 等)是基于 Node.js 的,是因为这些工具和库本质上依赖于 Node.js 作为运行时环境 来执行构建、转译、打包、代码检查等任务。虽然这些工具的目标是处理前端代码,但…

HTML表单元素和表格元素

表单元素 表单元素是网页与用户交互的一种方式,它允许用户输入信息并将其发送到服务器端进行处理。HTML提供了一些表单元素,用于创建表单界面,其中包括: input:用于接收用户输入的各种数据,如文本、密码、…

王道408考研数据结构-排序-第八章

8.1 排序的基本概念 8.1.1 排序的定义 排序,就是重新排列表中的元素,使表中的元素满足按关键字有序的过程。 算法的稳定性。若待排序表中有两个元素R1和R2其对应的关键字相同,即 key, key,且在排序前 R1在 R2的前面,若使用某一排…

CTFHUB技能树之SQL——Cookie注入

开启靶场,打开链接: 发现没有注入点,猜测是Cookie注入 用burp抓包发送到repeater中: 先直接发送看看情况: 应该是整数型注入?毕竟默认就是id1 判断一下字段数: 1 order by 2# 正常回显 1 ord…