idea docker 内网应用实践

文章目录

  • 前言
  • 一、服务器端
    • 1.1 离线安装docker
    • 1.2 开启docker远程访问
    • 1.3 制作对应jdk镜像
      • 1.3.1 下载jdk17
      • 1.3.2 Dockerfile 制作jdk17镜像
      • 1.3.3 镜像导出
      • 1.3.4 服务器引入镜像
  • 二、Idea 配置
    • 2.1 Dockerfile
    • 2.2 pom 引入docker插件
    • 2.3 idea docker插件配置
    • 2.4 打包镜像上传
    • 2.5 docker启动服务容器
  • 总结
    • 1. Dockerfile 制作jdk17镜像测试问题
    • 2. 镜像从vm导入内网服务器后image REPOSITORY和TAG都是none
    • 3. 目前的问题打包的镜像太大
    • 4. jdk17的基础镜像不能在宿主机安装jdk代替,宿主机和docker容器是隔离的
    • 5. nacos 数据库等中间件可以在宿主机或内网其他服务器部署,可以用,部署到容器内仍然可以访问到
  • 后续


前言

基于内网环境搭建

一、服务器端

1.1 离线安装docker

参考第十一章 docker swarm集群部署 第一节

1.2 开启docker远程访问

修改vi /etc/systemd/system/docker.service
ExecStart 修改如下:

ExecStart=/usr/bin/dockerd  --bip=172.20.1.0/16  -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

重新加载配置systemctl daemon-reload
重启 Dockerservice docker restart

1.3 制作对应jdk镜像

由于服务器无法访问外网,我们的应用又依赖于jdk17,那么需要制作一个jdk17的基础镜像。

1.3.1 下载jdk17

https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz

1.3.2 Dockerfile 制作jdk17镜像

本地启动vm,远程虚拟机。/home下导入上一步下载的jdk17的包,并创建Dockerfile文件,内容如下:

FROM docker.io/ansible/centos7-ansible
#JDK_FILE 本地包名称
ENV JDK_FILE=jdk-17_linux-x64_bin.tar.gz
#jdk目录
ENV JAVA_DIR=/usr/local/java
RUN mkdir -p $JAVA_DIR 
# 配置jdk
COPY ./$JDK_FILE $JAVA_DIR
# RUN 构建镜像时需要运行的Linux命令、CMD #指定容器启动时要运行的命令
RUN tar -zxvf $JAVA_DIR/$JDK_FILE -C $JAVA_DIR && rm -rf $JAVA_DIR/$JDK_FILE
# 设置环境变量
ENV JAVA_HOME=$JAVA_DIR/jdk-17.0.10
ENV CLASSPATH=.:$JAVA_HOME/lib:$CLASSPATH
ENV PATH=$PATH:$JAVA_HOME/bin
#RUN source /etc/profile && java -version
CMD ["/bin/bash","-c","source /etc/profile","java","-version"]

注意修改JDK_FILE为你的jdk文件名
构建镜像:

cd /home
#最后的. 表示从当前目录查找Dockerfile
docker build -t cuzue-jdk:17 .

本地运行:

docker run --rm cuzue-jdk:17 java --version

在这里插入图片描述

1.3.3 镜像导出

vm服务器上导出jdk17镜像到当前目录

docker save 【镜像id】 -o jdk17.tar

1.3.4 服务器引入镜像

在内网服务器引入镜像

  1. 上一步导出的镜像下载后上传到内网服务器
  2. docker load -i jdk17.tar
  3. docker images 测试 docker run --rm cuzue-jdk:17 java --version

二、Idea 配置

2.1 Dockerfile

idea 项目创建Dockerfile文件,放到项目根目录(pom.xml同级别),内容如下:

