版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Hannah_zh/article/details/84196990
一、基本知识
Docker Compose 将所管理的容器分为三层,工程(project),服务(service)以及容器(contaienr)。Docker Compose 运行的目录下的所有文件(docker-compose.yml, extends 文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖。一个服务当中可包括多个容器实例,Docker Compose 并没有解决负载均衡的问题,因此需要借助其他工具实现服务发现及负载均衡。
Docker Compose 是一个用来创建和运行多容器应用的工具。使用 Compose 首先需要编写
Compose 文件来描述多个容器服务以及之间的关联,然后通过命令根据配置启动所有的容器。
Dockerfile 可以定义一个容器,而一个 Compose 的模板文件(YAML 格式)可以定义一个包含多个相互关联容器的应用。Compose 项目使用 python 编写,基于后面的实验中我们将学习的 Docker API 实现。
二、多容器架构部署
环境部署:
rhel7.3物理机
准备docker容器:
- haproxy容器
[root@foundation51 ~]# docker load -i haproxy.tar
Loaded image: haproxy:latest
- apache容器
[root@foundation51 ~]# docker images rhel7
rhel7 apache b5543a753b6d 3 days ago
具体部署
1、部署compose
[root@foundation51 ~]# cd /tmp/docker/
[root@foundation51 docker]# mkdir compose
[root@foundation51 docker]# cd compose/
[root@foundation51 compose]# vim docker-compose.yml
web1:
image: rhel7:apache ##apache镜像
expose:
- 80
volumes:
- ./web1:/var/www/html ##挂载
web2:
image: nginx ##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
2、编写web测试页
[root@foundation51 ~]# cd /tmp/docker/
[root@foundation51 docker]# mkdir compose
[root@foundation51 docker]# cd compose/
[root@foundation51 compose]# mkdir web1 web2
[root@foundation51 compose]# vim web1/index.html
<h1>web1</h1>
[root@foundation120 compose]# vim web2/index.html
<h1>web2</h1>
3、负载均衡
[root@foundation51 compose]# mkdir haproxy
[root@foundation51 compose]# vim 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
default_backend web_backends
backend web_backends
balance roundrobin
server weba web1:80 check
server webb web2:80 check
4、关闭httpd服务,关闭80端口
[root@foundation51 ~]# systemctl stop httpd
5、下载二进制目录到/bin下,并改名为docker-compose
[root@foundation51 ~]# cd /bin/
[root@foundation51 bin]# cp /var/ftp/pub/Docker/docker-compose-Linux-x86_64-1.16.1 /bin/docker-compose
[root@foundation51 bin]# chmod 715 docker-compose
[root@foundation51 bin]# cd /tmp/docker/compose/
[root@foundation51 compose]# docker-compose up ##第一次开启服务需要up,再次直接start、stop
[root@foundation51 compose]# docker-compose start ##开启
[root@foundation51 compose]# docker-compose stop ##关闭
6、负载均衡测试
- 查看80端口
- 负载均衡
- 172.25.51.250/status
- web1停止
[root@foundation51 ~]# docker stop compose_web1_1
compose_web1_1
[root@foundation51 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5ab40457f22f haproxy "/docker-entrypoin..." 10 minutes ago Up 9 minutes 0.0.0.0:80->80/tcp compose_haproxy_1
2a04a3373543 nginx "nginx -g 'daemon ..." 10 minutes ago Up 9 minutes 80/tcp compose_web2_1
715e8e2f6f11 registry:2.3.1 "/bin/registry /et..." 2 days ago Up About an hour 0.0.0.0:443->443/tcp, 5000/tcp registry
示图:web1状态stop
- web1恢复正常
[root@foundation51 ~]# docker start compose_web1_1
[root@foundation51 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5ab40457f22f haproxy "/docker-entrypoin..." 13 minutes ago Up 11 minutes 0.0.0.0:80->80/tcp compose_haproxy_1
2a04a3373543 nginx "nginx -g 'daemon ..." 13 minutes ago Up 11 minutes 80/tcp compose_web2_1
431f3417bb35 rhel7:apache "/usr/sbin/httpd -..." 13 minutes ago Up 9 seconds 80/tcp compose_web1_1
715e8e2f6f11 registry:2.3.1 "/bin/registry /et..." 2 days ago Up About an hour 0.0.0.0:443->443/tcp, 5000/tcp registry