Intellij Idea 远程连接docker及使用
前提条件及环境
1、虚拟机 CentOS7.6
2、已安装docker
3、虚拟机与宿主机已做网络桥接
idea安装docker插件
开启docker Remote API
连接到虚拟机,执行命令
vi /usr/lib/systemd/system/docker.service
修改框选部分:ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock(centos7以下版本好像只要ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 未测试)
重新加载和启动docker:
systemctl daemon-reload
systemctl restart docker
关闭虚拟机防火墙或者放开2375端口:
firewall-cmd --zone=public --add-port=2375/tcp --permanent #开放2375端口
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
浏览器查看镜像验证 http://虚拟机IP:2375/images/json
idea 连接docker
idea中 File - settings 搜索docker,将docker连接信息填入应用即可
使用docker打包镜像
1、创建项目并在项目下创建Dockerfile
示例【openjdk:8-jre-alpine是已经pull下来的JDK镜像包】:
FROM openjdk:8-jre-alpine
ARG JAR_FILE
COPY ${JAR_FILE} /app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
2、修改pom.xml文件
示例:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.5</version>
<relativePath/>
</parent>
<groupId>com.keli.demo</groupId>
<artifactId>plugintest</artifactId>
<version>1.0.0</version>
<name>plugintest</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
<!--docker镜像打包-->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.13</version>
<executions>
<execution>
<id>default</id>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<repository>registry.cn-beijing.aliyuncs.com/library/${project.artifactId}</repository>
<tag>${project.version}</tag>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
<!--打包跳过单元测试-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M3</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
</plugins>
</build>
</project>
3、编译打包
命令方式:mvn clean package
界面操作
4、查看验证
docker run -itd --name plugintest -p 8080:8080 registry.cn-beijing.aliyuncs.com/library/plugintest:1.0.0
idea增加docker配置【扩展】
1、选择Edit Configurations...
2、配置中选择Dockerfile项
3、配置定义
4、运行验证
常见问题
错误1:
Caused by: com.spotify.docker.client.shaded.org.apache.http.conn.HttpHostConnectException: Connect to localhost:2375 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused: connect
解决方案:
在开发环境中配置环境变量【计算机 - 属性 - 高级系统设置】
系统变量中增加如下配置【可能需要重启电脑】
变量名:DOCKER_HOST
变量值:tcp://192.168.75.129:2375 【就是前面配置的docker服务的Engine API URL】
错误2:
Caused by: java.io.IOException: entry '.mvn/wrapper/maven-wrapper.jar' closed at '58727' before the '62823' bytes specified in the header were written
解决方案:
将项目下的.mvn文件夹删除