1.docker-compose简介
-
Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。
-
Docker-Compose将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container)。
-
Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖。一个服务当中可包括多个容器实例,Docker-Compose并没有解决负载均衡的问题,因此需要借助其它工具实现服务发现及负载均衡。
-
Docker-Compose的工程配置文件默认为docker-compose.yml,可通过环境变量COMPOSE_FILE或-f参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器。 使用一个Dockerfile模板文件,可以让用户很方便的定义一个单独的应用容器。在工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个Web项目,除了Web服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。
-
Compose允许用户通过一个单独的docker-compose.yml模板文件(YAML
格式)来定义一组相关联的应用容器为一个项目(project)。 -
Docker-Compose项目由Python编写,调用Docker服务提供的API来对容器进行管理。因此,只要所操作的平台支持Docker API,就可以在其上利用Compose来进行编排管理。
2.部署docker-compose
[root@base1 ~]# ls
docker-engine-1.13.1-1.el7.centos.x86_64.rpm
docker-engine-selinux-1.13.1-1.el7.centos.noarch.rpm
[root@base1 ~]# yum install -y docker-engine-*
[root@base1 ~]# ls
docker-compose-Linux-x86_64-1.22.0 # 这是docker-compose的二进制文件,我们可以直接使用
haproxy.tar
ubuntu.tar
docker-engine-1.13.1-1.el7.centos.x86_64.rpm
lxcfs-2.0.5-3.el7.centos.x86_64.rpm
docker-engine-selinux-1.13.1-1.el7.centos.noarch.rpm
nginx.tar
[root@base1 ~]# mv docker-compose-Linux-x86_64-1.22.0 /usr/local/bin/docker-compose
[root@base1 ~]# chmod +x /usr/local/bin/docker-compose
[root@base1 ~]# cd /tmp/
[root@base1 tmp]# mkdir docker
[root@base1 tmp]# cd docker/
[root@base1 docker]# mkdir compose
[root@base1 docker]# cd compose/
[root@base1 compose]# vim docker-compose.yml
web1:
image: nginx
expose:
- 80
volumes:
- ./web1:/usr/share/nginx/html
web2:
image: nginx
expose:
- 80
volumes:
- ./web1:/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" # 对外暴露端口为80
[root@base1 compose]# mkdir web1
[root@base1 compose]# mkdir web2
[root@base1 compose]# echo web1 > web1/index.html # 修改默认发布目录,方便测试
[root@base1 compose]# echo web2 > web2/index.html
docker-compose借助haproxy实现负载均衡
[root@base1 compose]# mkdir haproxy
[root@base1 compose]# cd haproxy/
[root@base1 haproxy]# vim haproxy.cfg # Haproxy 的配置文件
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
default_backend web_backends
backend web_backends
balance roundrobin # 轮询算法
server base1 web1:80 check
server base2 web2:80 check
[root@base1 haproxy]# cd
[root@base1 ~]# docker load -i nginx.tar
[root@base1 ~]# docker load -i haproxy.tar
[root@base1 ~]# cd -
/tmp/docker/compose/haproxy
[root@base1 haproxy]# cd ..
[root@base1 compose]# docker-compose up -d # 自动启动所有的容器
测试负载均衡:
[root@foundation78 ~]# for i in {1..5};do curl 172.25.78.11;done
关闭docker-compose
[root@base1 compose]# docker-compose stop # 必须先关闭,才可以删除
[root@base1 compose]# docker-compose rm