当前位置 博文首页 > 文章内容

    Lockey23的博客:docker学习笔记之Docker Compose与docker swarm

    作者:shunshunshun18 栏目:未分类 时间:2021-12-02 22:43:28

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    Docker Compose

    Docker Compose 将所管理的容器分为三层,工程(project),服务(service)以及容器(contaienr)。Docker Compose 运行的目录下的所有文件(docker-compose.yml, extends 文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖。一个服务当中可包括多个容器实例,Docker Compose 并没有解决负载均衡的问题,因此需要借助其他工具实现服务发现及负载均衡。

    Docker Compose 是一个用来创建和运行多容器应用的工具。

    安装 Docker Compose:

    方式 1:(官方推荐,但是太慢)

    # curl -L https://github.com/docker/compose/releases/download/1.6.2/docker-compose-`uname
    -s`-`uname -m` > /usr/local/bin/docker-compose
    # chmod +x /usr/local/bin/docker-compose
    

    方式 2:(推荐)

        # tar -xzvf pip-x.tar.gz
        # cd pip-x
        # python setup.py install
        # pip install docker-compose
    

    查看docker-compose信息:

    [root@foundation5 compose]# docker-compose version
    docker-compose version 1.16.1, build 6d1ac219
    docker-py version: 2.5.1
    CPython version: 2.7.5
    OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013
    

    使用docker-compose搭建一个负载均衡应用

    3个web 容器(real servers,nginx),以及 1 个 haproxy 容器(负载均衡)。

    项目结构

    [root@foundation5 compose]# tree

    .
        ├── docker-compose.yml
        ├── haproxy
        │   └── haproxy.cfg
        ├── httpd
        │   ├── Dockerfile
        │   ├── docker.repo
        │   └── index.html
        ├── nginx1
        │   └── index.html
        └── nginx2
            └── index.html
    

    [root@foundation5 compose]# cat docker-compose.yml

    web1:
        build: ./httpd
        expose:
            - 80
    
    web2:
        image: nginx:latest
        volumes:
            - ./nginx1:/usr/share/nginx/html 
        expose:
            - 80
    
    web3:
        image: nginx
        volumes:
            - ./nginx2:/usr/share/nginx/html
        expose:
            - 80 
    
    haproxy:
        image: haproxy
        volumes:
            - ./haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro
        links:
            - web1
            - web2
            - web3
        ports:
            - "8080:80"
        expose:
            - 80
    

    [root@foundation5 compose]# cat httpd/Dockerfile

    FROM rhel7:v1
    EXPOSE 80
    COPY docker.repo /etc/yum.repos.d/
    RUN yum install -y httpd
    ADD index.html /var/www/html
    CMD ["/usr/sbin/httpd","-D","FOREGROUND"]
    

    [root@foundation5 compose]# cat haproxy/haproxy.cfg

    global
        log 127.0.0.1 local0
        log 127.0.0.1 local1 notice
    defaults
        log global
        mode http
        option httplog
        option dontlognull
        timeout connect 5000ms
        timeout client 50000ms
        timeout server 50000ms
        stats uri /status
    frontend balancer
        bind 0.0.0.0:80
        mode http
        default_backend web_backends
    backend web_backends
        mode http
        option forwardfor
        balance roundrobin
        server weba web1:80 check
        server webb web2:80 check
        server webc web3:80 check
        option httpchk GET /
        http-check expect status 200
    

    在该目录下执行 docker-compose up 命令,一个负载均衡集群就起来了

    这里写图片描述
    这里写图片描述

    这里写图片描述

    当我们干掉其中一个后端server的时候服务正常,管理端有提示:
    这里写图片描述

    访问/status 可以查看到 haproxy 的统计信息
    这里写图片描述
    ctrl+c终止进程
    这里写图片描述

    当挂掉的节点服务起来后会自动加入负载均衡集群,管理端也会有提示。

    docker swarm

    只需要在一个节点上运行docker swarm init,然后在其他节点上运行加入命令即可
    主机3作为manager,1、2作为join节点:

    [root@vm72-3 ~]# docker swarm init
    [root@vm72-2 ~]# docker swarm join \
    >     --token SWMTKN-1-51igcdpg4cbgaokq535qis01osel396of153sdlp8k0ljn0rou-2m9sltwkc4uq1vfmp79ous0e4 \
    >     172.25.5.33:2377
    This node joined a swarm as a worker.
    

    创建具有6个副本的集群(以nginx应用为例)

    [root@vm72-3 ~]# docker service create --name  web --replicas 6 --publish 8080:80 nginx
    

    这里写图片描述
    可以改变每一个容器的默认发布页,然后就行负载均衡测试;
    可以关掉一些容器,然后会观察到集群会自动开启一些容器来补足副本个数,一般副本都是均匀分布在各个节点上的

    [root@vm72-3 ~]# for i in {1..10};do curl 172.25.5.31:8080 -w "\n";done
    

    这里写图片描述

    swarm监控容器visualizer

    使用:

    docker load -i visualizer.tar
    #倒入镜像
    docker service create --name vz --publish=8080:8080/tcp --constraint=node.role==manager --mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock dockersamples/visualizer:latest
    #开启监控
    
    [root@vm72-3 ~]# docker service create --name  web --replicas 6 --publish 8090:80 nginx
    #开启集群
    

    访问测试:
    这里写图片描述

    cs