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 #开启集群
访问测试:
相关文章推荐
- Docker学习笔记 — Swarm搭建Docker集群
- Docker学习笔记4: Docker-Compose—简化复杂容器应用的利器
- Docker学习笔记八:Swarm
- docker-compose学习笔记1
- Docker学习笔记4: Docker-Compose—简化复杂容器应用的利器
- docker-compose 学习笔记2
- Docker学习笔记 — Compose简介、安装与简单使用
- Docker学习笔记 - Docker Compose
- Docker学习笔记之compose
- Docker学习笔记(七)-如何创建docker swarm
- docker-compose version 2学习笔记
- Docker学习笔记 — Swarm搭建Docker集群
- Docker学习笔记八:Swarm
- Docker swarmkit学习笔记
- Docker SwarmKit 学习笔记 - 1 搭建实验环境
- Docker学习笔记3:CentOS7下安装Docker-Compose
- Docker学习笔记3:CentOS7下安装Docker-Compose
- Docker Swarm学习笔记(二)
- Docker学习笔记 — Swarm搭建Docker集群
- Docker Swarm学习笔记(二)