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


在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

UE5在VisualStudio升级后产生C++无法编译的问题

往期的虚幻引擎项目在VS更新后&#xff0c;编译时会报错&#xff0c;这一般出现在VS升级之后&#xff0c;UE对于VC的编译器定位没有更新导致&#xff1b; 有出现如下问题&#xff1a; 问题1&#xff1a; Running I:/EPCI/Epic Games/UE_5.3/Engine/Build/BatchFiles/Build.ba…

Python采集微博评论数据,让评论告诉我们最近热议话题

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 环境使用: Python 3.10 Pycharm 模块使用: import requests >>> pip install requests import csv 模块安装&#xff1a; win R 输入cmd 输入安…

echarts option series smooth

echarts option series smooth 平滑处理 smooth&#xff1a;0.3 echarts_04_line.html <!DOCTYPE html> <html lang"en"><head> <meta charset"utf-8"> <title></title> </head><body><div id&quo…

蓝桥杯省赛无忧 课件51 第6次学长直播带练配套课件

01 最小的或运算 02 简单的异或难题 03 出列 04 异或森林 05 位移 06 笨笨的机器人 07 迷失的数 08 最大通过数

0128-2-keep-alive组件

&#x1f4bb;1、keep-alive是什么&#xff1f; keep-alive是Vue内置的一个组件&#xff0c;可以使被包含的组件保留状态&#xff0c;避免被重新渲染&#xff01;可以理解成防弹衣&#x1f9e5;; 包含在keep-alive里面的组件&#xff0c;所有路径匹配到的视图都会被缓存。 <…

Python字符串常用操作

在Python编程中&#xff0c;字符串是一种非常重要的数据类型&#xff0c;常常用于存储文本数据、处理文件内容以及进行各种文本处理操作。本文将介绍Python中字符串的常用操作&#xff0c;包括字符串的创建、连接、切片、查找、替换等操作&#xff0c;希望能够帮助读者更好地理…

探索ESP32 C++ OOP开发:与传统面向过程编程的比较

探索ESP32 OOP开发&#xff1a;与传统面向过程编程的比较 在嵌入式系统开发中&#xff0c;ESP32是一个强大的平台&#xff0c;可以应用于各种项目和应用场景。在编写ESP32代码时&#xff0c;我们可以选择使用面向对象编程&#xff08;OOP&#xff09;的方法&#xff0c;将代码…

学术交流、论文检索;2024年土木工程与城市建设国际会议(ICCEUC 2024)

2024年土木工程与城市建设国际会议(ICCEUC 2024) 2024 International Conference on Civil Engineering and Urban Construction(ICCEUC 2024) 数据库&#xff1a;EI,CPCI,CNKI,Google Scholar等检索 一、【会议简介】 2024年土木工程与城市建设国际会议(ICCEUC 2024)将在上海盛…

防御保护--智能选路

目录 就近选路 策略选路--PBR DSCP优先级 智能选路--全局路由策略 1.基于链路带宽的负载分担 2.基于链路质量进行负载分担 3.基于链路权重进行负载分担 4.基于链路优先级的主备备份 ​编辑 DNS透明代理 就近选路 我们希望在访问不同运营商服务器时&#xff0c;通过对…

堆和堆排序【数据结构】

目录 一、堆1. 堆的存储定义2. 初始化堆3. 销毁堆4. 堆的插入向上调整算法 5. 堆的删除向下调整算法 6. 获取堆顶数据7. 获取堆的数据个数8. 堆的判空 二、Gif演示三、 堆排序1. 堆排序(1) 建大堆(2) 排序 2.Topk问题 四、完整代码1.堆的代码Heap.cHeap.htest.c 2. 堆排序的代码…

Flink Checkpoint 超时问题详解

第一种、计算量大&#xff0c;CPU密集性&#xff0c;导致TM内线程一直在processElement&#xff0c;而没有时间做CP【过滤掉部分数据&#xff1b;增大并行度】 代表性作业为算法指标-用户偏好的计算&#xff0c;需要对用户在商城的曝光、点击、订单、出价、上下滑等所有事件进…

