一、IDEA 安装 Docker 插件
1. 插件下载与安装
Files
> Settings
> Plugins
,搜索“ docker ”,选择 Docker integration 安装。
2. 重启 IDEA 后打开 Settings 查看 Docker 并新建连接
在“ Connect to Docker daemon with: ”中勾选选项“ TCP socket ”,在“ Engine API URL ”中输入“ tcp://host ip:2375 ”,其中 host ip 为远程 Docker 服务器地址,要连接成功需先在服务器开启 2375 端口,若下方出现“ Connection successful ”提示则说明连接成功。
二、创建 springcloud 项目
创建一个 springcloud 的 eureka 注册中心项目
pom.xml
<dependencies>
<!-- 增加 eureka-server 的依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.3</version>
<!-- 将插件绑定在某个 phase 执行 -->
<executions>
<execution>
<!-- 将插件绑定在 package 这个 phase 上。用户只需执行 mvn package ,就会自动执行 mvn docker:build -->
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<!-- 远程 Docker 服务器的地址 -->
<dockerHost>http://172.24.4.61:2375</dockerHost>
<!-- 镜像名称为最终构建的 jar 包名称,注意镜像名称中不能包含大写字母 -->
<imageName>${project.build.finalName}</imageName>
<!-- 将 jar 包和 Dockerfile 拷贝到此目录下执行构建镜像 -->
<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
编写 Dockerfile ,放置到 src/docker 目录下
FROM java:8
VOLUME /tmp
ADD springcloud-center.jar app.jar
RUN sh -c 'touch /app.jar'
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
三、部署项目到 Docker
1. 构建镜像
执行 mvn 命令打包工程
mvn package
由于在 pom.xml 中配置了插件绑定,执行 mvn package
,就会自动执行 mvn docker:build
,若控制台输出“ BUILD SUCCESS ”则镜像构建成功。
2. 查看 Docker 服务器镜像
在 IDEA 的 Docker 插件窗口可以查看 images 的情况,或在 Docker 服务器执行查看镜像命令
docker images
3. 创建并启动容器
切换到 docker-compose 目录并执行
docker-compose -f docker-compose-demo.yml up -d
四、问题处理
1. Connection reset by peer 异常
执行 mvn 命令时返回异常信息:
com.spotify.docker.client.shaded.javax.ws.rs.ProcessingException: org.apache.http.client.ClientProtocolException: Cannot retry request with a non-repeatable request entity: Connection reset by peer -> [Help 1]
原因是镜像名称 imageName 中不应该包含大写字母。
2. 打镜像时 ADD failed 异常
执行 mvn 命令时返回异常信息:
ADD failed: stat /var/lib/docker/tmp/docker-builderXXXXXX: no such file or dir
原因是 Dockerfile 的 ADD 语句中定义的 jar 包名称与 mvn package 实际打出来的 jar 包名称不一致,导致找不到 jar 包文件。
比如打出来的jar包名称为 springcloud-center-0.0.1-SNAPSHOT.jar ,而 Dockerfile 中 ADD 语句为 ADD springcloud-center.jar app.jar
。