实战:Docker构建Haproxy负载均衡镜像

生产案例:构建 haproxy镜像

准备相关文件

bash 复制代码
#准备haproxy源码文件
[root@ubuntu2404 web]#pwd
/data/dockerfile/web
[root@ubuntu2404 web]#mkdir -p haproxy/ubuntu
[root@ubuntu2404 web]#cd haproxy/ubuntu
[root@ubuntu2404 ubuntu]#wget https://www.haproxy.org/download/3.0/src/haproxy-3.0.11.tar.gz

#准备haproxy启动脚本
[root@ubuntu2404 ubuntu]#vim run_haproxy.sh
#!/bin/bash
haproxy -f /etc/haproxy/haproxy.cfg
tail -f /etc/hosts
[root@ubuntu2404 ubuntu]#chmod +x run_haproxy.sh

准备haproxy配置文件

bash 复制代码
#准备haproxy配置文件
[root@ubuntu2404 ubuntu]#vim haproxy.cfg
global
    nbthread 2
    daemon
    pidfile /var/run/haproxy.pid
    user haproxy
    group haproxy
    log stdout format raw local0
    tune.ssl.default-dh-param 2048
    maxconn 4000
defaults
    log global
    mode http
    option httplog
    option dontlognull
    option http-keep-alive
    option forwardfor
    timeout connect 300000ms
    timeout client  300000ms
    timeout server  300000ms
    retries 3
listen stats
    bind 0.0.0.0:9999
    mode http
    stats enable
    stats uri /haproxy-status
    stats realm Haproxy\ Statistics
    stats auth haadmin:123456
    stats admin if TRUE 
listen web_port
    bind 0.0.0.0:80
    mode http
    log global
    balance roundrobin
    server web1 192.168.1.60:8080 check inter 3000 fall 2 rise 5
    server web2 192.168.1.70:8080 check inter 3000 fall 2 rise 5

准备Dockerfile

bash 复制代码
[root@ubuntu2404 ubuntu]#pwd
/data/dockerfile/web/haproxy/ubuntu
[root@ubuntu2404 ubuntu]#vim Dockerfile
FROM ubuntu2404-base:v1
LABEL LABEL org.opencontainers.image.authors="caoge"
ADD haproxy-3.0.11.tar.gz /usr/local/src/
RUN cd /usr/local/src/haproxy-3.0.11 \
   && make TARGET=linux-glibc USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1 USE_CPU_AFFINITY=1 PREFIX=/apps/haproxy \
   && make install PREFIX=/apps/haproxy \
   && ln -s /apps/haproxy/sbin/haproxy /usr/sbin/ \
   && mkdir /apps/haproxy/run \
   && useradd -r haproxy
   && rm -rf /usr/local/src/haproxy*  
COPY haproxy.cfg /etc/haproxy/
COPY run_haproxy.sh /usr/bin
EXPOSE 80 9999
CMD ["run_haproxy.sh"]

准备构建脚本构建haproxy镜像

bash 复制代码
[root@ubuntu2404 ubuntu]#vim build.sh
#!/bin/bash
docker build -t haproxy-ubuntu2404:3.0.11 .
[root@ubuntu2404 ubuntu]#ls
build.sh  Dockerfile  haproxy-3.0.11.tar.gz  haproxy.cfg  run_haproxy.sh
[root@ubuntu2404 ubuntu]#bash build.sh
[root@ubuntu2404 ubuntu]#docker images
REPOSITORY           TAG        IMAGE ID       CREATED              SIZE
haproxy-ubuntu2404   3.0.11     8e6eb6d89d0e   About a minute ago   535MB

从镜像启动容器

bash 复制代码
[root@ubuntu2404 ubuntu]#docker run -d -p 80:80 -p 9999:9999 haproxy-ubuntu2404:3.0.11 
9a3fe956e48c39eedeb3d4de4ef651acdbfb2002aa9207bbce32557c695b611a
[root@ubuntu2404 ubuntu]#docker ps
CONTAINER ID   IMAGE                       COMMAND                  CREATED         STATUS         PORTS                                                                              NAMES
9a3fe956e48c   haproxy-ubuntu2404:3.0.11   "run_haproxy.sh"         6 seconds ago   Up 6 seconds   0.0.0.0:80->80/tcp, [::]:80->80/tcp, 0.0.0.0:9999->9999/tcp, [::]:9999->9999/tcp   affectionate_keller
12c718f698b3   tomcat-web:app1             "/apps/tomcat/bin/ru..."   11 hours ago    Up 11 hours    8009/tcp, 0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp                              beautiful_dewdney

