docker学习笔记之Docker Compose与docker swarm

来源:互联网 发布:java课程表管理系统 编辑:程序博客网 时间:2024/05/19 04:54

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 versiondocker-compose version 1.16.1, build 6d1ac219docker-py version: 2.5.1CPython version: 2.7.5OpenSSL 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:        - 80web2:    image: nginx:latest    volumes:        - ./nginx1:/usr/share/nginx/html     expose:        - 80web3:    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:v1EXPOSE 80COPY docker.repo /etc/yum.repos.d/RUN yum install -y httpdADD index.html /var/www/htmlCMD ["/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 noticedefaults    log global    mode http    option httplog    option dontlognull    timeout connect 5000ms    timeout client 50000ms    timeout server 50000ms    stats uri /statusfrontend balancer    bind 0.0.0.0:80    mode http    default_backend web_backendsbackend 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:2377This 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#开启集群

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

原创粉丝点击