docker-compose部署eureka服務(wù)端、客戶端的案例代碼
使用場景
使用docker-compose方式部署eureka的服務(wù)端和客戶端,并使用容器ip進(jìn)行通信。
原理是使用docker-compose默認(rèn)在一個網(wǎng)絡(luò)下,并提供dns下的通過service通信的功能。
該方法也可以用于其它形式的容器內(nèi)部服務(wù)調(diào)用的功能實現(xiàn)。
服務(wù)端主要代碼
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.9</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.liuyang.sc</groupId>
<artifactId>eurekaserver</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>eurekaserver</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>2021.0.6</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-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>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.4.3</version>
</plugin>
</plugins>
</build>
</project>
application.yml
spring:
application:
name: eureka-server
server:
port: 29108 #服務(wù)注冊中心端口號
eureka:
instance:
hostname: 127.0.0.1 #服務(wù)注冊中心IP地址
client:
registerWithEureka: false #是否向服務(wù)注冊中心注冊自己
fetchRegistry: false #是否檢索服務(wù)
serviceUrl: #服務(wù)注冊中心的配置內(nèi)容,指定服務(wù)注冊中心的位置
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/main.java
package com.liuyang.sc.eurekaserver;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@EnableEurekaServer
@SpringBootApplication
public class EurekaserverApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaserverApplication.class, args);
}
}客戶端主要代碼
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.9</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.sc</groupId>
<artifactId>gateway-project</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>gateway-project</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>2021.0.6</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-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>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.4.3</version>
</plugin>
</plugins>
</build>
</project>
application.yml
spring:
application:
name: gateway
cloud:
gateway:
discovery:
locator:
enabled: true
server:
port: 29107
eureka:
client:
service-url:
defaultZone: http://eurekaserver:29108/eureka/ #此處的eurakaserver為docker-compose.yml中eureka-server工程的容器定義
instance:
prefer-ip-address: true # 使用IP注冊,避免容器id:port調(diào)用報錯main.java
package com.sc.gatewayproject;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@EnableEurekaClient
@EnableDiscoveryClient
@SpringBootApplication
public class GatewayProjectApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayProjectApplication.class, args);
}
}粗陋的DockerFile
eurekaserver
FROM java:openjdk-8u111-jdk COPY eurekaserver-0.0.1-SNAPSHOT.jar app.jar EXPOSE 29108 ENTRYPOINT ["java","-Xmx128m","-jar","app.jar"]
gateway
FROM java:openjdk-8u111-jdk COPY gateway-project-0.0.1-SNAPSHOT.jar app.jar EXPOSE 29107 ENTRYPOINT ["java","-Xmx128m","-jar","app.jar"]
docker-compose.yml
version: '2'
services:
eurekaserver: # 注意此處的名稱需要添加到eureka客戶端的defaultZone中,相當(dāng)于docker內(nèi)的主機(jī)名
#container_name: eureka_server
image: maojindaobike/eurekaserver:230315
ports:
- "29108:29108"
gateway:
#container_name: gateway
image: maojindaobike/gateway:230316_v5
ports:
- "29107:29107"
depends_on:
- eurekaserver啟動
docker-compose up -d

擴(kuò)容
擴(kuò)容時,需要顯式端口映射,避免端口沖突
docker-compose.yml
version: '3'
services:
eurekaserver:
#container_name: eureka_server
image: maojindaobike/eurekaserver:230315
ports:
- "29108:29108"
gateway:
#container_name: gateway
image: maojindaobike/gateway:230316_v5
ports:
- "29107"
depends_on:
- eurekaserverdocker-compose up -d docker-compose up -d --scale gateway=3

docker-compse ps
root@dockerserver:~/springcloud-dockerpose# docker-compose ps
/snap/docker/2746/lib/python3.6/site-packages/paramiko/transport.py:32: CryptographyDeprecationWarning: Python 3.6 is no longer supported by the Python core team. Therefore, support for it is deprecated in cryptography. The next release of cryptography (40.0) will be the last to support Python 3.6.
from cryptography.hazmat.backends import default_backend
Name Command State Ports
-------------------------------------------------------------------------------------------------------------------------
springcloud-dockerpose_eurekaserver_1 java -Xmx128m -jar app.jar Up 0.0.0.0:29108->29108/tcp,:::29108->29108/tcp
springcloud-dockerpose_gateway_1 java -Xmx128m -jar app.jar Up 0.0.0.0:49154->29107/tcp,:::49154->29107/tcp
springcloud-dockerpose_gateway_2 java -Xmx128m -jar app.jar Up 0.0.0.0:49156->29107/tcp,:::49156->29107/tcp
springcloud-dockerpose_gateway_3 java -Xmx128m -jar app.jar Up 0.0.0.0:49155->29107/tcp,:::49155->29107/tcp到此這篇關(guān)于docker-compose部署eureka服務(wù)端、客戶端的文章就介紹到這了,更多相關(guān)docker compose部署eureka內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker部署Microsoft Sql Server詳細(xì)步驟
大家好,本篇文章主要講的是Docker部署Microsoft Sql Server詳細(xì)步驟,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12
通過Docker安裝啟動DB2在Spring?Boot整合DB2的方法
DB2是IBM的一款優(yōu)秀的關(guān)系型數(shù)據(jù)庫,這篇文章主要介紹了通過Docker啟動DB2,并在Spring?Boot整合DB2,需要的朋友可以參考下2023-01-01
Docker構(gòu)建簡單的個人主頁網(wǎng)站實戰(zhàn)教程
Docker是一種開源容器化技術(shù),可以打包、發(fā)布和運(yùn)行應(yīng)用程序,本教程介紹了如何使用Docker構(gòu)建一個簡單的個人主頁網(wǎng)站,通過編寫Dockerfile來自定義鏡像,并展示了如何通過傳入環(huán)境變量來動態(tài)更改網(wǎng)頁內(nèi)容,項目使用的技術(shù)包括Docker、Alpine、Nginx、HTML、CSS和JavaScript2024-10-10
Linux下定時自動備份Docker中所有SqlServer數(shù)據(jù)庫的腳本
這篇文章主要介紹了Linux下定時自動備份Docker中所有SqlServer數(shù)據(jù)庫?,編寫shell文件給出一個備份的范例,在Linux添加定時任務(wù),通過下列命令來檢測并安裝這個服務(wù),需要的朋友可以參考下2022-09-09