FROM cuzue-jdk:17
#MAINTAINER cuzue 991446772@qq.com
VOLUME /tmp
COPY target/*.jar file.jar
ENV SERVER_PORT="8196" XMS="1024m" XMX="1024m" NACOS_CONFIG_ADDR="nacos.server:8848" NACOS_CONFIG_SPA="cuzue" NACOS_DISCOVERY_ADDR="nacos.server:8848" NACOS_DISCOVERY_SPA="cuzue" MAIN_CLASS="com.cuzue.file.FileServerApplication"
ENTRYPOINT java -server -Xms$XMS -Xmx$XMX -Dserver.port=$SERVER_PORT -Dloader.path=lib -Duser.timezone=Asia/Shanghai -Dspring.profiles.active=dev -Dspring.cloud.nacos.config.server-addr=$NACOS_CONFIG_ADDR -Dspring.cloud.nacos.config.namespace=$NACOS_CONFIG_SPA -Dspring.cloud.nacos.discovery.server-addr=$NACOS_DISCOVERY_ADDR -Dspring.cloud.nacos.discovery.namespace=$NACOS_DISCOVERY_SPA -jar file.jar $MAIN_CLASS

Dockerfile 的存放位置可调整,需要和pom内的配置对应即可!

2.2 pom 引入docker插件

<plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>1.2.2</version><!--将插件绑定在某个phase执行--><executions><execution><id>build-image</id><!--将插件绑定在package这个phase上。也就是说,用户只需执行mvn package ,就会自动执行mvn docker:build--><phase>package</phase><goals><goal>build</goal></goals></execution></executions><configuration><!--指定生成的镜像名,这里是我们的项目名--><imageName>${project.artifactId}</imageName><!--指定标签 这里指定的是镜像的版本,我们默认版本是latest--><imageTags><imageTag>latest</imageTag></imageTags><!-- 指定我们项目中Dockerfile文件的路径--><dockerDirectory>${project.basedir}</dockerDirectory><!--指定远程docker 地址--><dockerHost>http://你的服务器ip:2375</dockerHost><!-- 这里是复制 jar 包到 docker 容器指定目录配置 --><resources><resource><targetPath>/</targetPath><!--jar包所在的路径  此处配置的即对应项目中target目录--><directory>${project.build.directory}</directory><!-- 需要包含的 jar包 ,这里对应的是 Dockerfile中添加的文件名 --><include>${project.build.finalName}.jar</include></resource></resources></configuration>
</plugin>

2.3 idea docker插件配置

在这里插入图片描述

2.4 打包镜像上传

package时会自动打包镜像上传到服务器的docker中,打包成功后可在服务器查看image是否存在

maven clean package

在这里插入图片描述

2.5 docker启动服务容器

打包好镜像后,idea的docker组件可以看到对应镜像,右键创建容器
在这里插入图片描述
编辑容器名称和端口映射,run起来就ok了。
在这里插入图片描述

总结

1. Dockerfile 制作jdk17镜像测试问题

测试时启动镜像发现docker ps 看不到对应的启动容器,不必理会。

2. 镜像从vm导入内网服务器后image REPOSITORY和TAG都是none

docker tag <image_id> <repository>:<tag>
docker tag <image_id> cuzue-jdk:17

3. 目前的问题打包的镜像太大

jar包88M 打包镜像1G,主要是因为包含了基础镜像jdk17
解决参考:https://zhuanlan.zhihu.com/p/632319956,目前还未实践
当前状态:镜像包大,打包上传过程慢,idea docker 鸡肋,如果能优化速度还是不错的

4. jdk17的基础镜像不能在宿主机安装jdk代替,宿主机和docker容器是隔离的

5. nacos 数据库等中间件可以在宿主机或内网其他服务器部署,可以用,部署到容器内仍然可以访问到

后续

找到一个精简的jdk镜像 123MB,jdk17-alpine


在这里插入图片描述

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

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

相关文章

第17次修改了可删除可持久保存的前端html备忘录:增加年月日星期,增加倒计时,更改保存区名称可以多个备忘录保存不一样的信息,匹配背景主题:现代深色

第17次修改了可删除可持久保存的前端html备忘录&#xff1a;增加年月日星期&#xff0c;增加倒计时&#xff0c;更改保存区名称可以多个备忘录保存不一样的信息&#xff0c;匹配背景主题&#xff1a;现代深色 备忘录代码&#xff1a; <!DOCTYPE html> <html lang&quo…

前端常见的栈溢出报错

什么是栈溢出&#xff1f; 在前端开发中&#xff0c;栈溢出是指JavaScript引擎执行代码时&#xff0c;调用栈&#xff08;call stack&#xff09;变得太大&#xff0c;超过了浏览器或JavaScript引擎所分配的栈空间&#xff0c;从而导致栈溢出错误。调用栈是一种数据结构&#x…

【Spark系列2】Spark编程模型RDD

RDD概述 RDD最初的概述来源于一片论文-伯克利实验室的Resilient Distributed Datasets&#xff1a;A Fault-Tolerant Abstraction for In-Memory Cluster Computing。这篇论文奠定了RDD基本功能的思想 RDD实际为Resilient Distribution Datasets的简称&#xff0c;意为弹性分…

git clone常见问题一览及解决方法

在使用Ubuntu下&#xff0c;终端运行git clone命令时会遇见许多问题&#xff0c;本文主要针对一些常见的问题进行整理。关于换源问题&#xff0c;推荐使用小鱼的一键换源。 1.git clone 速度过慢 1.1 魔法 这个方法不做过多赘述&#xff0c;ubuntu下个人使用发现体验良好&am…

matlab中的图窗属性和坐标轴的属性

图窗的Position和Outerposition Position 指定窗口的尺寸和窗口在屏幕中的位置。 Outerposition 指定窗口外轮廓的大小和位置。 两者都是用一个4维向量来定义&#xff0c;格式为[左 底 宽 高]。 可通过set函数修改Position和Outerposition&#xff0c;如下&#xff1a;在屏幕左…

【2024全网最详细】Google 搜索命令终极指南

&#x1f482; 个人网站:【 海拥】【神级代码资源网站】【办公神器】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流的小伙伴&#xff0c;请点击【全栈技术交流群】 你是否尝试过使用 Google 搜索作为免费的 SEO …

Flink 读取 Kafka 消息写入 Hudi 表无报错但没有写入任何记录的解决方法

博主历时三年精心创作的《大数据平台架构与原型实现:数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行,点击《重磅推荐:建大数据平台太难了!给我发个工程原型吧!》了解图书详情,京东购书链接:https://item.jd.com/12677623.html,扫描左侧二维…

设计一个支持并发的前端缓存接口

文章目录 一、概述二、并发缓存2.1、问题2.2、思考2.3、优化 三、总结四、最后 一、概述 缓存池不过就是一个map&#xff0c;存储接口数据的地方&#xff0c;将接口的路径和参数拼到一块作为key&#xff0c;数据作为value存起来罢了&#xff0c;这个咱谁都会。 const cacheMa…

pnpm tauri icon 一键转换 icon

在使用 Electron、Tauri 等框架开发桌面应用时&#xff0c;需要为应用生成不同平台的图标&#xff0c;如&#xff1a;MacOS 中的 icon.icns、Windows 中的 icon.ico、Linux 中的 *.png 等类型图标&#xff0c;这里介绍一种简单快捷一键转换图标的方法。 准备工作 nodejs 环境n…

ElasticSearch 应用实践 笔记

概述 介绍 ES 是一个开源的高扩展的分布式全文搜索引擎&#xff0c;是整个Elastic Stack技术栈的核心。它可以近乎实时的存储&#xff0c;检索数据&#xff1b;本身扩展性很好&#xff0c;可以扩展到上百台服务器&#xff0c;处理PB级别的数据。ElasticSearch的底层是开源库Lu…

c JPEG ZRL (15,0) 的问题

问题&#xff1a;如果量化表全为64个1&#xff0c;编码图片显示非常乱。如果用压缩比较大的量化表&#xff0c;显示基本正常。如果编码过程中不处理ZRL&#xff0c;图片正常。此问题一直没有排除。 下图为两张量化表全为64个1的情况下加了&#xff08;15,0&#xff09;后的不正…

[Bug] [OpenAI] [TypeError: fetch failed] { cause: [Error: AggregateError] }

[Bug] [OpenAI] [TypeError: fetch failed] { cause: [Error: AggregateError] } ubuntu20 win10 edge浏览器访问 服务器部署 页面打开后想使用chatgpt报错了 rootcoal-pasi1cmp:/www/wwwroot/ChatGPT-Next-Web# PORT3000 yarn start yarn run v1.22.19 warning package.json:…

实现vue3响应式系统核心-shallowReactive

简介 今天来实现一下 shallowReactive 这个 API。 reactive函数是一个深响应&#xff0c;当你取出的值为对象类型&#xff0c;需要再次调用 reactive进行响应式处理。很明显我们目前的代码是一个浅响应&#xff0c;即 只代理了对象的第一层&#xff0c;也就是 shallowReactiv…

【方法论】费曼学习方法

费曼学习方法是由诺贝尔物理学奖得主理查德费曼提出的一种学习方法。这种方法强调通过将所学的知识以自己的方式解释给别人来提高学习效果。 费曼学习方法的步骤如下&#xff1a; 选择一个概念&#xff1a;选择一个要学习的概念或主题。 理解和学习&#xff1a;用自己的方式学…

TCP四次握手

TCP 协议在关闭连接时&#xff0c;需要进行四次挥手的过程&#xff0c;主要是为了确保客户端和服务器都能正确地关闭连接。 # 执行流程 四次挥手的具体流程如下&#xff1a; 客户端发送 FIN 包&#xff1a;客户端发送一个 FIN 包&#xff0c;其中 FIN 标识位为 1&#xff0c…

MATLAB - 仿真单摆的周期性摆动

系列文章目录 前言 本例演示如何使用 Symbolic Math Toolbox™ 模拟单摆的运动。推导摆的运动方程&#xff0c;然后对小角度进行分析求解&#xff0c;对任意角度进行数值求解。 一、步骤 1&#xff1a;推导运动方程 摆是一个遵循微分方程的简单机械系统。摆最初静止在垂直位置…

阿赵UE学习笔记——14、LOD

阿赵UE学习笔记目录   大家好&#xff0c;我是阿赵。   继续学习虚幻引擎的用法。这次看看虚幻引擎的Level Of Detail(LOD)的用法。 一、测试场景准备 用植物系统&#xff0c;在地形上面刷了好多草&#xff1a; 这个时候看一下网格&#xff0c;会发现网格比较多和密集。 …

Leetcode第382场周赛

Leetcode第382场周赛 本人水平有限&#xff0c;只做前三道。 一、按键变更的次数 给你一个下标从 0 开始的字符串 s &#xff0c;该字符串由用户输入。按键变更的定义是&#xff1a;使用与上次使用的按键不同的键。例如 s “ab” 表示按键变更一次&#xff0c;而 s “bBBb”…

tableau绘制雷达图

目标图形: 1. 数据准备 &#xff08;1&#xff09;原始数据 你要进行用雷达图比较的对象的各指标的数据。 (2) 处理后数据 在原数据的基础上添加对各指标进行区间的划分数据&#xff0c;也就是层级的划分。 2. 操作步骤 &#xff08;1&#xff09;数据转化 转化前&#xf…

Logstash 7.7.1版本安装系统梳理

前言 上一篇文章介绍了 《ElasticSearch7.7.1集群搭建 & Kibana安装》&#xff0c;今天说一下 Logstash的安卓和配置&#xff1b; Logstash是一个开源的数据收集引擎&#xff0c;具有实时管道功能。它可以动态地将来自不同数据源的数据统一起来&#xff0c;并将数据标准化…