idea docker 内网应用实践

文章目录

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

前言

基于内网环境搭建

一、服务器端

1.1 离线安装docker

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

1.2 开启docker远程访问

修改vi /etc/systemd/system/docker.service

ExecStart 修改如下:

bash 复制代码
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文件,内容如下:

bash 复制代码
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文件名

构建镜像:

bash 复制代码
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同级别),内容如下:

bash 复制代码
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插件

xml 复制代码
<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

bash 复制代码
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


相关推荐
独隅2 小时前
IntelliJ IDEA 接入多种AI大模型插件终极指南(2026.1 企业合规版)
java·人工智能·intellij-idea
BullSmall2 小时前
Sonarqube9.9 docker 镜像启动后 conf 下的配置文件没有了
docker·容器·eureka
ruofu332 小时前
wsl端是py312,但是项目是py311, 如何下载py311的依赖包(wheels)
python·docker
spider_xcxc3 小时前
Docker 实战:容器化多服务应用,Dockerfile 与 Compose 配置全解析
docker·云原生·eureka·虚拟化·容器化
晚风吹长发4 小时前
Docker使用——Docker容器及相关命令
linux·运维·服务器·docker·容器·架构
ShiXZ2134 小时前
Docker Compose 安装与配置指南
运维·docker·容器
BullSmall5 小时前
Anolis OS 8.10 Docker 部署 SonarQube 9.9 完整教程
运维·docker·容器
HoneyMoose6 小时前
IntelliJ IDEA 2026.2 最新发布
intellij-idea
开发者联盟league6 小时前
vscode 进入docker容器
vscode·docker
java_logo9 小时前
Apache Doris Docker 部署指南:实时分析数据库实战
数据库·docker·apache·doris·apache doris·轩辕镜像·docker部署doris