当前位置: 首页 > news >正文

idea使用docker将Java项目生成镜像并使用

1:开启docker 远程访问

  • 使用 vim 编辑docker服务配置文件

vim /lib/systemd/system/docker.service

[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock 
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutStartSec=0
RestartSec=2
Restart=always

修改 ExecStart 添加 -H tcp://0.0.0.0:2375

[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375 
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutStartSec=0
RestartSec=2
Restart=always

重新加载docker配置并重启服务

systemctl daemon-reload && systemctl restart docker

然后直接在命令行客户端输入如下命令进行测试,IP地址改为自己的

curl http://192.168.56.20:2375/version

出现如下信息则代表修改Docker服务设置远程访问成功。

{"Platform": {"Name": "Docker Engine - Community"},"Components": [{"Name": "Engine","Version": "26.0.0","Details": {"ApiVersion": "1.45","Arch": "amd64","BuildTime": "2024-03-20T15:17:48.000000000+00:00","Experimental": "false","GitCommit": "8b79278","GoVersion": "go1.21.8","KernelVersion": "5.15.0-101-generic","MinAPIVersion": "1.24","Os": "linux"}},{"Name": "containerd","Version": "1.6.28","Details": {"GitCommit": "ae07eda36dd25f8a1b98dfbf587313b99c0190bb"}},{"Name": "runc","Version": "1.1.12","Details": {"GitCommit": "v1.1.12-0-g51d5e94"}},{"Name": "docker-init","Version": "0.19.0","Details": {"GitCommit": "de40ad0"}}],"Version": "26.0.0","ApiVersion": "1.45","MinAPIVersion": "1.24","GitCommit": "8b79278","GoVersion": "go1.21.8","Os": "linux","Arch": "amd64","KernelVersion": "5.15.0-101-generic","BuildTime": "2024-03-20T15:17:48.000000000+00:00"
}

特别注意的点: 完全开放Docker对外访问权限有可能会遭到别人攻击,这是很不安全的,只要别人知道你的服务器地址就能够随意连接你的Docker服务,而不需要任何认证,因此,完全开放只推荐自己在内网使用,不推荐在云服务器上直接完全开放。

在使用 docker info 命令时,会报警告

[DEPRECATION NOTICE]: API is accessible on http://0.0.0.0:2375 without encryption.Access to the remote API is equivalent to root access on the host. Referto the 'Docker daemon attack surface' section in the documentation formore information: https://docs.docker.com/go/attack-surface/
In future versions this will be a hard failure preventing the daemon from starting! Learn more at: https://docs.docker.com/go/api-security/

在未来的版本中,这将是一个阻止守护进程启动的硬故障,

那就暂时先不管。

2:在idea安装docker插件在idea安装docker插件

idea在2023.3.3版本已经内置了docker,其他版本自行下载即可
在idea安装docker插件在idea安装docker插件

3:在项目下创建Dockerfile文件(与pom.xml同目录)

这里最好放在pom.xml同级目录下,指定文件方便,如果单独放一个文件夹,指定路径的jar会报找不到,需要将打包的jar手动丢进去。
在这里插入图片描述

Dockerfile文件内容

#设置引用的jdk环境容器
FROM jdk:17
#FROM centos7-java17:latest
LABEL version="1.0"
LABEL description=" hello world docker "
#目录是终端默认在此目录下
WORKDIR /app#如果是到文件夹后面必须加上“/”,不然会找不到文件,./代表当前目录即是/app
COPY target/helloTest-0.0.1-SNAPSHOT.jar helloTest.jar
#开机执行
ENTRYPOINT ["java", "-jar", "helloTest.jar"]

6:Dockerfile文件FROM位置的绿色双箭头,去配置链接docker服务

在这里插入图片描述
在这里插入图片描述

Dockerfile : 指定 Dockerfile文件地址
Image tag : 设置上传到docker的镜像名称
Container name: 设置容器名称
Bind ports: 配置的端口绑定。例如,如果您已经在Docker主机端口5432上运行PostgreSQL,则可以将主机上的端口5433映射到容器内的5432,如前面的屏幕截图所示。这将使PostgreSQL在容器内运行,通过主机上的端口5433可访问。

在这里插入图片描述

点击 + 号,创建一个新连接

在这里插入图片描述

选择 TCP socket 连接,
输入 服务器的IP地址 + 2375 端口号
tcp://192.168.204.143:2375

输入后,idea 会立即连接,如果成功,会显示
Connection successful
在这里插入图片描述

点击OK保存后,点击RUN 运行。
在这里插入图片描述

这里显示的 Step ,是在dockerfile中写的命令,命令有几个,Step 就有几个。
正常 Step 步骤执行完后,打包就OK 了。

在这里插入图片描述
随后会立即启动

在这里插入图片描述
显示 hello world 表示启动成功

从浏览器访问测试

http://192.168.204.143:8990/

在这里插入图片描述
再看控制台
在这里插入图片描述
执行controller 方法成功。

-----end-----

后记:

我在pom.xml上加了 docker的插件,但是并不好用,实际上还是要单独提交。

<!-- docker插件--><plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>${docker.version}</version><configuration><!-- 远程Docker的地址 --><dockerHost>http://192.168.204.142:2375</dockerHost><!-- 镜像名称、前缀、项目名 --><imageName>${docker.image.prefix}</imageName><!-- Dockerfile的位置 --><dockerDirectory>${project.basedir}/build</dockerDirectory><resources><resource><targetPath>/</targetPath><!-- 表示的target文件夹 --><directory>${project.build.directory}</directory><!-- 表示打出来的JAR包--><include>${project.build.finalName}.jar</include></resource></resources></configuration></plugin>

只是打了jar,。

测试项目地址

https://github.com/yanzhao77/helloTest

参考资料:

1,win10 版本的docker
idea使用docker生成镜像(打包镜像,导入镜像,导出镜像)
2,
Docker安全开放远程访问连接权限
3,
Docker镜像和容器的基本命令操作
4,
IDEA 打包docker镜像(以打包Jdk8为例)

相关文章:

idea使用docker将Java项目生成镜像并使用

1&#xff1a;开启docker 远程访问 使用 vim 编辑docker服务配置文件 vim /lib/systemd/system/docker.service [Service] Typenotify # the default is not to use systemd for cgroups because the delegate issues still # exists and systemd currently does not suppor…...

clickhouse sql使用2

1、多条件选择 multiIf(cond_1, then_1, cond_2, then_2, …, else) select multiIf(true,0,1) 当第一条件不成立看第二条件判断 第一个参数条件参数&#xff0c;第二参数条件成立时走 2、clickhouse 在计算时候长出现NaN和Infinity异常处理 isNaN()和isInfinite()处理...

jrebel

JRebel最新版&#xff08;2024.1.2&#xff09;在线激活_jrebel 激活 2024-CSDN博客 JRebelXRebel热部署插件激活支持IDEA2023.1_jrebel and xrebel 激活-CSDN博客...

【单片机家电产品学习记录--红外线】

单片机家电产品学习记录–红外线 红外手势驱动电路&#xff0c;&#xff08;手势控制的LED灯&#xff09; 原理 通过红外线对管&#xff0c;IC搭建的电路&#xff0c;实现灯模式转换。 手势控制灯模式转换&#xff0c;详细说明 转载 1《三色调光LED台灯电路》&#xff0c…...

Java入门教程||Java Applet基础

Java Applet基础 applet是一种Java程序。它一般运行在支持Java的Web浏览器内。因为它有完整的Java API支持,所以applet是一个全功能的Java应用程序。 如下所示是独立的Java应用程序和applet程序之间重要的不同&#xff1a; Java中applet类继承了 java.applet.Applet类Applet…...

Python可视化概率统计和聚类学习分析生物指纹

&#x1f3af;要点 &#x1f3af;使用Jupyter Notebook执行Dash 应用&#xff0c;确定Dash输入输出&#xff0c;设计回调函数&#xff0c;Dash应用中包含函数。&#x1f3af;使用Plotly绘图工具&#xff1a;配置图对象选项&#xff0c;​将图转换为HTML、图像。使用数据集绘图…...

yolo v8 教程(不出5行代码让你学会)

Solving environment: failedPackagesNotFoundError: The following packages are not available from current channels:- python3.8https://github.com/ultralytics 下滑来到 先来介绍为什么写这篇博客&#xff0c; 一. 是我之前的yolov5的博客挺多人访问的&#xff0c;但是…...

MongoDB集合结构分析工具Variety

工具下载地址&#xff1a;GitHub - variety/variety: Variety: a MongoDB Schema Analyzer 对于Mongo这种结构松散的数据库来说&#xff0c;如果想探查某个集合的结构&#xff0c;通过其本身提供的功能很不方便&#xff0c;通过调研发现一个很轻便的工具--variety&#xff0c;…...

详解Qt中访问数据库

在Qt中访问数据库涉及到几个关键步骤&#xff0c;主要包括加载数据库驱动、建立数据库连接、执行SQL语句、读取结果等。下面将详细介绍这些步骤&#xff0c;并给出一个简单的示例&#xff0c;这里假设使用的是SQLite数据库。 记得首先在pro文件中添加QT sql 1. 加载数据库驱动…...

《QT实用小工具·三》偏3D风格的异型窗体

1、概述 源码放在文章末尾 可以在窗体中点击鼠标左键进行图片切换&#xff0c;项目提供了一些图片素材&#xff0c;整体风格偏向于3D类型&#xff0c;也可以根据需求自己放置不同的图片。 下面是demo演示&#xff1a; 项目部分代码如下所示&#xff1a; 头文件部分&#xff…...

如何优化TCP?TCP的可靠传输机制是什么?

在网络世界中&#xff0c;传输层协议扮演着至关重要的角色&#xff0c;特别是TCP协议&#xff0c;以其可靠的数据传输特性而广受青睐。然而&#xff0c;随着网络的发展和数据量的激增&#xff0c;传统的TCP协议在效率方面遭遇了挑战。小编将深入分析TCP的可靠性传输机制&#x…...

DFS(基础,回溯,剪枝,记忆化)搜索

DFS基础 DFS(深度优先搜索) 基于递归求解问题&#xff0c;而针对搜索的过程 对于问题的介入状态叫初始状态&#xff0c;要求的状态叫目标状态 这里的搜索就是对实时产生的状态进行分析检测&#xff0c;直到得到一个目标状态或符合要求的最佳状态为止。对于实时产生新的状态…...

基于Scala开发Spark ML的ALS推荐模型实战

推荐系统&#xff0c;广泛应用到电商&#xff0c;营销行业。本文通过Scala&#xff0c;开发Spark ML的ALS算法训练推荐模型&#xff0c;用于电影评分预测推荐。 算法简介 ALS算法是Spark ML中实现协同过滤的矩阵分解方法。 ALS&#xff0c;即交替最小二乘法&#xff08;Alte…...

Go语言和Java编程语言的主要区别

目录 1.设计理念&#xff1a; 2.语法&#xff1a; 3.性能&#xff1a; 4.并发性&#xff1a; 5.内存管理&#xff1a; 6.标准库&#xff1a; 7.社区和支持&#xff1a; 8.应用领域&#xff1a; Go&#xff08;也称为Golang&#xff09;和Java是两种不同的编程语言&…...

【TypeScript系列】与其它构建工具整合

与其它构建工具整合 构建工具 BabelBrowserifyDuoGruntGulpJspmWebpackMSBuildNuGet Babel 安装 npm install babel/cli babel/core babel/preset-typescript --save-dev.babelrc {"presets": ["babel/preset-typescript"] }使用命令行工具 ./node_…...

Java | Leetcode Java题解之第12题整数转罗马数字

题解&#xff1a; 题解&#xff1a; class Solution {String[] thousands {"", "M", "MM", "MMM"};String[] hundreds {"", "C", "CC", "CCC", "CD", "D", "DC…...

哈佛大学商业评论 --- 第五篇:智能眼镜之战

AR将全面融入公司发展战略&#xff01; AR将成为人类和机器之间的新接口&#xff01; AR将成为人类的关键技术之一&#xff01; 请将此文转发给您的老板&#xff01; --- 专题作者&#xff1a;Michael E.Porter和James E.Heppelmann 虽然物理世界是三维的&#xff0c;但大多…...

paddlepaddle模型转换onnx指导文档

一、检查本机cuda版本 1、右键找到invdia控制面板 2、找到系统信息 3、点开“组件”选项卡&#xff0c; 可以看到cuda版本&#xff0c;我们这里是cuda11.7 cuda驱动版本为516.94 二、安装paddlepaddle环境 1、获取pip安装命令 &#xff0c;我们到paddlepaddle官网&#xff…...

图像处理与视觉感知---期末复习重点(6)

文章目录 一、图像分割二、间断检测2.1 概述2.2 点检测2.3 线检测2.4 边缘检测 三、边缘连接3.1 概述3.2 Hough变换3.3 例子3.4 Hough变换的具体步骤3.5 Hough变换的法线表示形式3.6 Hough变换的扩展 四、阈值处理4.1 概述4.2 计算基本全局阈值算法4.3 自适应阈值 五、基于区域…...

git 如何删除本地和远程分支

删除本地分支 确认当前分支&#xff1a;首先&#xff0c;确保你没有在要删除的分支上。你可以通过运行git branch命令来查看当前的分支。 切换分支&#xff1a;如果你在要删除的分支上&#xff0c;需要先切换到另一个分支。例如&#xff0c;切换到main分支&#xff0c;可以使用…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...