一、前言
最近在學習docker,順便把之前學習的spring cloud 部署到Docker 中。至於什么是SpringCloud的服務注冊與發現,什么是docker,我這里就不作贅述了。可以先去學習這兩部分內容,再來看這篇文章,廢話不多說了。直接開始!
二、環境准備
JDK 8
MAVEN 3.3.9
SpringCloud Dalston.SR4
SpringBoot 1.5.8.RELEASE
三、實戰eureka-server
3.1 創建工程
跟普通創建eurkea-server 工程一樣,如下圖所示:
目錄結構圖
3.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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.eureka-server</groupId> <artifactId>101spring-cloud-eureka-server</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>101spring-cloud-eureka-server</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.8.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <spring-cloud.version>Dalston.SR4</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency> <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>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <finalName>eureka-server</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <!-- tag::plugin[] --> <!-- <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.4.3</version> <configuration> <imageName>${docker.image.prefix}/test/${project.artifactId}</imageName> <dockerDirectory>src/main/docker</dockerDirectory> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin> --> <!-- end::plugin[] --> </plugins> </build> </project>
這里暫時不用Docker 插件演示,加入了eureka安全驗證,所以引入了security依賴。
3.3 application.yml
spring: application: name: eureka-server server: port: 8761 #安全認證配置 security: basic: enabled: true user: name: admin # 用戶名 password: admin123 # 用戶密碼 eureka: client: register-with-eureka: false fetch-registry: false
啟動項目測試是否成功。
啟動成功!說明我們的項目正常運行沒有問題!
四、實戰 eureka-client
創建eureka-client步驟跟創建eureka-server 一樣,只是注意一些細節。
4.1 application.yml
spring: application: name: eureka-client server: port: 8750 eureka: instance: prefer-ip-address: true client: serviceUrl: defaultZone: http://admin:admin123@localhost:8761/eureka/
因為eureka-server 加入了安全驗證,所以客戶端注冊地址:
http://admin:admin123@localhost:8761/eureka/
如上圖所示,說明客戶端注冊成功。整體流程沒問題!接下來部署到docker 中。
五、實戰 docker
這里我的docker 搭建在VM虛擬機CentOS7系統中。我安裝的docker 版本是目前最新的17ce社區版網上有許多搭建教程,這里我就不啰嗦了。
5.1 打成Jar包
將 eureka-server 和 eureka-client 通過 maven 命令打成 jar 包
右鍵=> Run As => Maven build => package 然后運行。
這里我們看到已經打包成功了。刷新一下target 目錄,可以看到已經打包好的eureka-server
eureka-client 也跟eureka-server 一樣。不過需要對application.yml 進行修改
需要將localhost 修改為eureka-server
5.2 制作docker 鏡像
這里我通過遠程連接工具把jar上傳至linux 操作系統中。
編寫dockerfile
FROM frolvlad/alpine-oraclejdk8:slim VOLUME /tmp ADD ./eureka-server.jar app.jar #RUN bash -c 'touch /app.jar' ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] EXPOSE 8761
通過dockerfile 創建鏡像文件
命令
docker build -t 10.0.233.4/eureka-server .
注:因為搭建了Harbor鏡像私服,所以取名為10.0.233.4/eureka-server
. 表示本目錄,不可以少。
鏡像打包成功,我們修改一下dockerfile 繼續上傳eureka-client
5.3 運行 docker 鏡像
到了最關鍵的一步了。
分別運行:
docker run --name eureka-server -p 8761:8761 -t 10.0.233.4/eureka-server docker run --link eureka-server:8761 -p 8750:8750 -t 10.0.233.4/eureka-client
這時候我們可以看到已經實現了在docker 容器中的部署。完!