生产案例:构建 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
        