前言:
做项目时用到了eureka做注册中心,由于eureka服务端需要单独启动一个服务,每次在不同的电脑上跑项目时都要新建一个eureka客户端跑起来,比较麻烦,因此就想将eureka部署到自己的服务器上去。刚好自己的服务器上有docker,于是就想着通过docker镜像在容器中运行eureka服务端。
步骤:
要做到在docker中运行自己的eureka服务端需要两个步骤:
第一步,建立一个eureka服务端项目。
第二步,将项目打包成docker镜像并运行。
建立一个eureka服务端项目
首先来做第一步:建立一个eureka服务端项目,这个很简单,按照以下步骤来就行了,可以说只有一行代码。
1、通过Spring Initalizr 创建一个项目,引入Eureka Server
或者直接建一个maven项目导入Eureka Server依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
<version>3.0.3</version>
</dependency>
2、在@SpringBootApplication标注的主启动类上加上@EnableEurekaServer 注解
3、配置eureka
server:
port: 8761
spring:
application:
name: eureka-server
eureka:
instance:
hostname: 127.0.0.1
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
接下来测试启动没问题就可以进行下一步了。
将项目打包成docker镜像并运行
首先使用maven插件将项目打成jar包(package/install 都可以),然后就可以看到在和src目录同级的target目录下生成了一个项目jar包。
然后在src目录下(参考上图)建一个Dockerfile文件,文件内容为:
#指使用jdk.18的java镜像,在容器中安装java.
FROM java:8
#作者
MAINTAINER author
#指向了一个/tmp的目录,springboot内置tomcat默认使用/tmp作为工作目录.
#作用是在主机的/var/lib/docker目录下创建了一个临时文件,并连接到容器的/tmp.
VOLUME /tmp
#将项目的jar文件作为app.jar添加到容器,app.jar就是别名.
ADD eureka-server-0.0.1-SNAPSHOT.jar app.jar
#表示在新创建的镜像中执行一些命令,然后把执行的结果提交到当前镜像.这里使用bash或sh都可以,没什么区别,bash完全兼容sh.
RUN bash -c 'touch /app.jar'
#容器暴露端口.
EXPOSE 8761
#应用启动命令,设置启动参数等
ENTRYPOINT [ "java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar" ]
然后将eureka -server项目jar包和Dockerfile一起上传到服务器
然后执行docker命令将项目打包成镜像
docker build -t author/eureka-server:1.10.14 .
其中author/eureka-server:1.10.14表示的意思是 作者/镜像名称:TAG(版本)
我这里写1.10.14是用的eureka-server的版本,简单点直接替换成 eureka-server:1.0 也可以
注意:命令后面需要一个参数".",代表当前路径
打包完成后查看当前docker内镜像
然后运行容器
docker run -d -p 8761:8761 --name eureka-server 8edee
其中8edee是镜像id的前几个字符,直接写镜像名称也可以
运行后访问服务器ip+8761 成功。
访问不成功记得开放端口!!踩坑了