docker实现单节点consul的服务注册于发现 - Go语言中文社区

docker实现单节点consul的服务注册于发现


一 搭建consul环境

1.从docker-hub上搜索拉取镜像

docker search consul

docker pull consul

2 . 启动consul镜像
单节点启动:

docker run -p 8500:8500/tcp consul agent -server -ui -bootstrap-expect=1 -client=0.0.0.0

服务器上不能被外部访问:
consul agent -dev启动的consul在云服务器上是不能被外部访问的,那么要被外部访问我们需要加参数,参照如下:

consul agent -dev -http-port 8500 -client 0.0.0.0

参数说明:

-client 0.0.0.0:表明不是绑定的不是默认的127.0.0.1地址,可以通过公网进行访问

-http-port 8500:通过该参数可以修改consul启动的http端口

-bootstrap-expect 指定consul将等待几个节点连通,成为一个完整的集群

3 . 查看consul是否启动成功

docker ps

在这里插入图片描述
可以看到容器已经启动。

打开浏览器 输入http://ip:8500后会出现下去的界面既表示成功。
在这里插入图片描述

二 构建应用镜像并启动
1 . 先看spring cloud 的 application.yml
服务端:

spring:
 application:
   name: springClound2
 cloud:
  consul:
   host: ip
   port: 8500
   discovery:
    serviceName: springClound3
    healthCheckInterval: 15s
    health-check-path: /home
    prefer-ip-address: true
server:
 port: 8802

其中ip更换为consul的真实IP。
prefer-ip-address: true 的作用是将自己的ip注册到consul中。

客户端配置:(如果不需要注册到consul上可以不配置discovery)

spring:
 application:
  name: springClound3
 cloud:
  consul:
   host: ip
   port: 8500
   discovery:
    serviceName: springClound4
server:
 port: 8805

2 . 编写Dockerfile文件

FROM java
MAINTAINER zms
VOLUME /tmp
ADD democonsumer-0.0.1-SNAPSHOT.jar app.jar
RUN bash -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]

FROM:
Docker是基于镜像的部署,幸运的是Docker官方和开发者们为我们维护了许多高质量的Docker镜像,而基于这些镜像我们能做出符合自己需求的镜像。此处的FROM意思为我们即将要创建的镜像的基础镜像的名字,这个名字可以是我们本地已有的镜像,也可以是Docker Hub上的镜像,如果是Docker Hub上的镜像,此时docker daemon会为我们自动下载该镜像。还有一个要注意的点,如果是本地镜像要加上版本(镜像名:版本号),否则默认版本号为latest。

VOLUME:

Docker的运行相当于是操作系统的一个进程,但是该进程又与普通进程有些许不同,因为该进程内部维护着的是我们的一个微服务的完整结构,而往往项目中需要运行的微服务都有记录日志或者其他写出文件的功能。设想一下这样的情况:我们的微服务现在正在运行,但是访问量突然增大,开发人员又没有关注到这一点,没有进行水平扩展,这时候很有可能这个微服务就down了,而这个微服务一旦down了之后,出现的情况就是整个容器的status就变成了Exited,而此时如果将容器删除,容器中的所有数据卷会跟随容器一起删除,因为这些数据卷是临时的。此处的映射路径为/usr/test。这是我们自定义的映射路径,后续要演示记录日志的功能。当然也可以指定/tmp 其效果都是在主机的/var/lib/docker/volumes目录下创建一个临时文件,并链接到容器的链接路径。而为什么链接到容器的/tmp目录呢?因为 Spring Boot 使用的内嵌 Tomcat 容器默认使用/tmp作为工作目录。当然此处的/tmp也可以变成你的日志记录文件夹,这样就可以在本地实时查看日志记录了。

ADD:

将我们自身的项目admin.jar作为app.jar加入到容器中。

EXPORT:
该命令用于声明在运行时容器提供服务的端口。注意:这只是一个声明,运行时并不会因为该声明就打开相应的端口。该指令的作用是帮助镜像使用者理解该镜像服务的守护端口;其次是当运行时使用随机映射时(即run命令的-P参数),会自动映射EXPORT的端口。

ENTRYPOINT:
该命令制定Docker容器启动时执行的命令,可多次设置,但只有最后一条会生效。
[“java”,"-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] 这条命令中可能部分读者会对 Djava.security.egd=file:/dev/./urandom 这条命令有疑惑,这是因为linux中和windows中取随机数时的参考策略不同,linux默认的随机数会被取完,导致返回-1.而制定/dev/./urandom这个取随机数的策略时,当随机数取完之后会返回伪随机数,不至于影响业务。

3 执行命令 docker build -t dockertest/jar_test:0.01 . 创建镜像

-t 表示打包成功后的镜像tag 不要忘了最后一个点。.表示Dockerfile文件和jar包在同一个路径,如果不在需要写出Dockerfile的绝对路径

4 启动镜像
docker run -p 8805:8805--name jar_test -d dockertest/jar_test:0.01

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_27037443/article/details/89852007
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-07 21:20:36
  • 阅读 ( 1275 )
  • 分类:docker

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