Docker学习-第七篇 IDEA 远程部署 springcloud 到 Docker

一、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

发布了40 篇原创文章 · 获赞 25 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/yym373872996/article/details/105678355