1,Docker Compose
(1)Docker Compose 将所管理的容器分为三层,工程(project),服务(service)以及容器 (contaienr)。
(2)Docker Compose 运行的目录下的所有文件(docker-compose.yml, extends 文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖。一个服务当中可包括多个容器实例,Docker Compose 并没有解决负载均衡的问题,因此需要借助其他工具实现服务发现及负载均衡。
(3)Docker Compose 是一个用来创建和运行多容器应用的工具。使用 Compose 首先需要编写Compose 文件来描述多个容器服务以及之间的关联,然后通过命令根据配置启动所有的容器。 Dockerfile 可以定义一个容器,而一个 Compose 的模板文件(YAML 格式)可以定义一个 包含多个相互关联容器的应用。
2,使用Compose 基本上分为三步
(1)Dockerfile 定义应用的运行环境
(2)docker-compose.yml 定义组成应用的各服务
(3)docker-compose up 启动整个应用
1.自己下载的二进制文件移到 /usr/local/bin/,赋予执行权限
[root@server1 hh]# mv docker-compose-Linux-x86_64-1.22.0 /usr/local/bin/docker-compose
[root@server1 hh]# chmod +x /usr/local/bin/docker-compose
2.编写docker-compose.yml
[root@docker1 ~]# cd /tmp
[root@docker1 tmp]# mkdir docker
[root@docker1 tmp]# cd docker/
[root@docker1 docker]# mkdir compose
[root@docker1 docker]# cd compose/
[root@docker1 compose]# vim docker-compose.yml
[root@docker1 compose]# cat 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"
3.编写测试用的测试页面
[root@docker1 compose]# mkdir web1
[root@docker1 compose]# mkdir web2
[root@docker1 compose]# echo web1 > web1/index.html
[root@docker1 compose]# echo web2 > web2/index.html
4.用haproxy实现负载均衡
[root@docker1 compose]# mkdir haproxy
[root@docker1 compose]# cd haproxy/
[root@docker1 haproxy]# vim 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
default_backend web_backends
backend web_backends
balance roundrobin
server server1 web1:80 check
server server2 web2:80 check
5.导入镜像,并运行compose
[root@docker1 ~]# docker load -i nginx.tar
[root@docker1 ~]# docker load -i haproxy.tar
[root@docker1 ~]# cd -
/tmp/docker/compose/haproxy
[root@docker1 haproxy]# docker-compose up -d
Creating compose_web1_1 ... done
Creating compose_web2_1 ... done
Creating compose_haproxy_1 ... done
[root@docker1 haproxy]# docker-compose logs ##可以查看日志记录
Attaching to compose_haproxy_1, compose_web2_1, compose_web1_1
haproxy_1 | <7>haproxy-systemd-wrapper: executing /usr/local/sbin/haproxy -p /run/haproxy.pid -f /usr/local/etc/haproxy/haproxy.cfg -Ds
6.测试:进入浏览器,输入http://172.25.26.1/
再刷新一下(实现了负载均衡)
访问http://172.25.26.1/status查看负载均衡状态
7.可以在日志记录查看
[root@server1 haproxy]# docker-compose logs
Attaching to compose_haproxy_1, compose_web1_1, compose_web2_1
haproxy_1 | <7>haproxy-systemd-wrapper: executing /usr/local/sbin/haproxy -p /run/haproxy.pid -f /usr/local/etc/haproxy/haproxy.cfg -Ds
[root@server1 haproxy]# docker-compose logs
Attaching to compose_haproxy_1, compose_web1_1, compose_web2_1
web1_1 | 172.17.0.8 - - [03/Jun/2019:10:18:58 +0000] "GET / HTTP/1.1" 200 5 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0" "-"
web1_1 | 172.17.0.8 - - [03/Jun/2019:10:19:02 +0000] "GET / HTTP/1.1" 200 5 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0" "-"
haproxy_1 | <7>haproxy-systemd-wrapper: executing /usr/local/sbin/haproxy -p /run/haproxy.pid -f /usr/local/etc/haproxy/haproxy.cfg -Ds
web2_1 | 172.17.0.8 - - [03/Jun/2019:10:19:01 +0000] "GET / HTTP/1.1" 200 5 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0" "-"
web2_1 | 172.17.0.8 - - [03/Jun/2019:10:19:08 +0000] "GET / HTTP/1.1" 200 5 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0" "-"
8.compose的关闭,开启,删除和运行
想要删除之前要先关闭
[root@server1 haproxy]# docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------------
compose_haproxy_1 /docker-entrypoint.sh hapr ... Up 0.0.0.0:80->80/tcp
compose_web1_1 nginx -g daemon off; Up 80/tcp
compose_web2_1 nginx -g daemon off; Up 80/tcp
[root@server1 haproxy]# docker stop compose_web1_1 ##停止节点1
compose_web1_1
[root@server1 haproxy]# docker-compose ps ##查看服务状态
Name Command State Ports
--------------------------------------------------------------------------------
compose_haproxy_1 /docker-entrypoint.sh hapr ... Up 0.0.0.0:80->80/tcp
compose_web1_1 nginx -g daemon off; Exit 0
compose_web2_1 nginx -g daemon off; Up 80/tcp
[root@server1 haproxy]# docker stop compose_web2_1
compose_web2_1
[root@server1 haproxy]# docker-compose ps
Name Command State Ports
--------------------------------------------------------------------------------
compose_haproxy_1 /docker-entrypoint.sh hapr ... Up 0.0.0.0:80->80/tcp
compose_web1_1 nginx -g daemon off; Exit 0
compose_web2_1 nginx -g daemon off; Exit 0
[root@server1 haproxy]#