CentOS7 安装 docker + zookeeper集群
- 前言
- 一、docker是什么?
- 二、在CentOS7中安装docker
- 三、zookeeper是什么?
- 四、使用docker安装zookeeper
- 五、遇到的问题
- 六、总结
前言
在微服务盛行的当下,docker在快速构建、测试以及部署应用程序中扮演着重要的角色,zookeeper则是分布式应用特别是dubbo微服务开发架构下不可或缺的成员,两者各司其职,在自己的“岗位”上发挥着巨大的作用。本文将简单介绍如何在CentOS7虚拟机中安装docker,并利用docker容器建立简单的zookeeper集群,为后续的学习搭建基础。
一、docker是什么?
- Docker 是一个开源的应用容器引擎,基于 Go 语言。
- 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
- 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
二、在CentOS7中安装docker
//官方安装脚本自动安装
sudo curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
//启动docker
sudo service docker start
//测试一下
sudo docker run hello-world
//设置开机启动
sudo systemctl enable docker
//基本命令
(1)sudo docker images --查看镜像
(2)sudo docker ps --查看容器
(3)docker start 容器ID --启动一个或多个已经被停止的容器
(4)docker stop 容器ID --停止一个运行中的容器
(5)docker restart 容器ID --重启容器
(6)sudo docker rm 容器ID --删除容器
(7)等等......
学习网址:(https://www.runoob.com/docker/docker-command-manual.html)三、zookeeper是什么?
zookeeper,英/'zuːkiːpə/,动物园管理员,将分布式系统比作动物园,那么Zookeeper就是用来管理分布式应用的。其官方定义为:
是一个开源的分布式应用的服务,提供了更高级别的服务,包括:同步、配置维护、分组和命名。主要目标:通过与标准文件系统一致的组织结果的命名空间,允许分布式进程之间可以进行同步。功能:提供了优质的高性能、高可用性、和严格有序的访问。
四、使用docker安装zookeeper
# 查看zookeeper镜像
sudo docker search zookeeper
# 拉取镜像
sudo docker pull zookeeper
# 设置docker容器通讯网络
sudo docker network create --driver bridge --subnet=172.18.0.0/16 --gateway=172.18.0.1 zknet
# 创建容器数据文件夹
sudo mkdir /usr/local/zookeeper-cluster
sudo mkdir /usr/local/zookeeper-cluster/node1
sudo mkdir /usr/local/zookeeper-cluster/node2
sudo mkdir /usr/local/zookeeper-cluster/node3
# 启动容器
sudo docker run -d -p 2181:2181 --name zookeeper_node1 --privileged --restart always --network zknet --ip 172.18.0.2 \
-v /usr/local/zookeeper-cluster/node1/volumes/data:/data \
-v /usr/local/zookeeper-cluster/node1/volumes/datalog:/datalog \
-v /usr/local/zookeeper-cluster/node1/volumes/logs:/logs \
-e ZOO_MY_ID=1 \
-e "ZOO_SERVERS=server.1=172.18.0.2:2888:3888;2181 server.2=172.18.0.3:2888:3888;2181 server.3=172.18.0.4:2888:3888;2181" 36b7f3aa2340
sudo docker run -d -p 2182:2181 --name zookeeper_node2 --privileged --restart always --network zknet --ip 172.18.0.3 \
-v /usr/local/zookeeper-cluster/node2/volumes/data:/data \
-v /usr/local/zookeeper-cluster/node2/volumes/datalog:/datalog \
-v /usr/local/zookeeper-cluster/node2/volumes/logs:/logs \
-e ZOO_MY_ID=2 \
-e "ZOO_SERVERS=server.1=172.18.0.2:2888:3888;2181 server.2=172.18.0.3:2888:3888;2181 server.3=172.18.0.4:2888:3888;2181" 36b7f3aa2340
sudo docker run -d -p 2183:2181 --name zookeeper_node3 --privileged --restart always --network zknet --ip 172.18.0.4 \
-v /usr/local/zookeeper-cluster/node3/volumes/data:/data \
-v /usr/local/zookeeper-cluster/node3/volumes/datalog:/datalog \
-v /usr/local/zookeeper-cluster/node3/volumes/logs:/logs \
-e ZOO_MY_ID=3 \
-e "ZOO_SERVERS=server.1=172.18.0.2:2888:3888;2181 server.2=172.18.0.3:2888:3888;2181 server.3=172.18.0.4:2888:3888;2181" 36b7f3aa2340
# 查看容器启动日志是否正常
sudo docker logs -f 153332ae44de
# 进入容器
sudo docker exec -it 153332ae44de bash
# 查看zk状态
./bin/ status
PS(容器启动参数介绍):
-d 后台运行容器
-p 容器内部端口随机映射到主机的端口
--name 容器名称
--privileged 是否让应用容器获取宿主机root权限
--restart 重启
--network 网络
--ip 指定容器IP
-v 绑定一个卷
-e 设置环境变量五、遇到的问题
容器之间不能通知宿主机的ip和端口进行通信。
原因:在默认的Docker网络模式下,容器存在各自的IP,通过宿主机的IP+映射端口是不能找到对方的。
学习:
# 查看docker网络模式
sudo docker network ls
Docker有三种网络模式,bridge、host、none,默认是bridge。
(1) bridge:此模式为每一个容器分配自己的IP,并将容器连接到一个docker0虚拟网桥,通过docker0网桥才能与宿主机通信。也就是说,此模式下是不能用宿主机的IP+容器映射端口来进行容器之间的通信的。
(2) host:使用宿主机的IP和端口。Docker容器之间的通信用宿主机的IP+容器映射端口.
(3) none:无网络。
所以就需要创建自己的bridge网络,并且在创建容器的时候指定容器的ip,这样子就可以通过指定的IP和映射端口进行通信。
# 创建自己的bridge网络
sudo docker network create --driver bridge --subnet=172.18.0.0/16 --gateway=172.18.0.1 zknet
# 在启动容器时指定网络和IP
--network zknet --ip 172.18.0.3
这时候启动容器的时候就可以进行正常的通信了。六、总结
至此,在Centos7虚拟机上安装的zookeeper集群已经可以在个人的学习中进行简单的使用,关于zookeeper和docker更深入的知识可以在以后的使用过程中慢慢学习和积累,这里只是简单的对安装过程进行简单的阐述,希望对一些跟我一样刚刚开始学习的同学有用,也欢迎大家提出批评指教。
















