一、概念
Docker Compose是一个用来定义和运行复杂应用的Docker工具。一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose不再需要使用shell脚本来启动容器。
Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景。
基于python语言实现,可以让用户在集群中部署分布式应用。解决了容器与容器之间如何管理编排的问题。
- 服务(services):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
- 项目:由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml文件中定义。
下载方式:
sudo curl -L "https://github.com/docker/compose/releases/download/1.28.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
二、部署haproxy服务,调度web1,web2两台容器
mkdir /docker-compose/
vim docker-compose.yml
version: "2.2" #docker-compose版本
services: #启动的服务
web1: #容器名称
image: nginx #使用的镜像
networks: #使用的网络
- mynet
volumes: #挂载的数据卷
- "./web1:/usr/share/nginx/html"
web2:
image: nginx
networks:
- mynet
volumes:
- "./web2:/usr/share/nginx/html"
haproxy:
image: haproxy
networks:
- mynet
ports: #影射的端口
- "80:80"
volumes:
- "/docker-compose/haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg"
networks:
mynet:
cd /docker-compose/
mkdir web{1..2}
mkdir haproxy/
echo www.web2.com > web2/index.html
echo www.web1.com > web1/index.html
cat haproxy/haproxy.cfg
global
maxconn 65535
stats socket /var/run/haproxy.stat mode 600 level admin
log 127.0.0.1 local0
uid 200
gid 200
#chroot /var/empty
daemon
defaults
mode http
log global
option httplog
option dontlognull
monitor-uri /monitoruri
maxconn 8000
timeout client 30s
retries 2
option redispatch
timeout connect 5s
timeout server 5s
stats uri /status
# The public 'www' address in the DMZ
frontend public #前端名称public,任意起
bind *:80 name clear #监听所有80端口
default_backend dynamic #转发到后端,后端服务名称dynamic
backend dynamic #后端配置,名称上下关联
balance roundrobin
server app1 web1:80 check inter 1000 #容器的ip不确定,因此以容器名称web1,web2确定主机
server app2 web2:80 check inter 1000 #app1,app2为随意名称,显示在haproxy前端
#down掉一个容器
docker-compose stop web1