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.hqwc.cn/news/438978.html

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

相关文章

前端_关于CSS中外边距塌陷问题

问题描述&#xff1a; 当子级块级元素修改带动父级块级元素整体向下移动 我们希望当自级块级元素修改时&#xff0c;父级元素保持不动&#xff0c;解决方法有三个: 原代码&#xff1a; 方案一&#xff1a;为父级元素添加一个内边距 方案二&#xff1a;为父级元素添加overflo…

【机器学习300问】20、什么是神经网络?和深度学习什么关系?

在学习深度学习的相关知识之前&#xff0c;我们首先得了解什么是神经网络&#xff0c;解开神经网络的神秘面纱后&#xff0c;什么是深度学习的问题也就迎刃而解。我依旧会采用我习惯的方式&#xff1a;先给出例子直观理解&#xff0c;在给出定义深入理解&#xff0c;最后在实际…

MySQL行格式原理深度解析

MySQL中的行格式&#xff08;Row Format&#xff09;是指存储在数据库表中的数据的物理格式。它决定了数据是如何在磁盘上存储的&#xff0c;以及如何在查询时被读取和解析的。MySQL支持多种行格式&#xff0c;每种格式都有其特定的优点和适用场景。 一、前言 MySQL被分为Ser…

opencv——将2张图片合并

效果演示&#xff1a; 带有绿幕的图片的狮子提取出来&#xff0c;放到另一种风景图片里&#xff01; 1. 首先我们要先口出绿色绿幕&#xff0c;比如&#xff1a; 这里将绿色绿色绿幕先转为HSV&#xff0c;通过修改颜色的明暗度&#xff0c;抠出狮子的轮廓。 代码 &#xff1a…

麒麟系统—— openKylin 安装 Maven

麒麟系统—— openKylin 安装 Maven 一、准备工作1. 确保麒麟系统 openKylin 已经安装完毕。2. 确保 java 已经安装完毕 二、下载Maven三、解压 Maven 与环境配置解压配置环境变量验证 最终&#xff1a;介绍配置的其他参数使用 本文将分享如何在麒麟操作系统 openKylin 上安装…

RK3326系统中集成思必驰音频适配文件

前言 最近本人在RK3326 8.1系统上做定制化&#xff0c;需要对接思必驰平台音频相关接口&#xff0c;同时在系统中集成音频适配文件&#xff0c;踩了很多坑&#xff0c;写这篇文章记录一下。 一、为什么要集成音频适配文件&#xff1f; 当APP&#xff08;集成…

MS7336MA高清 HD/全高清 FHD 可选择视频运放与视频同轴线控解码

产品简述 MS7336MA 是一颗集成单通道视频放大器与视频同轴线控解 码为一体的芯片&#xff0c;它内部集成 6dB 增益轨到轨输出驱动器以及 10 阶滤波器&#xff0c;允许同一个输入信号在 -3dB 带宽 35MHz 和 55MHz 之间进行选择控制。视频同轴线控解码内部集成一颗高…

PyFlink使用教程,Flink,Python,Java

环境准备 环境要求 Java 11 Python 3.7, 3.8, 3.9 or 3.10文档&#xff1a;https://nightlies.apache.org/flink/flink-docs-release-1.17/zh/docs/dev/python/installation/ 打开 Anaconda3 Prompt > java -version java version "11.0.22" 2024-01-16 LTS J…

数据结构(队列Queue)

文章目录 一、队列1、队列的定义2、队列的顺序实现2.1、初始化2.2、入队2.3、出队2.4、查找2.5、判断队列 满/空 3、队列的链式实现3.1、初始化3.2、入队3.3、出队 4、双端队列 一、队列 1、队列的定义 2、队列的顺序实现 2.1、初始化 //初始化 void InitQueue(SqQueue &Q…

mysql之基本查询

基本查询 一、SELECT 查询语句 一、SELECT 查询语句 查询所有列 1 SELECT *FORM emp;查询指定字段 SELECT empno,ename,job FROM emp;给字段取别名 SELECT empno 员工编号 FROM emp; SELECT empno 员工编号,ename 姓名,job 岗位 FROM emp; SELECT empno AS 员工编号,ename …

Python爬虫解析库安装

解析库的安装 抓取网页代码之后&#xff0c;下一步就是从网页中提取信息。提取信息的方式有多种多样&#xff0c;可以使用正则来提取&#xff0c;但是写起来相对比较烦琐。这里还有许多强大的解析库&#xff0c;如 lxml、Beautiful Soup、pyquery 等。此外&#xff0c;还提供了…

【开源】JAVA+Vue.js实现电子元器件管理系统

目录 一、摘要1.1 项目简介1.2 项目录屏 二、研究内容三、界面展示3.1 登录&注册&主页3.2 元器件单位模块3.3 元器件仓库模块3.4 元器件供应商模块3.5 元器件品类模块3.6 元器件明细模块3.7 元器件类型模块3.8 元器件采购模块3.9 元器件领用模块3.10 系统基础模块 四、…