13.docker部署springcloud项目

来源:互联网 发布:股票实时数据api 编辑:程序博客网 时间:2024/06/15 07:52

1.介绍及准备工作

使用docker部署springcloud项目主要是使用maven-docker插件在本地将项目构建成镜像推送到指定ip的docker服务下。也可以使用dockerfile文件制作镜像这里采用maven的插件比较方便

我这里docker装在centos中,打开docker(要确保docker后台启动会监听2357端口,即首先需要打开docker的对外的api端口2357)

service docker start &


2.配置环境变量

在本地win10系统中新建系统变量指向虚拟机中的docker服务




3.erueka-server

(1)pom.xml
主要是加入maven-docker的插件的依赖
<!-- 打包工具 -->  <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>                <configuration>                <!-- 镜像名称 -->                    <imageName>eureka-server-test</imageName>                    <!-- 依赖java镜像 --><baseImage>java</baseImage>                    <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>                    <resources>                        <resource>                            <targetPath>/</targetPath>                            <directory>${project.build.directory}</directory>                            <include>${project.build.finalName}.jar</include>                        </resource>                    </resources>                </configuration>            </plugin>            <!-- 插件 -->        </plugins>  </build>
这里指定镜像的名称有一定规则比如大小写特殊字符等否则会失败
完整配置如下
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">  <modelVersion>4.0.0</modelVersion>  <groupId>com.tyf</groupId>  <artifactId>eureks-server</artifactId>  <version>0.0.1-SNAPSHOT</version>  <packaging>jar</packaging>  <name>eureks-server</name>  <url>http://maven.apache.org</url>  <properties>    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  </properties>  <!-- 1.parent -->  <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>1.5.2.RELEASE</version>        <relativePath/>  </parent>  <dependencies>        <!--2.eureka-->        <dependency>            <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-starter-eureka-server</artifactId>        </dependency>        <!-- 3.springboot test-->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>        </dependency>  </dependencies>  <dependencyManagement>        <dependencies>            <dependency>                <groupId>org.springframework.cloud</groupId>                <artifactId>spring-cloud-dependencies</artifactId>                <version>Dalston.RC1</version>                <type>pom</type>                <scope>import</scope>            </dependency>        </dependencies>  </dependencyManagement>  <!-- 打包工具 -->  <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>                <configuration>                <!-- 镜像名称 -->                    <imageName>eureka-server-test</imageName>                    <!-- 依赖java镜像 --><baseImage>java</baseImage>                    <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>                    <resources>                        <resource>                            <targetPath>/</targetPath>                            <directory>${project.build.directory}</directory>                            <include>${project.build.finalName}.jar</include>                        </resource>                    </resources>                </configuration>            </plugin>            <!-- 插件 -->        </plugins>  </build>  <repositories>        <repository>            <id>spring-milestones</id>            <name>Spring Milestones</name>            <url>https://repo.spring.io/milestone</url>            <snapshots>                <enabled>false</enabled>            </snapshots>        </repository>  </repositories></project>




(2)application.yml
去掉hostname去掉serviceUrl.defaultZone的配置
增加instance.prefer-ip-address的配置
server:  port: 8761eureka:  instance:  preferIpAddress: true    #hostname: localhost  client:    registerWithEureka: false    fetchRegistry: false    #serviceUrl.defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/


(3)app

不变

package com.tyf.register;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;@EnableEurekaServer@SpringBootApplicationpublic class App {    public static void main( String[] args )    {        SpringApplication.run(App.class, args);    }}

(4).构建镜像
首先将修改后的工程在本地跑一下看能不能跑通
然后将项目文件从eclipse的workspace中cp粗来放到任意一个位置,进入项目文件夹(包含pom.xml这一层目录)
mvn clean package docker:build
等待完成,到centos的docker服务中查看刚刚推送进去的镜像信息
docker images
启动镜像,将容器运行8761端口映射到宿主机8761端口(同时指定容器name为eureka-server)
docker run --name eureka-server -p 8761: 8761 -t eureka-server-test
使用宿主机ip和端口访问项目(http://192.168.88.131:8761)可以看到web窗口
成功!


4.provider-server

创建一个服务提供者(使用eureka-server暴露服务)
(1)pom.xml
主要是加入maven-docker插件
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">  <modelVersion>4.0.0</modelVersion>  <groupId>com.tyf</groupId>  <artifactId>provider-server-test</artifactId>  <version>0.0.1-SNAPSHOT</version>  <packaging>jar</packaging>  <name>provider-server-test</name>  <url>http://maven.apache.org</url>  <properties>    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  </properties>  <!-- 1.parent -->  <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>1.5.2.RELEASE</version>        <relativePath/>  </parent>  <dependencies>        <!--2.eureka-->        <dependency>            <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-starter-eureka</artifactId>        </dependency><!----><dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <!-- 3.springboot test-->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>        </dependency>  </dependencies>  <dependencyManagement>        <dependencies>            <dependency>                <groupId>org.springframework.cloud</groupId>                <artifactId>spring-cloud-dependencies</artifactId>                <version>Dalston.RC1</version>                <type>pom</type>                <scope>import</scope>            </dependency>        </dependencies>  </dependencyManagement>  <!-- 打包工具 -->  <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>                <configuration>                <!-- 镜像名称 -->                    <imageName>provider-server-test</imageName>                    <!-- 依赖java镜像 --><baseImage>java</baseImage>                    <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>                    <resources>                        <resource>                            <targetPath>/</targetPath>                            <directory>${project.build.directory}</directory>                            <include>${project.build.finalName}.jar</include>                        </resource>                    </resources>                </configuration>            </plugin>            <!-- 插件 -->        </plugins>  </build>  <repositories>        <repository>            <id>spring-milestones</id>            <name>Spring Milestones</name>            <url>https://repo.spring.io/milestone</url>            <snapshots>                <enabled>false</enabled>            </snapshots>        </repository>  </repositories></project>



(2)application.properties
eureka:  client:    serviceUrl:      #defaultZone: http://localhost:8761/eureka/      http://eureka-server:8761/eureka/    #这里填写eureka-server-test镜像启动的容器的名称server:  port: 8763spring:  application:    name: provider-server



(3)其他
app/controller/service不变

(4)构建镜像
过程同上
先访问eureka-server的窗口查看服务是否成功注册,在访问服务提供者(通过erueka-server的ip调用)查看服务能否调用
一方面查看浏览器页面的response结果.另一方面进入docker服务下面运行的镜像的容器中可以查看到控制台的输出信息

5.遇到的一些错误

类中import的一些没有使用的包会在build过程中报错
images名字有一定的规则
在启动erueka-server-test时指定name参数为eureka-server-test,这个值就是配置在provide-server中的注册中心地址,在这里表现为一个hostname
再启动provider-server-test时使用link参数命令如下
两个服务安装在同一centos的docker中:
docker run --name eureka-server-test -p 8761:8761 -t eureka-server-test
docker run --link eureka-server-test:8761 -p 8763:8763 -t provider-server-test
两个服务安装在不同centos的docker中
服务提供者,即client的application.yml中defaultZone直接填http://注册中心主机ip:端口号/eureka:
docker run -p 8761:8761 -t eureka-server 启动服务器
docker run -p 8763: 8763 -t server-hi 注册服务




原创粉丝点击