生产案例:构建 haproxy镜像
准备相关文件
#准备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配置文件
#准备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
[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镜像
[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
从镜像启动容器
[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
在另外两台主机启动容器
#导出本地相关镜像
[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访问验证
[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


#在第二台主机上停止容器
[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 ~]#

#在第二台主机上恢复容器
[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

17

被折叠的 条评论
为什么被折叠?



