0x00 概述

服务发现应用是很多服务化系统的组成部分,所以在开发、测试环境中也就有必要配备一套服务发现体系来配合我们的开发、测试工作。在这一小节里,我们就来谈谈如何在 Docker 环境下部署服务发现应用。

0x01 使用 Docker Compose 模拟 Zookeeper 集群

实现服务发现的方法有很多种,其中较为常见的一种是利用分布式注册中心,解决服务之间协调的问题。

在众多注册中心应用中,Zookeeper 是较为常见和常用的一款程序,这里我们就以 Zookeeper 为例,介绍如何使用 Docker 搭建 Zookeeper 的运行环境。

1.1 设计目录结构

由于 Zookeeper 的运行并不需要太多的关注配置和调整,这里我们就以最基础的形式来设计 Docker Compose 项目的结构。

└─ project├─ bin│  └─ compose.sh└─ compose└─ docker-compose.yml

为了方便日常操作,我们依然编写了 compose.sh 这个脚本来辅助我们控制 Docker Compose 项目。

1.2 编写 docker-compose.yml

很多读者会问到一个问题,怎么样才能通过 Docker 的虚拟化技术实现在一个机器上模拟出多台机器的效果。或者说一个我们这里会涉及的具体问题,如何只用一个 Docker 来模拟一个高可用的 Zookeeper 集群。

我们知道,要实现 Zookeeper 的高可用,至少需要三个 Zookeeper 节点进行协作,所以这里我们用三个单独的 Docker Compose 服务定义来分别定义这三个节点。

version: '3'services:zk1:image: zookeeper:3.4restart: alwayshostname: zk1environment:ZOO_MY_ID: 1ZOO_SERVERS: server.1=0.0.0.0:2888:3888 server.2=zk2:2888:3888 server.3=zk3:2888:3888ports:- 2181:2181zk2:image: zookeeper:3.4restart: alwayshostname: zk2environment:ZOO_MY_ID: 2ZOO_SERVERS: server.1=zk1:2888:3888 server.2=0.0.0.0:2888:3888 server.3=zk3:2888:3888ports:- 2182:2181zk3:image: zookeeper:3.4restart: alwayshostname: zk3environment:ZOO_MY_ID: 3ZOO_SERVERS: server.1=zk1:2888:3888 server.2=zk2:2888:3888 server.3=0.0.0.0:2888:3888ports:- 2183:2181

在这个 Docker Compose 项目中,我们定义的三个 Zookeeper 服务都直接使用了官方制作的 zookeeper 镜像。

在这个镜像里,我们可以留意定制 ZOO_MY_ID 和 ZOO_SERVERS 这两个环境变量。这两个变量主要是用来识别 Zookeeper 集群中不同 Zookeeper 程序的。

其中 ZOO_MY_ID 是 Zookeeper 在集群中的编号,而 ZOO_SERVERS 用来定义集群中的所有 Zookeeper 及它们的连接方式。

我们以 zk1 这个服务为例来解释一下 ZOO_SERVERS 的定义方法。

server.1=0.0.0.0:2888:3888 server.2=zk2:2888:3888 server.3=zk3:2888:3888

我们可以在 ZOO_SERVERS 中定义所有处于 Zookeeper 集群中的程序,通过空格来间隔它们。而每个服务的的定义形式为 server.[id]=[host]:[port]:[port],所以就有了上面例子中我们看到的样子。

在这个例子里,我们描述了三个 Zookeeper 程序的连接地址。

由于每个容器都有独立的端口表,所以即使这些程序都运行在一个主机里,我们依然不需要担心,它们会造成端口的冲突。所以这里我们直接使用默认的 2888 和 3888 来进行服务间的相互通信即可。

而在进行容器互联的过程中,我们可以通过 Docker 的解析机制,直接填入对应服务的名称替代它们的 IP 地址,也就是这个例子里的 zk2 和 zk3。

1.3 重启机制

在项目定义中,我们还注意到了 restart: always 这个配置,这个配置主要是用来控制容器的重启策略的。

这里的 always 指的是不论任何情况,容器出现问题后都会自动重启,也包括 Docker 服务本身在启动后容器也会自动启动。

另外,restart 还支持几种配置:

在实际使用中,我们可以根据需要选择不同的重启策略。

而这个项目里,我们希望 Zookeeper 能够一直健壮的运行,所以使用了 always 这个重启策略。

0x03 启动项目

一切就绪,我们就可以直接通过 Docker Compose 的命令来启动开发环境了

# ./bin/compose.sh up -d

转载于:https://www.cnblogs.com/JetpropelledSnake/p/10405382.html

