🤓开箱即用的 Eureka 注册中心组件,支持高度自定义部署。
225
下面用一张表格来看一下常见的注册中心有什么区别:
| 特性 | Eureka | Nacos | Consul | Zookeeper |
|---|---|---|---|---|
| CAP | AP | CP + AP | CP | CP |
| 健康检查 | Client Beat | TCP / HTTP / MySQL / Client Beat | TCP / HTTP / gRPC / Cmd | Keep Alive |
| 雪崩保护 | ✅ | ✅ | ❌ | ❌ |
| 自动注销实例 | ✅ | ✅ | ❌ | ✅ |
| 访问协议 | HTTP | HTTP / DNS | HTTP / DNS | TCP |
| 监听支持 | ✅ | ✅ | ✅ | ✅ |
| 多数据中心 | ✅ | ✅ | ✅ | ❌ |
| 跨注册中心同步 | ❌ | ✅ | ✅ | ❌ |
| Spring Cloud集成 | ✅ | ✅ | ✅ | ✅ |
CAP 解释:
C 代表 Consistency (一致性)
A 代表 Availability(可用性)
P 代表 Partition tolerance (分区容错性)
CAP 定理由 Eric Brewer 在 2000 年 PODC 会议上提出。该猜想在提出后两年被证明成立,成为我们熟知的 CAP 定理,CAP三者不可兼得。
那我做这样一个镜像包的原因只是图省事,Eureka 本身相对于 Nacos 而言,轻量太多太多,而 Nacos 虽然功能十分齐全,也能跨注册中心同步,但使用下来成本也很大。
从个人开发者的角度上来说,我们其实是不喜欢每个项目都去搞一个注册中心,所以我就将该组件抽离成 Docker 镜像,开箱即用。
下面大致说一下该镜像的制作环境及相关依赖版本:
Greenwich.SR6 (格林威治)2.1.4.RELEASE2.1.3.RELEASE8openjdk:8u342镜像制作 Dockerfile 文件:
# 使用 openjdk:8u342 作为基础构建镜像
FROM openjdk:8u342
# 声明维护人员信息
LABEL authors="本人制作"
MAINTAINER [email protected]
# 声明版本号
ARG VERSION
ENV VERSION=${VERSION}
# 环境参数
ENV JAVA_OPTS="-Xms256m -Xmx512m"
ENV TZ=Asia/Shanghai
ENV LANG C.UTF-8
ENV WORKDIR /usr/autumnnook-server/eureka
# 工作目录
WORKDIR $WORKDIR
# 设置时区链接
RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 将 jar 源文件拷贝到容器目标路径下
COPY ./autumnnook-eureka/target/autumnnook-eureka-${VERSION}.jar $WORKDIR
# 列出目标目录内容
RUN ls -l $WORKDIR
# 启动
ENTRYPOINT ["sh", "-c","java $JAVA_OPTS -jar $WORKDIR/autumnnook-eureka-${VERSION}.jar"]
镜像制作 docker-compose 文件:
version: '3.8'
services:
eureka:
privileged: true
restart: always
build:
context: .
dockerfile: ./autumnnook-eureka/Dockerfile
args:
VERSION: ${PROJECT_VERSION}
no_cache: true
ports:
- "8761:8761"
environment:
# 设置为服务名称,方便服务间通信
- HOSTNAME=eureka
# eureka 服务端口(默认8761)
- SERVER_PORT=8761
# eureka 应用名称(默认 autumnnook-eureka)
- APPLICATION_NAME=spring-cloud-eureka
# Eureka 管理员用户名(默认soaadmin)
- EUREKA_ADMIN_NAME=soaadmin
# Eureka 管理员密码(默认 jsepc01!)
- EUREKA_ADMIN_PASSWORD=jsepc01
# 是否开启 Eureka 自我保护机制(默认 true)
- ENABLE_SELF_PRESERVATION=true
# 服务剔除间隔时间,单位毫秒(默认30000)
- EVICTION_INTERVAL_TIMER_IN_MS=30000
# 续约百分比阈值(默认0.85)
- RENEWAL_PERCENT_THRESHOLD=0.85
# 实例优先使用IP地址(默认 false)
- PREFER_IP_ADDRESS=false
# 心跳发送间隔(秒)(默认 10 s)
- LEASE_RENEWAL_INTERVAL_IN_SECONDS=10
# 是否从Eureka服务器获取注册表(默认 false)
- FETCH_REGISTRY=false
# 是否向Eureka服务器注册自己(默认 false)
- REGISTER_WITH_EUREKA=false
# Eureka集群节点地址列表
- EUREKA_PEERS=http://soaadmin:jsepc01@eureka:8761/eureka/
# 监控端点配置
- ENDPOINTS=info,health
# 排除的端点
- EXCLUDE_ENDPOINTS=shutdown,autoconfig,mappings,dump,trace,heapdump
# 是否启用Shutdown端点(默认 false)
- ENABLE_SHOWDOWN=false
networks:
- cluster-network
networks:
cluster-network:
driver: overlay
attachable: true
driver_opts:
# 加密网络流量
encrypted: "true"
后续可以通过命令构建镜像:
# 该命令仅作参考
docker-compose -f docker-compose.yml build
如果你不喜欢用 docker-compose 去打镜像,也可以使用 docker 构建:
# 该命令仅作参考
docker build -t <IMAGE_NAME>:<IMAGE_VERSION> .
docker pull caixb/spring-cloud-eureka:1.0
docker run -d \
--name eureka \
-p 8761:8761 \
-e HOSTNAME=eureka \
-e SERVER_PORT=8761 \
-e APPLICATION_NAME=spring-cloud-eureka \
-e EUREKA_ADMIN_NAME=soaadmin \
-e EUREKA_ADMIN_PASSWORD=jsepc01 \
-e ENABLE_SELF_PRESERVATION=true \
-e EVICTION_INTERVAL_TIMER_IN_MS=30000 \
-e RENEWAL_PERCENT_THRESHOLD=0.85 \
-e PREFER_IP_ADDRESS=false \
-e LEASE_RENEWAL_INTERVAL_IN_SECONDS=10 \
-e FETCH_REGISTRY=false \
-e REGISTER_WITH_EUREKA=false \
-e EUREKA_PEERS=http://soaadmin:jsepc01@eureka:8761/eureka/ \
-e ENDPOINTS=info,health \
-e EXCLUDE_ENDPOINTS=shutdown,autoconfig,mappings,dump,trace,heapdump \
-e ENABLE_SHOWDOWN=false \
--memory="512m" \
--memory-reservation="256m" \
--cpus="0.25" \
--restart=on-failure:3 \
caixb/spring-cloud-eureka:1.0
version: '3.8'
services:
eureka:
image: caixb/spring-cloud-eureka:1.0
container_name: eureka
ports:
- "8761:8761"
environment:
# 设置为服务名称,方便服务间通信
- HOSTNAME=eureka
# eureka 服务端口(默认8761)
- SERVER_PORT=8761
# eureka 应用名称(默认 autumnnook-eureka)
- APPLICATION_NAME=spring-cloud-eureka
# Eureka 管理员用户名(默认soaadmin)
- EUREKA_ADMIN_NAME=soaadmin
# Eureka 管理员密码(默认 jsepc01!)
- EUREKA_ADMIN_PASSWORD=jsepc01
# 是否开启 Eureka 自我保护机制(默认 true)
- ENABLE_SELF_PRESERVATION=true
# 服务剔除间隔时间,单位毫秒(默认30000)
- EVICTION_INTERVAL_TIMER_IN_MS=30000
# 续约百分比阈值(默认0.85)
- RENEWAL_PERCENT_THRESHOLD=0.85
# 实例优先使用IP地址(默认 false)
- PREFER_IP_ADDRESS=false
# 心跳发送间隔(秒)(默认 10 s)
- LEASE_RENEWAL_INTERVAL_IN_SECONDS=10
# 是否从Eureka服务器获取注册表(默认 false)
- FETCH_REGISTRY=false
# 是否向Eureka服务器注册自己(默认 false)
- REGISTER_WITH_EUREKA=false
# Eureka集群节点地址列表(单机模式可以注释掉)
# - EUREKA_PEERS=http://soaadmin:jsepc01@eureka:8761/eureka/
# 监控端点配置
- ENDPOINTS=info,health
# 排除的端点
- EXCLUDE_ENDPOINTS=shutdown,autoconfig,mappings,dump,trace,heapdump
# 是否启用Shutdown端点(默认 false)
- ENABLE_SHOWDOWN=false
# 资源限制(可选)
mem_limit: 512M
mem_reservation: 256M
cpus: 0.25
# 重启策略
restart: on-failure:3
# 健康检查(可选)
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8761/actuator/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
# 日志配置(可选)
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
# 网络配置(使用默认桥接网络)
networks:
- eureka-network
# 可选:如果需要连接其他服务,可以创建网络
networks:
eureka-network:
driver: bridge
Content type
Image
Digest
sha256:397cd79a6…
Size
559.4 MB
Last updated
9 months ago
docker pull caixb/spring-cloud-eureka:2.0