7-Docker编配和服务发现

Docker编配和服务发现

7.1 Docker Compose

  1. 安装Docker Compose(通过Pip安装)

    wget https://bootstrap.pypa.io/get-pip.py –no-check-certificate

    sudo python get-pip.py

    sudo pip install -U docker-compose

    查看Docker Compose是否安装成功:

  2. 为了演示Compose是如何工作的,这里使用一个Python Flask应用作为例子。

    2.1 获取示例应用

    mkdir composeapp
    
    cd composeapp
    
    获取应用程序源代码:wget https://www.dockerbook.com/code/7/composeapp/app.py
    
        注:Flask追踪保存在Redis里的计数器。(每次访问根路径/时,计数器会自增。)
    
    获取requirements.txt保存应用程序的依赖关系:wget https://www.dockerbook.com/code/7/composeapp/requirements.txt
    
    获取Dockerfile:wget https://www.dockerbook.com/code/7/composeapp/Dockerfile
    
    sudo docker build -t jamtur01/composeapp .
    

    2.2 docker-compose.yml文件

    获取docker-compose.yml文件(具体代码参照下图):wget https://www.dockerbook.com/code/7/composeapp/docker-compose.yml
    

        注:这里从Docker Hub上的默认Redis镜像直接创建Redis容器;
            YAML文件最后使用links将redis服务连接web服务。
    

    2.3 运行Compose

     a. 在composeapp文件夹下执行服务:sudo docker-compose up
    


    注: 如果使用Ctrl+C停止Compose运行,也会停止运行的服务(如下图)。
    

     b. 以守护进程方式运行Compose:sudo docker-compose up -d
    
        查看在宿主机上运行的示例应用(如下图)
    

       当刷新网页后,发现这个值在增加(如下图)。
    

    2.4 使用Compose

     a. 使用守护进程模式重启Docker Compose
    
         sudo docker-compose up -d
    
     b. 查看docker_compose.yml文件正在运行的服务(如下图)
    
         sudo docker-compose ps 
    

     c. 显示Docker-compose服务的日志(如下图)
    
         sudo docker-compose logs
    

     d. 停止正在运行的服务(如下图)
    
          sudo docker-compose stop
    

        验证服务是否已经停止(如下图):
    

     e. 删除Docker Compose服务
    
           sudo docker-compose rm
    

7.2 Consul、服务发现和Docker

  1. 构建Consul镜像

    mkdir consul

    cd consul

    获取Dockerfile:wget https://www.dockerbook.com/code/7/consul/Dockerfile

    获取consul配置文件:wget https://www.dockerbook.com/code/7/consul/consul.json

    sudo docker build -t jamtur01/consul .

  2. 在本地测试Consul容器

    2.1 执行一个本地Consul节点

    sudo docker run -p 8500:8500 -p 53:53/udp -h node1 jamtur01/consul -server -bootstrap

    注:(1) 这里给consul可执行文件传递的标志:-server告诉Consul代理以服务器的模式运行;-bootstrap告诉Consul本节点可以自选举为集群领导者。
       (2) 如果运行上面命令行出现如下图错误。解决方法:将第1步的Dockerfile里的开放端口中的53/udp改为其他端口(这里改为54/udp),并将consul.json中的53改为相应端口(这里改为54)。
    

    正确运行后如下图:

    2.2 通过Consul网页界面来查看节点情况,在浏览器里打开本地IP的8500端口

  3. 使用Docker运行Cousul集群( 注:会在3个运行Docker守护进程的宿主机上运行Consul )

    3.1 在其他两个宿主机上拉取Consul镜像(前提是:已安装Docker)

       sudo docker pull jamtur01/consul
    

    3.2 模拟Consul集群,这里使用每台宿主机上的公共接口,这需要每台宿主机都有一个公共IP地址(这个地址也是Consul代理要绑定的到的地址)

    给三台宿主机分别设置公共IP(如下三图)
    



    3.3 将具有自启动的主机IP告诉其他宿主机(这里自启动主机IP:192.168.153.133), 在其他宿主机上运行下条命令:

    JOIN_IP=192.168.153.133
    

    3.4 获取各个宿主机的docker0的IP地址(查看后(如图):三者一样),并修改/etc/default/docker文件(修改样式完全一样(如图))



    3.5 修改完文件后,重启Docker守护进程

     sudo service docker restart
    
  4. 启动各宿主机上的Consul节点

    4.1 启动具有自启动功能的Consul节点,并查看其日志

      注:这里参数-bootstrap-expect 3指Consul集群中有多少代理,只有到达预定的节点数量,在日志中才能看到被选举为集群领导者
    

    4.2 启动其他节点(与上面启动命令很相似,但参数有变化)

    4.3 查看Consul领导者选举日志

    4.4 通过浏览Consul的网页界面,选择Consul服务也可以看到当前的状态

    4.5 测试Consul的DNS服务(dig命令)

  5. 配合Consul,在Docker里运行一个分布式服务

    5.1 构建分布式应用

    5.2 构建分布式客户端

    5.3 启动分布式应用

    5.4 启动分布式客户端

7.3 Docker Swarm

  1. 简介

    1.1 Docker Swarm是一个原生的Docker集群管理工具;

    1.2 Swarm将一组Docker主机作为一个虚拟的Docker主机来管理;

    1.3 Swarm有一个非常简单的架构,它将多台Docker主机作为一个集群,并在集群级别上以标准Docker API的形式提供服务。

  2. 安装Swarm(这里在两台主机上安装)

    sudo docker pull swarm

  3. 创建Swarm集群

    3.1 创建Docker Swarm:sudo docker run –rm swarm create

    3.2 在一台主机运行swarm代理

    3.3 在另一台主机上运行swarm代理

    3.4 查看代理的日志

    3.5 启动Swarm集群管理者

    3.6 在Swarm集群中运行docker info命令

  4. 创建容器

    4.1 通过循环创建6个Nginx容器

    4.2 Swarm在集群中执行docker ps的输出

  5. Swarm是如何决定容器应该在哪个节点上运行?

    答:过滤器和策略

    5.1 过滤器

    a. 约束过滤器; b. 亲和过滤器; c. 依赖过滤器; d. 端口过滤器; e. 健康过滤器
    

    5.2 策略

    a. 平铺策略; b. 紧凑策略; c. 随机策略
    

其他编配工具和组件

  1. Fleet和etcd

  2. Kubernetes

  3. Apache Mesos

  4. Helios

  5. Centurion

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值