docker学习笔记之Docker Compose与docker swarm

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 命令,一个负载均衡集群就起来了

docker学习笔记之Docker Compose与docker swarm_第1张图片
docker学习笔记之Docker Compose与docker swarm_第2张图片

docker学习笔记之Docker Compose与docker swarm_第3张图片

当我们干掉其中一个后端server的时候服务正常,管理端有提示:
docker学习笔记之Docker Compose与docker swarm_第4张图片

访问/status 可以查看到 haproxy 的统计信息
docker学习笔记之Docker Compose与docker swarm_第5张图片
ctrl+c终止进程
docker学习笔记之Docker Compose与docker swarm_第6张图片

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

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

docker学习笔记之Docker Compose与docker swarm_第7张图片
可以改变每一个容器的默认发布页,然后就行负载均衡测试;
可以关掉一些容器,然后会观察到集群会自动开启一些容器来补足副本个数,一般副本都是均匀分布在各个节点上的

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

docker学习笔记之Docker Compose与docker swarm_第8张图片

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
#开启集群

访问测试:
docker学习笔记之Docker Compose与docker swarm_第9张图片

你可能感兴趣的:(运维开发,docker)