您的位置:首页 > 运维架构 > Docker

docker学习笔记之Docker Compose与docker swarm

2017-10-31 16:33 706 查看

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


访问测试:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: