docker搭建haproxy实现负载均衡

华子目录

获取haproxy镜像

bash 复制代码
[root@docker-node1 ~]# docker pull haproxy:2.3

建立haproxy容器数据卷

  • conf目录数据卷
bash 复制代码
[root@docker-node1 ~]# mkdir /var/lib/docker/volumes/conf/

获取haproxy配置文件

bash 复制代码
[root@docker-node1 ~]# yum install haproxy -y --downloadonly --downloaddir=/mnt

[root@docker-node1 ~]# cd /mnt/

[root@docker-node1 mnt]# rpm2cpio haproxy-2.4.17-3.el9.x86_64.rpm | cpio -id

[root@docker-node1 mnt]# ls
etc  haproxy-2.4.17-3.el9.x86_64.rpm  usr  var
  • 配置文件cpconf数据卷
bash 复制代码
[root@docker-node1 mnt]# cd etc/haproxy/
[root@docker-node1 haproxy]# cp haproxy.cfg /var/lib/docker/volumes/conf/
  • 修改配置文件
bash 复制代码
[root@docker-node1 haproxy]# cd /var/lib/docker/volumes/conf/
[root@docker-node1 conf]# vim haproxy.cfg

编写yaml文件

bash 复制代码
[root@docker-node1 ~]# cd huazi/
[root@docker-node1 huazi]# vim haproxy.yml
services:
  web1:
    image: nginx:1.23
    container_name: webserver1
    restart: always
    expose:
      - 80
    volumes:
      - data_web1:/usr/share/nginx/html
    networks:
      - internel


  web2:
    image: nginx:1.23
    container_name: webserver2
    restart: always
    expose:
      - 80
    volumes:
      - data_web2:/usr/share/nginx/html
    networks:
      - internel


  haproxy:
    image: haproxy:2.3
    container_name: haproxy
    restart: always
    ports:
      - "80:80"
    volumes:
      - /var/lib/docker/volumes/conf/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg
    networks:
      - internel
      - externel


networks:
  internel:
    driver: bridge

  externel:
    driver: bridge

volumes:
  data_web1:
    name: data_web1

  data_web2:
    name: data_web2

运行

bash 复制代码
[root@docker-node1 huazi]# docker compose -f haproxy.yml up -d
bash 复制代码
[root@docker-node1 huazi]# docker compose -f haproxy.yml ps
NAME         IMAGE         COMMAND                   SERVICE   CREATED        STATUS                                                                                                                  PORTS
haproxy      haproxy:2.3   "docker-entrypoint.s..."   haproxy   13 hours ago   Up 13 hours   0                                                                                                          .0.0.0:80->80/tcp, :::80->80/tcp
webserver1   nginx:1.23    "/docker-entrypoint...."   web1      13 hours ago   Up 13 hours   8                                                                                                          0/tcp
webserver2   nginx:1.23    "/docker-entrypoint...."   web2      13 hours ago   Up 13 hours   8                                                                                                          0/tcp

测试

  • 建立测试网页
bash 复制代码
[root@docker-node1 huazi]# echo webserver1 > /var/lib/docker/volumes/data_web1/_data/index.html
[root@docker-node1 huazi]# echo webserver2 > /var/lib/docker/volumes/data_web2/_data/index.html
bash 复制代码
[root@docker-node1 huazi]# curl 172.25.254.100
webserver1
[root@docker-node1 huazi]# curl 172.25.254.100
webserver2
相关推荐
herderl8 分钟前
**僵尸进程(Zombie Process)** 和**孤儿进程(Orphan Process)**
linux·运维·服务器·网络·网络协议
lepton_yang19 分钟前
Zephyr下控制ESP32S3的GPIO口
linux·嵌入式硬件·esp32·zephyr
泽020233 分钟前
Linux 编译器 gcc 与 g++
linux·运维·服务器
G_H_S_3_1 小时前
【网络运维】Playbook项目实战:基于 Ansible Playbook 一键部署 LNMP 架构服务器
linux·运维·服务器·网络·ansible
豆芽脚脚1 小时前
docker compose再阿里云上无法使用的问题
阿里云·docker·容器
yuxb732 小时前
Ansible 学习笔记:变量事实管理、任务控制与文件部署
linux·运维·笔记
岚天start2 小时前
Linux sar命令详细使用指南
linux·运维·服务器·负载·sar·磁盘io·sysstat
遇见火星2 小时前
Jenkins全链路教程——Jenkins调用Maven构建项目
运维·jenkins·maven
十行代码九行报错4 小时前
Docker基础学习笔记
笔记·学习·docker