在Docker中运行微服务注册中心Eureka

1、Docker简介:

作为开发者,经常遇到一个头大的问题:"在我机器上能运行"。而将SpringCloud微服务运行在Docker容器中,避免了因环境差异带来的兼容性问题,能够有效的解决此类问题。

通过Docker,开发者可以轻松地创建与生产环境一致的开发环境。通过简单的命令或自动化脚本,开发者可以在几秒内启动或停止服务,从而灵活应对业务负载的变化。

每个微服务作为一个独立的Docker容器运行,服务之间相互隔离,降低了服务间的耦合度。利用DockerCompose或Kubernetes等容器编排工具,可以实现微服务的自动化部署、管理和扩展。

在Docker容器中运行的微服务实例可以自动注册到SpringCloud的服务注册中心(如Eureka),并由其他服务发现和调用。这种服务发现机制使得微服务之间的通信和交互变得更加简单和高效。

Docker安装过程详见:Ubuntu安装Docker-CSDN博客

Eureka搭建过程及完整代码详见:

微服务1:搭建微服务注册中心(命令行简易版,不使用IDE)-CSDN博客

2、本文架构

本文将Eureka微服务放到Docker容器中并运行,通过浏览器访问Eureka微服务来进行测试。如下图所示:

3、改造现有Eureka微服务

现在,我们在已经搭建好的Eureka微服务上稍作修改,使之可以运行到Docker中,主要步骤如下:

1)在pom.xml中引入依赖包

html 复制代码
<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>dockerfile-maven-plugin</artifactId>
    <version>1.4.13</version>
    <configuration>
        <repository>eureka-server-docker</repository>
        <tag>${version}</tag>
    </configuration>
</plugin>

2)编写Dockerfile:

Dockerfile放到项目根目录,与pom.xml同一级。

FROM:指定基础镜像,这里我们基于Java JDK的镜像。

COPY:复制文件,COPY <src> <dest>

html 复制代码
FROM openjdk:8-jre-alpine

LABEL maintainer="cloud@sky.org"

ENV TZ=Asia/Beijing \
    DIST_NAME=microservice-eureka-server-1.0-SNAPSHOT

RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime \
    && echo $TZ > /etc/timezone

COPY ./target/"$DIST_NAME.jar" /"$DIST_NAME.jar"

EXPOSE 8080

ENTRYPOINT java $JAVA_OPTS -jar /$DIST_NAME.jar

3)打包Eureka微服务

将Eureka打包成microservice-eureka-server-1.0-SNAPSHOT.jar:

bash 复制代码
sudo mvn clean package -DskipTests

4)Docker构建镜像:

bash 复制代码
sudo mvn dockerfile:build

查看镜像:

bash 复制代码
sudo docker images

4、在Docker中运行Eureka

bash 复制代码
sudo docker run -p 8080:8080 eureka-server-docker:1.0-SNAPSHOT

浏览器访问测试Eureka。

如果网络不通,可参见博文:VMware中Ubuntu系统Docker正常运行但网络不通(已解决)-CSDN博客

相关推荐
川石课堂软件测试1 小时前
性能测试|docker容器下搭建JMeter+Grafana+Influxdb监控可视化平台
运维·javascript·深度学习·jmeter·docker·容器·grafana
追风林8 小时前
mac 本地docker-mysql主从复制部署
mysql·macos·docker
城南vision10 小时前
Docker学习—Docker核心概念总结
java·学习·docker
wclass-zhengge10 小时前
Docker篇(Docker Compose)
运维·docker·容器
梦魇梦狸º14 小时前
腾讯轻量云服务器docker拉取不到镜像的问题:拉取超时
docker·容器·github
鬼才血脉14 小时前
docker+mysql配置
mysql·adb·docker
詹姆斯爱研究Java14 小时前
Docker 的基本概念和优势
docker
南猿北者16 小时前
docker镜像仓库常用命令
运维·docker·容器
杨浦老苏16 小时前
Docker可视化管理面板DPanel的安装
运维·docker·群晖
航月18 小时前
FTP、ISCSI、CHRONY、DNS、NFS、DOCKER、MARIADB、NGINX、PHP、CA各服务开启方法
nginx·docker·mariadb