在另外两台主机启动容器

bash 复制代码
#导出本地相关镜像
[root@ubuntu2404 ~]#docker save ubuntu2404-base:v1 >/cdrom/ubuntu2404-base.tar.gz
[root@ubuntu2404 ~]#docker save ubuntu2024-jdk:8 >/cdrom/ubuntu2404-jdk.tar.gz
[root@ubuntu2404 ~]#docker save tomcat-base:v9.0.108 >/cdrom/tomcat-base.tar.gz
[root@ubuntu2404 ~]#docker save tomcat-web:app1 >/cdrom/tomcat-web.tar.gz
[root@ubuntu2404 ~]#ls /cdrom/
tomcat-base.tar.gz  tomcat-web.tar.gz  ubuntu2404-base.tar.gz  ubuntu2404-jdk.tar.gz

#将镜像复制到另外两台主机
[root@ubuntu2404 ~]#scp /cdrom/* 192.168.1.60:/cdrom
root@192.168.1.60's password: 
tomcat-base.tar.gz                                                                                             100%  676MB  54.9MB/s   00:12    
tomcat-web.tar.gz                                                                                              100%  694MB 108.5MB/s   00:06    
ubuntu2404-base.tar.gz                                                                                         100%  484MB 127.3MB/s   00:03    
ubuntu2404-jdk.tar.gz                                                                                          100%  658MB 143.6MB/s   00:04    
[root@ubuntu2404 ~]#scp /cdrom/* 192.168.1.70:/cdrom
root@192.168.1.70's password: 
tomcat-base.tar.gz                                                                                             100%  676MB 183.0MB/s   00:03    
tomcat-web.tar.gz                                                                                              100%  694MB 191.3MB/s   00:03    
ubuntu2404-base.tar.gz                                                                                         100%  484MB 199.5MB/s   00:02    
ubuntu2404-jdk.tar.gz                                                                                          100%  658MB 204.6MB/s   00:03    

#在另外两台主机上执行下面操作导入镜像
[root@ubuntu2404 ~]#ls /cdrom/
tomcat-base.tar.gz  tomcat-web.tar.gz  ubuntu2404-base.tar.gz  ubuntu2404-jdk.tar.gz
[root@ubuntu2404 ~]#for i in /cdrom/*.gz;do docker load -i $i;done
107cbdaeec04: Loading layer [==================================================>]  80.63MB/80.63MB
c8ee2c38a424: Loading layer [==================================================>]  55.11MB/55.11MB
138165a74289: Loading layer [==================================================>]  4.096kB/4.096kB
3760d430c9e0: Loading layer [==================================================>]  371.6MB/371.6MB
3f604f5d905b: Loading layer [==================================================>]  182.6MB/182.6MB
5985adaf50f8: Loading layer [==================================================>]   2.56kB/2.56kB
968e4e5fd71e: Loading layer [==================================================>]  3.072kB/3.072kB
c54a5b6e6585: Loading layer [==================================================>]  1.536kB/1.536kB
6ed76b6e19f6: Loading layer [==================================================>]  18.91MB/18.91MB
28b7725bc63c: Loading layer [==================================================>]  2.048kB/2.048kB
Loaded image: tomcat-base:v9.0.108
1a7dd322d4dc: Loading layer [==================================================>]  11.26kB/11.26kB
638ea88cf862: Loading layer [==================================================>]  3.584kB/3.584kB
beecf6f37522: Loading layer [==================================================>]  4.096kB/4.096kB
e2f622f1f67a: Loading layer [==================================================>]  18.91MB/18.91MB
Loaded image: tomcat-web:app1
Loaded image: ubuntu2404-base:v1
Loaded image: ubuntu2024-jdk:8
[root@ubuntu2404 ~]#

