Docker--compose实现负载均衡

Docker Compose是一个用于编排多容器应用的工具,通过docker-compose.yml文件定义和管理容器。本文介绍了如何部署Compose,包括设置二进制文件、编写配置文件、创建测试页面、使用haproxy进行负载均衡,以及导入镜像和运行应用。最终通过日志信息和网页状态检查服务运行情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

compose

Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器,使用Docker Compose不再需要使用shell脚本来启动容器。

Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景。

docker-compose默认的模板文件是 docker-compose.yml,其中定义的每个服务都必须通过 image 指令指定镜像或 build 指令(需要 Dockerfile)来自动构建。

Docker Compose 将所管理的容器分为三层,工程(project),服务(service)以及容器 (contaienr)。
Docker Compose 运行的目录下的所有文件(docker-compose.yml, extends 文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖。一个服务当中可包括多个容器实例,Docker Compose 并没有解决负载均衡的问题,因此需要借助其他工具实现服务发现及负载均衡。
Docker Compose 是一个用来创建和运行多容器应用的工具。使用 Compose 首先需要编写Compose 文件来描述多个容器服务以及之间的关联,然后通过命令根据配置启动所有的容器。 Dockerfile 可以定义一个容器,而一个 Compose 的模板文件(YAML 格式)可以定义一个 包含多个相互关联容器的应用。

使用Compose 基本上分为三步
(1)Dockerfile 定义应用的运行环境
(2)docker-compose.yml 定义组成应用的各服务
(3)docker-compose up 启动整个应用
部署compose

1.二进制文件 docker-compose-Linux-x86_64-1.22.0移到 /usr/local/bin/,赋予执行权限

[root@server1 ~]# mv docker-compose-Linux-x86_64-1.22.0 /usr/local/bin/docker-compose
[root@server1 ~]# chmod +x /usr/local/bin/docker-compose

2.编写docker-compose.yml

[root@server1 ~]# cd /tmp/
[root@server1 tmp]# cd docker/
[root@server1 docker]# mkdir compose
[root@server1 docker]# cd compose/
[root@server1 compose]# vim docker-compose.yml
[root@server1 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@server1 compose]# mkdir web1
[root@server1 compose]# mkdir web2
[root@server1 compose]# echo web1 > web1/index.html
[root@server1 compose]# echo web2 > web2/index.html

4.用haproxy实现负载均衡

[root@server1 compose]# mkdir haproxy
[root@server1 compose]# cd haproxy/
[root@server1 haproxy]# vim haproxy.cfg
[root@server1 haproxy]# cat 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@server1 ~]# docker load -i nginx.tar 
[root@server1 ~]# docker load -i haproxy.tar 
[root@server1 ~]# cd /tmp/docker/compose/haproxy/
[root@server1 haproxy]# docker-compose up -d
Creating compose_web2_1 ... done
Creating compose_web1_1 ... done
Creating compose_haproxy_1 ... done

日志信息

[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 

在这里插入图片描述

6.测试

[root@server1 haproxy]# curl 172.25.68.1
web1
[root@server1 haproxy]# curl 172.25.68.1
web2
[root@server1 haproxy]# curl 172.25.68.1
web1
[root@server1 haproxy]# curl 172.25.68.1
web2

在这里插入图片描述

日志信息

[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 
web1_1     | 172.17.0.4 - - [05/Jun/2019:08:41:00 +0000] "GET / HTTP/1.1" 200 5 "-" "curl/7.29.0" "-"
web1_1     | 172.17.0.4 - - [05/Jun/2019:08:41:02 +0000] "GET / HTTP/1.1" 200 5 "-" "curl/7.29.0" "-"
web2_1     | 172.17.0.4 - - [05/Jun/2019:08:41:01 +0000] "GET / HTTP/1.1" 200 5 "-" "curl/7.29.0" "-"
web2_1     | 172.17.0.4 - - [05/Jun/2019:08:41:03 +0000] "GET / HTTP/1.1" 200 5 "-" "curl/7.29.0" "-"

在这里插入图片描述

网页查看服务状态
172.25.68.1/status
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值