第1.3章 docker部署Eureka集群

关于Eureka的描述,可以参考Eureka简介,对Eureka和zookeeper对比,我个人觉得还是很容易看的明白的
Eureka作为服务的注册中心,即生产环境必须使用集群才能保证系统之间稳定运行
1、tornado集成eureka
参考Python Tornado之连接Eureka注册中心pip install py_eureka_client
参考Tornado实现多线程、多进程HTTP服务配置多进程

import ssl
import py_eureka_client.eureka_client as eureka_client
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
import logging
import tornado.log
from tornado.options import define, options

ssl._create_default_https_context = ssl._create_unverified_context
define("port", default=3333, help="run on the given port", type=int)

class Test01Handler(tornado.web.RequestHandler):
    def post(self):
         pass
class Test02Handler(tornado.web.RequestHandler):
  def post(self):
       pass
 class LogFormatter(tornado.log.LogFormatter):
    '''打印日志'''
    def __init__(self):
        super(LogFormatter, self).__init__(
            fmt='%(color)s[%(asctime)s %(filename)s:%(funcName)s:%(lineno)d %(levelname)s]%(end_color)s %(message)s',
            datefmt="%Y-%m-%d %H:%M:%S",
        )
        
 if __name__ == "__main__":
    # 解析命令行
    tornado.options.parse_command_line()
    # 注册eureka服务
    eureka_client.init_registry_client(eureka_server='http://eureka1x:9091/eureka/,http://eureka2x:9092/eureka/',
                                       app_name='your_app_name', instance_port='3333')
    # 采用tornado定义接口服务
    app = tornado.web.Application(handlers=[(r"/test01Query", Test01Handler), (r"/test02Query", Test02Handler)])
    http_server = tornado.httpserver.HTTPServer(app)
    http_server.listen(options.port)
    # 指定进程数
    http_server.start(4)
    tornado.ioloop.IOLoop.instance().start()

启动命令

workdir=$(cd $(dirname $0); pwd)
cd $workdir
cd api
nohup python your_server.py &
echo "start webserver"

2 微服务docker
Dockerfile这里使用的是最基本的

FROM java:8
ADD bdo.jar /bdo.jar
EXPOSE 8765
ENTRYPOINT [ "java","-jar","/bdo.jar.jar" ]

docker编译操作过程如下

[root@bwhs162 Downloads]# ll
total 121496
-rw-r--r-- 1 root root 124406697 May 26 15:20 bdo.jar
-rw-r--r-- 1 root root        93 May 29 10:40 Dockerfile
# 这个地方最后有一个点,标识dockerfile所在目录
[root@bwhs162 Downloads]# docker build -t test/bdo:1.1 .
Sending build context to Docker daemon  124.4MB
Step 1/4 : FROM java:8
 ---> d23bdf5b1b1b
Step 2/4 : ADD bdo.jar /bdo.jar
 ---> 536d944097d7
Step 3/4 : EXPOSE 8765
 ---> Running in 556e07aab1ad
Removing intermediate container 556e07aab1ad
 ---> 288b0c2de654
Step 4/4 : ENTRYPOINT [ "java","-jar","/bdo.jar.jar" ]
 ---> Running in 6c2a74e994c2
Removing intermediate container 6c2a74e994c2
 ---> 2d5e01fdbf52
Successfully built 2d5e01fdbf52
Successfully tagged test/bdo:1.1
You have mail in /var/spool/mail/root

使用docker build之后,就可以在docker images中找到
1
执行启动命令时提示,这个是因为镜像的名字错了bdo:1.1,正确的是docker images中的内容,我执行docker run -d -p 8761:8765 test/bdo:1.1就没有报错了. 8761是映射到外部的接口,8765是内部接口

[root@bwhs162 Downloads]# docker run -d -p 8761:8765 bdo:1.1
Unable to find image 'bdo:1.1' locally
docker: Error response from daemon: pull access denied for bdo, repository does not exist or may require 'docker login'.
See 'docker run --help'.

我们还可以执行命令docker login -u xxx -p xxx,登录Docker Hub(https://hub.docker.com/)仓库,再执行docker push xxx:1.0进行上传

# 需要删除的容器,通过下面命令查看id
docker ps -a
# 删除容器
docker rm 98d44c9550f5 
# 删除镜像
docker image rm -f 2d5e01fdbf52
# 根据镜像id查看日志
docker logs -f 2d5e01fdbf52
# 停止服务,这里是容器id
docker stop 600eba249261

上面只是简单的配置,并没有用到docker的环境变量,使用起来也非常简单,在dockerfile中增加ENV配置

FROM java:8
# 设置环境变量
ENV EUREKA_URL http://192.168.5.207:8761/eureka/,http://192.168.5.180:8761/eureka/,http://192.168.5.154:8761/eureka/
#
ADD bdo.jar /bdo.jar
EXPOSE 8765
ENTRYPOINT [ "java","-jar","/bdo.jar" ]

另外在springboot中yml中更改为如下面的,就可以
1
在Eureka中可以看到注册的服务,39b5548d41b1是容器的id
1
在网上搜资料,很好奇怎么都叫Dockerfile这个名字,是否可以换个名字呢,这里做一下说明是可以的。
docker build -t bdo:0.5 -f Dockerfile_test .,Dockerfile_test就是我换了一个名字,这个是没有问题的

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

warrah

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值