【docker】springboot 服务提交至docker

news2025/4/15 9:55:21

准备docker

(不是docker hub或者harbor,就是可以运行docker run的服务),首先确保docker已经安装。
本文以linux下举例说明:

systemctl stats docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2024-12-10 11:37:13 CST; 22h ago

确保是active 状态。

配置docker

参考
spingboot项目打包到docker镜像[保姆级教程]

经过测试配置放在/etc/docker/daemon.json中不行。还是报如下错误:

journalctl -xe
-- Unit docker.service has begun starting up.
Dec 10 11:13:55 hdp dockerd[2775612]: unable to configure the Docker daemon with file /etc/docker/daemon.json: the following directives are specified both as a flag and in the configuration file: hosts: (from flag: [fd://], from file: [unix:///var/r>Dec 10 11:13:55 hdp systemd[1]: docker.service: Main process exited, code=exited, status=1/FAILURE
Dec 10 11:13:55 hdp systemd[1]: docker.service: Failed with result 'exit-code'.
# /etc/docker/daemon.json 和 /usr/lib/systemd/system/docker.service 冲突!

修改vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

重启docker
systemctl daemon-reload,systemctl restart docker

查看端口是否被监听:netstat -tuln | grep 2375

idea安装docker 插件

在这里插入图片描述

设置docker服务

在这里插入图片描述

设置idea docker 任务

在这里插入图片描述

构建Dockerfile

项目的根目录新建一个文件Dockerfile,名字无所谓(如:Dockerfile-prod),位置也无所谓。

FROM openjdk:8-jdk-alpine
# 镜像是从 openjdk:8-jdk-alpin 继承而来的

# ENV MY_PROFILE=prod # 从idea设置环境变量

EXPOSE 8501
# ARG JAR_FILE
# # 构建参数和 ENV 的效果一样,都是设置环境变量。
#所不同的是,ARG 所设置的构建环境的环境变量,在将来容器运行时是不会存在这些环境变量的。
#但是不要因此就使用 ARG 保存密码之类的信息,因为 docker history 还是可以看到所有值的。
ARG WORK_DIR=/opt/aplications/docker-test

# springboot 项目一般使用jar外的config作为配置文件夹
RUN mkdir -p ${WORK_DIR}
RUN mkdir -p ${WORK_DIR}/config
# 设置当前dockerfile的默认工作目录,相当于linux的cd命令
WORKDIR ${WORK_DIR}

# ADD命令会将本机的文件复制至docker images中。同时单个文件复制可以修改文件名,也能使用*通配符复制多个文件。
# 此处路径以此dockerfile的位置为其实,本例dockerfile在子项目server的根目录,如果dockerfile在更深目录,可以使用../拼接目录。
ADD "build/libs/docker-test-1.0.jar" "docker-test.jar"
ADD "src/main/resources/log4j2.xml" "config/log4j2.xml"
ADD "src/main/resources/application.yml" "config/application.yml"
ADD "src/main/resources/application-${MY_PROFILE}.yml" "config/application-${MY_PROFILE}.yml"
# 本例需要使用springboot连接kafka并使用kerberos认证
ADD "src/main/resources/kafka-jaas.conf" "config/kafka-jaas.conf"
ADD "src/main/resources/user..keytab" "config/user.keytab"
ADD "src/main/resources/krb5.conf" "config/krb5.conf"
# 将bootJar 添加到镜像中根目录下 命令为 apprun.jar

# ADD "src/main/resources/hosts-${MY_PROFILE}" hosts # 从dockerfile修改host都会失败!!!

# 打印点日志
RUN java -version
RUN ls ${WORK_DIR}
RUN ls ${WORK_DIR}/config

# ENTRYPOINT 在容器启动后执行 java 命令来运行程序springboot的参数需要放在CMD中
ENTRYPOINT ["java","-jar", "/opt/aplications/docker-test/docker-test.jar"]
CMD ["--spring.profiles.active=${MY_PROFILE}"]

# ======= 其它的一些Dockerfile命令 ========== 这里我们没有用到不过还是提一下
#COPY package.json /usr/src/app/
#ADD 更高级的复制文件
#ADD 指令和 COPY 的格式和性质基本一致。但是在 COPY 基础上增加了一些功能。
#CMD 指令就是用于指定默认的容器主进程的启动命令的。
#ENV 设置环境变量
#HEALTHCHECK 健康检查
#EXPOSE 指令是声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务

构建&运行

直接在idea运行docker任务即可
idea的docker插件会运行构建docker image,并推送至docker 服务运行container。
可以到linux中docker ps -a查看任务运行状态,任务失败了也不要紧, docker logs container名称/id查看运行日志。
在这里插入图片描述
springboot和kafka配置
application.yml
此处log4j2.xml所在的config目录就是dockerfile中add后的config目录,即config目录也是docker内的springboot jar文件相对目录。

server:
  port: 8501

logging:
  config: config/log4j2.xml  # if linux: config/log4j2.xml, if win: server/src/test/resources/log4j2.xml
  level:
    org:
      apache:
        kafka: info
    root: info

kafka-jaas.conf
user.keytab所在的config目录也是docker内的springboot jar文件相对目录。

KafkaClient {
  com.sun.security.auth.module.Krb5LoginModule required
  useKeyTab=true
  useTicketCache=false
  keyTab="config/user.keytab"
  principal="user@XXXXX.COM"
  serviceName="kafka";
};

有一点需要注意,代码中使用最好绝对地址,可把相对路径转为绝对路径。

System.setProperty("java.security.krb5.conf", krb5Conf)
System.setProperty("java.security.auth.login.config", kafkaJaasConf)

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

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

相关文章

XDOJ 877 图的深度优先遍历

题目:图的深度优先遍历 问题描述 已知无向图的邻接矩阵,以该矩阵为基础,给出深度优先搜索遍历序列,并且给出该无向图的连通分量的个数。在遍历时,当有多个点可选时,优先选择编号小的顶点。(即…

大屏开源项目go-view二次开发1----环境搭建(C#)

最近公司要求做一个大屏的程序用于展示公司的产品,我以前也没有相关的经验,最糟糕的是公司没有UI设计的人员,领导就一句话要展示公司的产品,具体展示的内容细节也不知道,全凭借自己发挥。刚开始做时是用wpf做的&#x…

摆脱B端UI框架的桎梏,首先从布局开始

在 B 端开发中,UI 框架虽带来便利,但也可能形成桎梏。要摆脱这种束缚,首先从布局着手是个明智之举。传统的 B 端 UI 框架布局可能较为固定,缺乏灵活性。我们可以尝试创新的布局方式,如响应式设计,适应不同屏…

认识异常吧

在 Java 中,将程序执行过程中发生的不正常行为称为异常 。 异常的体系结构 1. Throwable : 是异常体系的顶层类,其派生出两个重要的子类 , Error(错误) 和 Exception(异常) 2. Error &…

Repo管理

文章目录 前言Repo介绍清单仓库清单仓库的组成 初始化Repo同步远程仓库Repo实际应用 前言 我们知道,Git是用来管理某一个仓库,那当一个项目用到了多个仓库时,怎么来同步管理这些仓库呢?这个时候就可以引入Repo管理。 Repo介绍 …

Spring Security6.3 自定义AuthorizationManager问题

项目环境: Springboot3.3.5, 对应的SpringFrameWork6.1,Security为6.3 问题:我想自定义AuthorizationManager接口实现类,在里面判断如果角色为amdin则放行请求; 在AdminAuthorizationManager类的check()方法中pass变量…

十二月第三周python

import tkinter as tk #安装图形窗口工具 import cv2 #处理视频工具 from tkinter import * #安装图形窗口工具 from PIL import Image, ImageTk#处理图形工具 roottk.Tk() #给工具起名字 root.title("子豪")#软件左上角名字 root.geometry("800x800500100&…

玉米叶病预测数据集,使用yolo,coco,voc格式人工标注,10046张原始图片,可识别叶枯病,普通锈病,灰叶斑病,健康的玉米叶

玉米叶病预测数据集,使用yolo,coco,voc格式人工标注,10046张原始图片,可识别叶枯病,普通锈病,灰叶斑病,健康的玉米叶 数据集分割 训练组87% 8790图片 有效集4% 419图片…

NAT网络地址转化技术

1.什么是NAT NAT技术是一种将自己内网的多个私有IP地址转换为一个公网IP进行访问互联网的一项技术,这个技术主要是用来解决IPv4地址不够的问题。 2.NAT技术的具体例子 如果我们用手机使用流量浏览一个网站,那么第一步手机会对这个域名进行DNS解析&#…

使用DuckDB 加载和清洗数据

DuckDB CLI是允许用户直接从命令行与DuckDB交互的工具。前文你看到了如何使用Python与DuckDB交互。但是,有时你只是想直接使用数据库—例如在创建新表、从不同数据源导入数据以及执行与数据库相关的任务时。在这种情况下,直接使用DuckDB CLI要有效得多。…

linux部署ansible自动化运维

ansible自动化运维 1,编写ansible的仓库(比赛已经安装,无需关注) 1、虚拟机右击---设置---添加---CD/DVD驱动器---完成---确定 2、将ansible.iso的光盘连接上(右下角呈绿色状态) 3、查看光盘挂载信息 df -h…

vue3-tp8-Element:对话框实现

效果 参考框架 Dialog 对话框 | Element Plus 具体实现 一、建立view页面 /src/views/TestView.vue 二、将路径写入路由 /src/router/index.js import { createRouter, createWebHistory } from vue-router import HomeView from ../views/HomeView.vueconst router create…

YOLOv11改进,YOLOv11添加DLKA-Attention可变形大核注意力,WACV2024 ,二次创新C3k2结构

摘要 作者引入了一种称为可变形大核注意力 (D-LKA Attention) 的新方法来增强医学图像分割。这种方法使用大型卷积内核有效地捕获体积上下文,避免了过多的计算需求。D-LKA Attention 还受益于可变形卷积,以适应不同的数据模式。 理论介绍 大核卷积(Large Kernel Convolu…

Python数据分析案例67——因子分析回归分析

背景 线性回归,主成分回归都做烂了,我之前的案例有很多这些模型,但是一直没写因子分析的回归案例,这个也是传统统计学流行的方法,在金融经济心理学等人文社科用得非常多。这个案例就演示一下python怎么做因子分析。 数…

FastAPI简介

FastAPI简介 一、FastAPI简介二、FastAPI安装2.1 使用pip安装FastAPI2.2 FastAPI的demo2.3 FastAPI的程序结构 三、装饰器请求方法四、用户请求4.1 路径参数4.1.1 单个路径参数4.1.2 多个路径参数4.1.3 固定路径和路径参数的冲突 4.2 查询参数4.3 默认参数4.4 可选参数 五、请求…

Django结合websocket实现分组的多人聊天

其他地方和上一篇大致相同,上一篇地址点击进入, 改动点1:在setting.py中最后再添加如下配置: # 多人聊天 CHANNEL_LAYERS {"default":{"BACKEND": "channels.layers.InMemoryChannelLayer"} }因此完整的se…

基础学习:(5)不同卷积:transposed convolution,deconvolution,dilated convolution

基础学习:(5)不同卷积 文章目录 基础学习:(5)不同卷积前言1 deconvlution transposed convolution2 对比2.1 Convolution animations2.2 Transposed convolution animations2.3 Dilated convolution 前言 …

Windows安装Jira

下载 Download Jira Data Center | Atlassian https://product-downloads.atlassian.com/software/jira/downloads/atlassian-jira-software-10.3.0-x64.exe 以管理员身份安装,否则弹出以下提醒 创建和配置MySQL数据库:参照 Connecting Jira applicat…

采用qL-MPC技术进行小型固定翼无人机的路径跟随控制

来自论文"Predictive Path-Following Control for Fixed-Wing UAVs Using the qLMPC Framework in the Presence of Wind Disturbances" 控制架构 采用的是 ULTRA-Extra无人机,相关参数如下: 这里用于guidance law的无人机运动学模型为&#…

计算机毕设-基于springboot的青少年心理健康教育网站的设计与实现(附源码+lw+ppt+开题报告)

博主介绍:✌多个项目实战经验、多个大型网购商城开发经验、在某机构指导学员上千名、专注于本行业领域✌ 技术范围:Java实战项目、Python实战项目、微信小程序/安卓实战项目、爬虫大数据实战项目、Nodejs实战项目、PHP实战项目、.NET实战项目、Golang实战…