zoukankan      html  css  js  c++  java
  • docker-swarm容器集群

    docker-swarm容器集群

        最近接手公司的一个项目,原先是用docker-swarm部署的,所以借此机会学习了一下docker-swarm中,是如何来部署服务的,以及不同容器之间是如何连接相同的网络来进行通信的。

        1、部署服务

        1)docker stack deploy

        用法:docker stack deploy [OPTIONS] STACK,其中 -c 参数指定 compose 文件名

        说明:docker stack deploy命令用于部署新的堆栈或更新现有堆栈。从群集中的compose文件或dab文件创建和更新堆栈,必须以管理员节点为目标运行此命令

        2)具体使用

        在yaml文件所在的目录下,执行以下命令:

        docker stack deploy -c  docker-compose.yml example

        部署的服务名称则以example_为前缀:example_SERVICE

        下面是yaml文件

        redis.yaml

     1 version: '3.6'
     2 services:
     3   wisdom-test-redis:
     4     image: 172.28.*.*/redis:5.0.3
     5     container_name: wisdom-test-redis
     6     ports:
     7     - 36379:6379
     8     volumes:
     9     - v2-test-redis-volumn:/data
    10     command: redis-server --appendonly yes
    11     deploy:
    12       replicas: 1
    13       restart_policy:
    14         condition: on-failure
    15 volumes:
    16   v2-test-redis-volumn:
    17     driver: local
    18     driver_opts:
    19       type: "nfs"
    20       o: "addr=172.28.*.*,rw"
    21       device: ":/data/www/codes/redis-test/data"
    22 
    23 networks:
    24   wisdom-net:
    25     driver: overlay

         wisdom.yaml

     1 version: '3.6'
     2 services:
     3   wisdom:
     4     image: 172.28.*.*/php-swoole:7.4.6-1
     5     ports:
     6     - 9512:9501
     7     volumes:
     8     - app_backend:/easyswoole/
     9     command: ["php", "/easyswoole/vendor/easyswoole/easyswoole/bin/easyswoole", "start", "produce"]
    10     configs:
    11       - source: php_memory_ini
    12         target: /usr/local/etc/php/conf.d/uploads.ini
    13     deploy:
    14       replicas: 2
    15       placement:
    16         constraints:
    17           - node.role == manager
    18       restart_policy:
    19         condition: on-failure
    20 volumes:
    21   app_backend:
    22     driver: local
    23     driver_opts:
    24       type: "nfs"
    25       o: "addr=172.28.*.*,rw"
    26       device: ":/data/www/codes/wisdom-v2-test"
    27 
    28 configs:
    29   php_memory_ini:
    30     external: true
    31 
    32 networks:
    33   wisdom-net:
    34     driver: overlay

        举个栗子:

     1 $ docker stack deploy --compose-file docker-compose.yml vossibility
     2 
     3 Creating network vossibility_vossibility
     4 Creating network vossibility_default
     5 Creating service vossibility_nsqd
     6 Creating service vossibility_logstash
     7 Creating service vossibility_elasticsearch
     8 Creating service vossibility_kibana
     9 Creating service vossibility_ghollector
    10 Creating service vossibility_lookupd

        延伸一下: docker statck 相关操作

        3)stack相关操作

        docker stack deploy  部署新的堆栈或更新现有堆栈

        docker stack ls  列出现有堆栈

        docker stack rm 删除堆栈

        docker stack services STACK  列出堆栈中的服务

        

        docker stack ps STACK  列出堆栈中的任务

        

        说明:上图中说明,使用docker stack ps 可以看到当前堆栈中的所有服务,NODE一栏表示的是该服务所在的结点名称,这里有01和03两个不同的结点。

        注意:使用docker ps只能看到当前节点上面部署的容器

        docker node ls   结点列表

        

       说明:ID一列带*号的就是主节点,只有这个主节点才能查看节点列表,从节点不能使用此命令查看

        2、ip地址

        这里的docker-swarm集群有两个结点,拿其中一台机器来说:

        V_CT_*_*_WEB_02

        有下面三个ip地址:

        ip: 192.168.*.1  eth0物理网卡(内网)

        eip:  10.85.*.71    docker swarm集群分配的ip

        内网ip: 172.28.*.*  docker虚拟网卡分配的ip

        3、容器网络

        1)容器网络相关命令

        docker network ls

        

        说明:使用yaml文件创建的服务,docker会自动创建网络,默认是以服务名称_default来命名的

       docker network create   创建一个新的网络连接

        用法:docker network create [OPTIONS] NETWORK

        docker network inspect NETWORK   查看网络详情

        a. 01结点上面查看wisdom_default

        

        b. 03结点上面查看wisdom_default

        

        docker inspect CONTAINER

         其中我们看下Networks里面的信息,是容器所在的网络相关信息

        

        2)容器通信

       现在有一个问题:容器与容器之间是隔离的,比如我这里用到的php和redis,实际项目中是需要这两者配合使用的,现在它们之间要通信的话,就必须在同一个网络中。那么如何知道它们是否在同一个容器中呢?

       解决方案:

       a. 查看:使用上面docker inspect CONTAINER,查看各个容器所在网络地址是否为同一个

       b. 如果不在,就需要将容器添加进同一个网络中

       docker network connect 命令是用于将docker容器连接到某个网络中,或者与其他容器建联,容器可以使用容器名或者容器ID。

       使用如下:

       docker network connect wisdom_default CONTAINER

       c. 最后是确认

       使用docker exec进入到其中一个容器, ping OTHER_CONTAINER  如果可以ping通,说明这两个容器之间可以互相通信

       补充一下:如何重启

       docker service scale wisdom-v2-test_wisdom=0;    (先把副本数设为0)
       docker service scale wisdom-v2-test_wisdom=2;   (这里是有两个节点)

  • 相关阅读:
    02-model设计
    01-开发环境搭建
    04-Uwsgi配置启动Nginx虚拟主机配置
    03-MySQL安装与配置
    02-Nginx配置
    01-Nginx安装
    22-注册、登录、验证登录
    21-django-pure-pagination分页
    (二)windows上使用docker
    Docker在windows7上的安装
  • 原文地址:https://www.cnblogs.com/hld123/p/14962824.html
Copyright © 2011-2022 走看看