#在另外两台主机上创建相关容器
[root@ubuntu2404 ~]#docker run -d -p 8080:8080 tomcat-web:app1
5f89e253056c81aeef6782dac5adf7aeac3ffb98c1cecee53459317948836fec

#把其中一个访问页面修改
[root@ubuntu2404 ~]#docker exec -it friendly_knuth bash
root@51abb366ea4c:/# echo tomcat is app2> /data/tomcat/webapps/app/index.jsp

web访问验证

bash 复制代码
[root@ubuntu2404 ~]#curl http://192.168.1.50/app/
tomcat is app1
[root@ubuntu2404 ~]#curl http://192.168.1.50/app/
tomcat is app2
[root@ubuntu2404 ~]#docker exec -it affectionate_keller bash
root@9a3fe956e48c:/# ss -ntl
State            Recv-Q           Send-Q                     Local Address:Port                     Peer Address:Port          Process           
LISTEN           0                4000                             0.0.0.0:9999                          0.0.0.0:*                               
LISTEN           0                4000                             0.0.0.0:80                            0.0.0.0:*                               
root@9a3fe956e48c:/# ps aux
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.1   4324  3072 ?        Ss   02:26   0:00 /bin/bash /usr/bin/run_haproxy.sh
root           9  0.0  0.0   2728  1408 ?        S    02:26   0:00 tail -f /etc/hosts
root          28  0.0  0.1   4588  3712 pts/0    Ss   03:02   0:00 bash
haproxy      408  0.1  0.3  93892  7500 ?        Ssl  03:15   0:00 haproxy -f /etc/haproxy/haproxy.cfg
root         413  0.0  0.2   7888  4096 pts/0    R+   03:19   0:00 ps aux


bash 复制代码
#在第二台主机上停止容器
[root@ubuntu2404 ~]#docker stop friendly_knuth
friendly_knuth
[root@ubuntu2404 ~]#docker ps -a
CONTAINER ID   IMAGE             COMMAND                  CREATED          STATUS                        PORTS     NAMES
51abb366ea4c   tomcat-web:app1   "/apps/tomcat/bin/ru..."   39 minutes ago   Exited (137) 14 seconds ago             friendly_knuth
[root@ubuntu2404 ~]#
bash 复制代码
#在第二台主机上恢复容器
[root@ubuntu2404 ~]#docker start friendly_knuth
friendly_knuth
[root@ubuntu2404 ~]#docker ps
CONTAINER ID   IMAGE             COMMAND                  CREATED          STATUS         PORTS                                                   NAMES
51abb366ea4c   tomcat-web:app1   "/apps/tomcat/bin/ru..."   40 minutes ago   Up 7 seconds   8009/tcp, 0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp   friendly_knuth
相关推荐
不悔哥11 分钟前
Linux系统编程多线程程序如何安全退出
linux
Fcy64824 分钟前
Linux下 数据链路层详解(从以太网到ARP协议)
linux·mac·以太网·数据链路层·arp
YH行业报告分析1 小时前
2026电缆铺设设备市场:自动化敷设与电网升级驱动增长
运维·自动化
Wang's Blog2 小时前
Java 项目部署之 Docker工具快速入门: Docker 是什么以及它如何解决部署环境问题
java·开发语言·docker
ajassi20002 小时前
AI语音智能体开发日记(十八)智能体服务器xiaozhi-esp32-server源码部署指南
运维·服务器·人工智能·ai·ai编程
‎ദ്ദിᵔ.˛.ᵔ₎2 小时前
linux 进程信号(下)
linux·运维·服务器
skywalk81633 小时前
在FreeBSD系统的linux仿真环境下安装和使用kiro 这个亚马逊的AI agent
linux·人工智能·freebsd·kiro
Mikko73 小时前
Linux 磁盘满了但 du 找不到?LVM 扩容 df 不变?fstab 写错开不了机?三台真机实测磁盘排查
linux·运维·centos
蓝胖的四次元口袋3 小时前
Jenkins知识梳理(2)
运维·jenkins
yumgpkpm3 小时前
Acceldata ODP 3.3.6.4 vs CDP Private Cloud Base 7.3.2 对比
大数据·运维·服务器·hadoop·华为·zookeeper·hbase