Docker compose(多容器架构实现负载均衡)

版权声明:本文为博主原创文章,未经博主允许不得转载。 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

猜你喜欢

转载自blog.csdn.net/Hannah_zh/article/details/84196990
今日推荐