docker-compose的简单使用并搭建zookeeper集群

发布时间 2023-08-25 14:17:30作者: 乐子不痞

简介

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。它能够简化在单个主机上使用多个容器的部署过程。使用 Docker Compose,您可以使用简单的 YAML 文件来定义应用程序的服务、网络和卷,并通过单个命令一键启动、停止和重建整个应用程序。

Docker Compose 允许您在一个文件中指定各种容器,每个容器称为一个服务。您可以为每个服务配置各种选项,例如容器的映像、端口映射、环境变量、卷挂载等。通过定义这些服务,您可以描述多个容器之间的关系和依赖关系。

使用 Docker Compose 的主要优点之一是它具有声明性的语法。您只需编写一次配置文件,就可以轻松定义应用程序的整个部署结构。此外,Docker Compose 还提供了一些便捷的命令,使您可以轻松地管理和监控应用程序。

安装

在成功安装了 docker 之后,可以通过运行以下命令来安装Docker Compose:

sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 创建软链接
sudo chmod +x /usr/local/bin/docker-compose

# 查看版本信息
docker-compose --version

使用步骤

使用Docker Compose可以按照以下步骤进行:

  1. 编写docker-compose.yml文件:在您的项目目录下创建一个docker-compose.yml文件,并使用文本编辑器(如vi、nano等)打开它。
  2. 定义服务:在docker-compose.yml文件中,通过定义services节来指定每个容器的配置。每个服务都可以包含容器的名称、镜像、端口映射、环境变量、挂载的卷等。
  3. 定义网络:除了服务配置,您还可以定义网络。在docker-compose.yml文件中,可以使用networks节定义您希望创建的网络。
  4. 添加卷:可以使用volumes节定义和配置容器的卷,以便进行数据持久化或与主机共享数据。
  5. 运行命令:进入到 docker-compose.yml 文件的所在的路径下,使用docker-compose命令来执行相关操作。以下是一些常见的命令示例:
    • docker-compose up:构建镜像并启动容器。
    • docker-compose down:停止并移除所有相关容器。
    • docker-compose start:启动已创建的容器。
    • docker-compose stop:停止正在运行的容器。
    • docker-compose restart:重启容器。
    • docker-compose ps:查看正在运行的容器状态。
    • docker-compose logs:查看容器的日志输出。
    • docker-compose exec:执行在容器内部运行的命令。
  6. 执行命令:根据需要,可以使用上述命令执行相应的操作,例如docker-compose up启动容器。

通过使用Docker Compose,您可以使用一个单一的命令或脚本来管理整个多容器应用程序,简化了复杂的部署和管理过程。

搭建 zookeeper 集群

首先,我们想使用 zookeeper 镜像生成三个容器,并在它们直接形成集群。

创建Zookeeper集群配置文件

  1. 在你选择的目录下创建一个名为docker-zookeeper的文件夹,并进入该文件夹:

    mkdir docker-zookeeper
    cd docker-zookeeper
    
  2. 创建一个名为docker-compose.yml的文件,并使用文本编辑器(如vi或nano)打开该文件:

    vi docker-compose.yml
    
  3. 将以下配置复制粘贴到docker-compose.yml文件中:

     restart: always # 当发生错误时自动重启
      hostname: zookeeper01
      container_name: zookeeper01
      privileged: true
      ports: # 端口
       - 2181:2181
      volumes: # 挂载数据卷
       - ./zookeeper01/data:/data
       - ./zookeeper01/datalog:/datalog
      environment:
       TZ: Asia/Shanghai
       ZOO_MY_ID: 1 # 节点ID
       ZOO_PORT: 2181 # zookeeper端口号
       ZOO_SERVERS: server.1=zookeeper01:2888:3888;2181 server.2=zookeeper02:2888:3888;2181 server.3=zookeeper03:2888:3888;2181 # zookeeper节点列表
      networks:
       - mynet  # 自定义网络名
    
     zookeeper02:
      image: zookeeper:3.5.7
      restart: always
      hostname: zookeeper02
      container_name: zookeeper02
      privileged: true
      ports:
       - 2182:2181
      volumes:
       - ./zookeeper02/data:/data
       - ./zookeeper02/datalog:/datalog
      environment:
       TZ: Asia/Shanghai
       ZOO_MY_ID: 2
       ZOO_PORT: 2181
       ZOO_SERVERS: server.1=zookeeper01:2888:3888;2181 server.2=zookeeper02:2888:3888;2181 server.3=zookeeper03:2888:3888;2181
      networks:
       - mynet
    
     zookeeper03:
      image: zookeeper:3.5.7
      restart: always
      hostname: zookeeper03
      container_name: zookeeper03
      privileged: true
      ports:
       - 2183:2181
      volumes:
       - ./zookeeper03/data:/data
       - ./zookeeper03/datalog:/datalog
      environment:
       TZ: Asia/Shanghai
       ZOO_MY_ID: 3
       ZOO_PORT: 2181
       ZOO_SERVERS: server.1=zookeeper01:2888:3888;2181 server.2=zookeeper02:2888:3888;2181 server.3=zookeeper03:2888:3888;2181
      networks:
       - mynet
    
    networks:
     mynet: # 自定义网络名
    
    
  4. 保存并关闭文件。

启动Zookeeper容器

  1. 返回到docker-zookeeper文件夹,并运行以下命令以启动Zookeeper容器:

    docker-compose up -d
    
  2. 运行命令docker ps -a来验证三个Zookeeper容器是否正在运行。

  3. 运行命令docker exec -it zookeeper01 zkServer.sh status 查看zookeeper容器状态。

    ZooKeeper JMX enabled by default
    Using config: /conf/zoo.cfg
    Client port found: 2181. Client address: localhost.
    Mode: leader
    

集群部署成功!