Docker学习笔记之在开发环境中使用服务发现相关推荐

  1. Polyworks脚本开发学习笔记(一)-脚本开发环境

    Polyworks脚本开发学习笔记(一)-脚本开发环境 背景 Polyworks的扫描尺寸测量分析模块是我工作中经常用到的一个模块,我不是做测量的,但是利用Polyworks对扫描获得的点云来进行尺寸 ...

  2. C51单片机学习笔记(一)——搭建开发环境及烧写工具

    C51单片机学习笔记(一)--搭建开发环境及烧写工具 文章目录 C51单片机学习笔记(一)--搭建开发环境及烧写工具 1.搭建软件开发环境及使用(Keil uVision) 2.将程序下载到单片机(烧 ...

  3. Python学习笔记:Day1-2 开发环境搭建

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  4. 迪文屏幕T5L平台学习笔记一:开发环境搭建注意事项

    前面一直用T5UID3平台的屏幕开发,但是吐槽下<DWIN C Compiler 1>编译器bug太多,项目能不能做好,全靠运气:售后说T5L平台支持keil开发,我感觉挺好,于是从新学习 ...

  5. 视觉SLAM十四讲学习笔记-第二讲-开发环境搭建

    专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 ​​​​​​​ lin ...

  6. 《STM32学习笔记》2——开发环境的建立

    接上文,文中的图片知识,大多数来自视频的截图(来自洋桃电子). 欢迎大家批评指正! STM32学习笔记-专栏 文章目录 一.接口定义 1 芯片引脚整体简介 2 各部分引脚介绍 二.开发板简介 三.IS ...

  7. Android开发学习笔记---搭建Android开发环境

    今天突发奇想,想看看Android开发是什么样的,于是就在度娘了一下Android开发,便自己动手搭建了起来.中间也碰到了一些问题,自己慢慢度娘,谷哥去解决.现在把搭建步骤记录如下: 第一步:下载Ec ...

  8. 【海思AI芯片Hi3559A】学习笔记(1):开发环境搭建、安装SDK

    芯片资料见Hi3559A的资料包 主要参考文档:ReleaseDoc\zh\01.software\board\Hi3559A╱C V100 SDK 安装及升级使用说明.pdf 注意所有解压操作均要在 ...

  9. [学习笔记] BearPi-HM Nano - 开发环境搭建HelloWorld

    声明:         1. 该系列学习笔记整理自BearPi社区以及网络资源 2. 阅读本系列笔记需要部分单片机.电子技术和C语言基础 3. 才疏学浅,若有谬误,敬请指正 目录 一.简述 二.代码开 ...

最新文章

  1. 自制启动盘分享(30天倒计时)
  2. python中copy怎么用_python中的拷贝copy模块怎么使用?
  3. gdb 查看,执行汇编代码
  4. 分布式锁中的王者方案:Redisson
  5. 牛客小白月赛16练习
  6. mysql 天数减1_mysql 日期加减天数
  7. python库下载安装报错_python安装第三方库报错visual c++ 14.0 is required
  8. 如何防范电改下分布式光伏的风险
  9. 服务器拷贝数据库文件,服务器怎么拷贝数据库文件
  10. zte机顶盒怎么投屏_中兴iptv机顶盒可以投屏吗?
  11. 有限元工程应用方法-ANSYS单元刚度矩阵计算理论详解
  12. 立锜1.2V~5.5V稳压芯片RT9078-33GJ5
  13. 不同阶段,产品经理需要哪些能力?
  14. GLM 中的mat4
  15. 商品期货市场常见的量化交易策略
  16. java-URL短连接的生成(保证生成的唯一性)
  17. java读取apk、ipa包名、版本名、版本号等信息
  18. 《面向对象程序设计》课程设计
  19. 数据分析学习(一)数据分析和Numpy基础
  20. 写出漂亮代码的45个小技巧

热门文章

  1. vary渲染图没了_云渲染哪个好用?云渲染平台对比
  2. 台式电脑一般价钱多少_让你少走弯路,看我怎么花低价钱配出高配置的台式电脑的...
  3. a1278 win10声卡驱动_windows安装系列教程—驱动安装
  4. 三面腾讯,已拿offer
  5. 【深度学习】利用神网框架分割病理切片中的癌组织(胃)
  6. 【2021年度训练联盟热身训练赛第二场】Tip to be Palindrome(python)
  7. python【力扣LeetCode算法题库】136-只出现一次的数字
  8. python【蓝桥杯vip练习题库】ALGO-91 Anagrams问题
  9. 【Deep Learning笔记】循环神经网络
  10. Android移动开发之【Android实战项目】DAY4-项目发布到真机