Docker Compose 将所管理的容器分为三层,工程(project),服务(service)以及容器(contaienr)
Docker Compose 运行的目录下的所有文件(docker-compose.yml, extends 文件或环境变量文件等)组成一个工程
若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖
一个服务当中可包括多个容器实例,Docker Compose 并没有解决负载均衡的问题,因此需要借助其他工具实现服务发现及负载均衡
Docker Compose 是一个用来创建和运行多容器应用的工具
使用 Compose 首先需要编写Compose 文件来描述多个容器服务以及之间的关联,然后通过命令根据配置启动所有的容器
Dockerfile 可以定义一个容器,而一个 Compose 的模板文件(YAML 格式)可以定义一个包含多个相互关联容器的应用
Compose 项目使用 python 编写,基于后面的实验中我们将学习的 Docker API 实现
实验目的
使用docker compose管理nginx、haproxy镜像,实现nginx网页的高可用
其实就是在一台宿主机上同时利用多个镜像拉起多个容器,实现负载均衡
搭建实验环境
主机信息 主机的功能
服务端server1(172.25.15.1) 安装好docker相关组件,配置好服务
测试端真机(172.25.15.250) 测试web负载均衡
server1:
compose的部署(1)从真机给server1传送compose的文件
(2)将docker compose的二进制文件移到 /usr/local/bin/,重命名,赋予执行权限
docker-compose version 查看版本
(3)编写docker-compose.yml
web1:
image: nginx
expose:
- 80
volumes:
- ./web1:/usr/share/nginx/html
web2:
image: nginx
expose:
- 80
volumes:
- ./web2:/usr/share/nginx/html
haproxy:
image: haproxy
volumes:
- ./haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro
links:
- web1
- web2
ports:
- “80:80”
expose:
- “80”
给虚拟机导入Nginx与Haproxy镜像
(3)查看镜像
编写测试用的测试页面
[root@server1 ~]# cd compose/
[root@server1 compose]# mkdir web1
[root@server1 compose]# mkdir web2
[root@server1 compose]# echo web1 > web1/index.html
[root@server1 compose]# echo web2 > web2/index.html
此处应为echo web2 > web2/index.html
配置haproxy负载均衡
log 127.0.0.1 local0 #日志输出设置,所有日志都记录在本机,通过local0输出
log 127.0.0.1 local1 notice #定义haproxy日志级别[error warringinfo debug]
defaults #默认设置
log global #引用全局的日志配置
mode http #所处理的类别,默认采用http模式,可配置称tcp作4层消息转发
option httplog #启用日志记录HTTP请求,默认haproxy日志记录是不记录HTTP请求日志的
option dontlognull #启用该项,日志中将不记录空连接。所谓空连接就是在上游的负载均衡器或者监控系统是为了探测该服务是否存活可用时,需要定期的连接或者获取某一固定的组件或页面,或者探测扫描端口是否在监听或开放等动作被称为空连接;官方文档中标注,如果该服务上游没有其他的负载均衡器的话,建议不要使用该参数,因为互联网上的恶意扫描或其他动作就不会被记录下来。
timeout connect 5000ms #haproxy和服务端建立连接的最大时长,其实设置为1秒就足够了。局域网内建立连接一般都是瞬间的
timeout client 50000ms #haproxy和客户端保持空闲连接的超时时长,在高并发下可稍微短一点,可设置为5秒以尽快释放连接
timeout server 50000ms #haproxy和服务端保持空闲连接的超时时长,局域网内建立连接很快,所以尽量设置短一些,特别是并发时如设置为1-3秒
stats uri /status #访问监控界面的uri
frontend balancer #frontend前端设置
bind 0.0.0.0:80 #这里建议使用0.0.0.0:80或*:80的方式,要不然做集群高可用的时候有问题,vip切换到其他机器就不能访问了。
default_backend web_backends #定义一个web_backends前端部分。此处将对应的请求转发给后端
backend web_backends
balance roundrobin #使用RR负载均衡算法(#banlance roundrobin 轮循,banlance source 保存session值,支持static-rr,leastconn,first,uri等参数)
server web1 web1:80 check #其中web1会在监控界面上显示
server web2 web2:80 check #其中web2会在监控界面上显示
测试(1)开启docker-compose(注意:执行docker-compose命令时,所在目录下,必须有docker-compose.yml文件)
(2)查看
(3)查看此时开启了三个容器
(4)浏览器访问:172.25.15.1
再次刷新
也可以在haproxy的监控页面查看
访问记录可以看日志
docker-compose logs ##可以查看日志记录
访问浏览器发现只有web2
可以看出监控页面显示
再次恢复web1