监听项目中指定属性数据,点击或模块显示时

当项目中&#xff0c;需要获取某个页面上、某个标签上、有指定自定义属性时&#xff0c;需要在点击该元素时进行公共逻辑处理&#xff0c;或该元素在显示的时候进行逻辑处理&#xff0c;这时可以定义一个公共的方法&#xff0c;在每个页面引用&#xff0c;并写入数据即可 &…

SOME/IP SD 协议介绍(一)

概述 服务发现用于定位服务实例并检测服务实例是否正在运行。在车载网络中&#xff0c;服务实例的位置通常是已知的&#xff1b;因此&#xff0c;服务实例的状态是首要关注的。服务的位置&#xff08;即IP地址、传输协议和端口号&#xff09;是次要关注的内容。 术语和定义 S…

防御保护--防火墙的可靠性

目录 前提&#xff1a; VGMP 接口故障切换场景 状态切换备份的过程 HRP 第一种备份方式 --- 自动备份 第二种备份方式 --- 手工备份 第三种备份方式 --- 快速备份 各备份场景过程分析 1&#xff0c;主备形成场景 2&#xff0c;主备模式下&#xff0c;接口故障切…

防火墙用户认证、NAT、策略路由、DNS透明代理以及双机热备笔记

用户认证 防火墙管理员登录认证 --- 检验身份的合法性&#xff0c;划分身份权限 用户认证 --- 上网行为管理的一部分 用户&#xff0c;行为&#xff0c;流量 --- 上网行为管理三要素 用户认证的分类 上网用户认证 --- 三层认证 --- 所有的跨网段的通信都可以属于上网行为。…

redis-主从复制

1.主从复制 1.1简介 主机数据更新后根据配置和策略&#xff0c; 自动同步到备机的master/slaver机制&#xff0c;Master以写为主&#xff0c;Slave以读为主 1.2作用 1、数据冗余&#xff1a;主从复制实现了数据的热备份&#xff0c;是持久化之外的一种数据冗余方式。 2、故…

群辉开启WebDav服务+cpolar内网穿透实现移动端ES文件浏览器远程访问本地NAS文件

文章目录 1. 安装启用WebDAV2. 安装cpolar3. 配置公网访问地址4. 公网测试连接5. 固定连接公网地址6. 使用固定地址测试连接 本文主要介绍如何在群辉中开启WebDav服务&#xff0c;并结合cpolar内网穿透工具生成的公网地址&#xff0c;通过移动客户端ES文件浏览器即可实现移动设…

如何搭建开源笔记Joplin服务并实现远程访问本地数据

文章目录 1. 安装Docker2. 自建Joplin服务器3. 搭建Joplin Sever4. 安装cpolar内网穿透5. 创建远程连接的固定公网地址 Joplin 是一个开源的笔记工具&#xff0c;拥有 Windows/macOS/Linux/iOS/Android/Terminal 版本的客户端。多端同步功能是笔记工具最重要的功能&#xff0c;…

API:低代码平台的强大秘诀与无限可能

应用编程接口 (API) 是应用程序以可编程格式访问其关键能力和功能的一种方式&#xff0c;从而其他应用程序可以利用它们。API 本质上支持应用程序之间的无缝数据流&#xff0c;使开发人员能够在应用程序中添加更多功能&#xff0c;而无需依赖大量编码。 举一个简单的例子。 您…

阿里云如何找回域名,进行添加或删除?

权威域名管理介绍说明&#xff0c;包含添加域名、删除域名、找回域名、域名分组等操作介绍。 一、添加域名 非阿里云注册域名或子域名如需使用云解析DNS&#xff0c;需要通过添加域名功能&#xff0c;将主域名或子域名添加到云解析控制台&#xff0c;才可以启用域名解析服务。…