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
相关推荐
龙月5 分钟前
dozzle监控多节点docker容器日志和指标
docker
NF禾凡5 分钟前
练习nginx 的https的搭建
运维·nginx
PyHaVolask6 分钟前
SQLMap自动化注入工具
运维·自动化·sqlmap
DARLING Zero two♡8 分钟前
【Linux操作系统】简学深悟启示录:线程同步与互斥
linux·运维·服务器
要站在顶端9 分钟前
Jenkins动态绑定节点设备ID:多物理机USB设备适配方案
运维·jenkins·cocoa
梁萌11 分钟前
微服务任务调度XXL-JOB实战(docker)
docker·微服务·xxl-job·定时任务
hhwyqwqhhwy12 分钟前
linux 驱动iic
linux·运维·服务器
知识分享小能手17 分钟前
CentOS Stream 9入门学习教程,从入门到精通, CentOS Stream 9中的文件和目录管理(3)
linux·学习·centos
Sally_xy17 分钟前
使用 Jenkins
运维·jenkins
一只努力学习的Cat.18 分钟前
Linux:NAPT等其他补充内容
linux·运维·网络