Dockerfile使用CentOS系统部署haproxy

导读:本篇文章讲解 Dockerfile使用CentOS系统部署haproxy,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

一、创建nginx、httpd容器

[root@localhost ~]# docker images
REPOSITORY         TAG       IMAGE ID       CREATED          SIZE
httpd              v0.1      3709a35b5387   15 minutes ago   423MB
nginx              v0.1      45d2af2e6e0f   27 minutes ago   549MB
centos             latest    5d0da3dc9764   2 months ago     231MB

// httpd
[root@localhost ~]# docker run -d --name httpd httpd:v0.1
c21c60460234f56d6c79a179bece1de6e8e02e8fffbb3b06d1c4137c08a8f680

[root@localhost ~]# docker exec -it httpd /bin/bash
[root@c21c60460234 apache]# ss -antl
State  Recv-Q Send-Q  Local Address:Port   Peer Address:Port Process                                                      
LISTEN 0      128           0.0.0.0:80          0.0.0.0:*                                                                 
[root@c21c60460234 apache]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
25: eth0@if26: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever


// nginx 
[root@localhost ~]# docker run -itd --name nginx nginx:v0.1 /start.sh
2c56de84ec9129a5c40000785a3ee23c39636046a1fea485991465db0410d398
[root@localhost ~]# docker exec -it nginx /bin/bash
[root@2c56de84ec91 /]# ss -antl
State  Recv-Q Send-Q  Local Address:Port   Peer Address:Port Process                                                      
LISTEN 0      128           0.0.0.0:80          0.0.0.0:*                                                                 
[root@2c56de84ec91 /]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
31: eth0@if32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:04 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.4/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever


2c56de84ec91   nginx:v0.1     "/start.sh"             8 minutes ago    Up 8 minutes       

二、目录结构

[root@localhost ~]# tree haproxy/
haproxy/
|-- Dockerfile
|-- config.sh
`-- files
    |-- haproxy-2.5.0.tar.gz
    `-- install.sh

1 directory, 4 files

三、Dockerfile文件

[root@localhost ~]# cat haproxy/Dockerfile 
// 基础镜像
FROM centos

// 作者信息
LABEL MAINTAINER “gaofan1225 123@qq.com”

// 设置变量
ENV haproxy_version 2.5.0
ENV PATH /usr/local/haproxy/sbin:$PATH
ENV RSS ""

// 传输文件
ADD files/haproxy-${VERSION}.tar.gz /usr/src/
ADD files/install.sh /usr/src/
COPY config.sh /

// 运行安装脚本
RUN /usr/src/install.sh   

// 暴露端口
EXPOSE 80 443 8189

// 切换目录
WORKDIR /usr/local/haproxy

// 启动
ENTRYPOINT ["/config.sh"]

四、传递配置文件和服务启动的脚本

[root@localhost ~]# cat haproxy/config.sh 
#!/bin/sh

cat > /usr/local/haproxy/conf/haproxy.cfg << EOF
#--------------全局配置----------------
global
    log 127.0.0.1 local0  info
    #log loghost local0 info
    maxconn 20480
#chroot /usr/local/haproxy
    pidfile /var/run/haproxy.pid
    #maxconn 4000
    user haproxy
    group haproxy
    daemon
#---------------------------------------------------------------------
#common defaults that all the 'listen' and 'backend' sections will
#use if not designated in their block
#---------------------------------------------------------------------
defaults
    mode http
    log global
    option dontlognull
    option httpclose
    option httplog
    #option forwardfor
    option redispatch
    balance roundrobin
    timeout connect 10s
    timeout client 10s
    timeout server 10s
    timeout check 10s
    maxconn 60000
    retries 3
#--------------统计页面配置------------------
listen admin_stats
    bind 0.0.0.0:8189
    stats enable
    mode http
    log global
    stats uri /haproxy_stats
    stats realm Haproxy\ Statistics
    stats auth admin:admin
    #stats hide-version
    stats admin if TRUE
    stats refresh 30s
#---------------web设置-----------------------
listen webcluster
    bind 0.0.0.0:80
    mode http
    #option httpchk GET /index.html
    log global
    maxconn 3000
    balance roundrobin
    cookie SESSION_COOKIE insert indirect nocache
EOF

count=1
for rss_ip in $RSS;do
cat >> /usr/local/haproxy/conf/haproxy.cfg << EOF
server web$count $rss_ip:80 check inter 2000 fall 5
EOF
let count++
done

/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg
/bin/bash

五、服务安装脚本

[root@localhost ~]# cat haproxy/files/install.sh 
#!/bin/bash

rm -rf /etc/yum.repos.d/*  
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-$(awk -F'"' 'NR==5{print $2}'  /etc/os-release).repo 
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo 
yum clean all && yum makecache 
yum -y install make gcc pcre-devel bzip2-devel openssl-devel systemd-devel
useradd -r -M -s /sbin/nologin haproxy 
cd /usr/src/haproxy-${VERSION}  
make -j $(nproc)  \
        TARGET=linux-glibc  \
        USE_OPENSSL=1  \
        USE_ZLIB=1  \
        USE_PCRE=1  \
        USE_SYSTEMD=1 && \
        make install PREFIX=/usr/local/haproxy 
mkdir /usr/local/haproxy/conf  
echo 'net.ipv4.ip_nonlocal_bind = 1' >>  /etc/sysctl.conf 
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
rm -rf /usr/src/haproxy-${VERSION}/ /var/cache/*
yum -y remove make gcc

六、创建haproxy容器

6.1 使用ENV定义变量,-e 传递变量值

[root@localhost ~]# docker build -t haproxy:v0.2 haproxy/
Successfully built 5ac065fbcc20
Successfully tagged haproxy:v0.2

[root@localhost ~]# docker images
REPOSITORY         TAG       IMAGE ID       CREATED          SIZE
haproxy            v0.2      5ac065fbcc20   9 minutes ago    391MB
httpd              v0.1      3709a35b5387   15 minutes ago   423MB
nginx              v0.1      45d2af2e6e0f   27 minutes ago   549MB
centos             latest    5d0da3dc9764   2 months ago     231MB

[root@localhost haproxy]# docker run -itd --name haproxy -p 80:80 -p 8189:8189 -e RSS="172.17.0.3 172.17.0.4" haproxy:v0.2
a2d481438fbbb95df02c749f357343ff3dd3311e85b317140b8496f5a432e8db

[root@localhost haproxy]# docker exec -it haproxy /bin/bash[root@a2d481438fbb haproxy]# ss -antl
State  Recv-Q Send-Q  Local Address:Port   Peer Address:Port Process                                                      
LISTEN 0      128           0.0.0.0:8189        0.0.0.0:*                                                                 
LISTEN 0      128           0.0.0.0:80          0.0.0.0:*                                                                 
[root@a2d481438fbb haproxy]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
33: eth0@if34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
       
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                 CREATED          STATUS          PORTS                                                                                   NAMES
a2d481438fbb   haproxy:v0.2   "/config.sh"            7 minutes ago    Up 7 minutes    0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:8189->8189/tcp, :::8189->8189/tcp, 443/tcp   haproxy
2c56de84ec91   nginx:v0.1     "/start.sh"             8 minutes ago    Up 8 minutes                                                                                            nginx
c21c60460234   httpd:v0.1     "httpd -D FOREGROUND"   11 minutes ago   Up 11 minutes   80/tcp, 443/tcp                                                                         httpd

页面访问

请添加图片描述

请添加图片描述
请添加图片描述
默认登录账户和密码都是 admin
请添加图片描述
请添加图片描述

6.2 使用变量文件

// 目录结构一样
[root@localhost ~]# tree haproxy/
haproxy/
|-- Dockerfile
|-- config.sh
`-- files
    |-- haproxy-2.5.0.tar.gz
    `-- install.sh

1 directory, 4 files

// 安装脚本一样
[root@localhost ~]# cat haproxy/files/install.sh 
#!/bin/bash

rm -rf /etc/yum.repos.d/*  
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-$(awk -F'"' 'NR==5{print $2}'  /etc/os-release).repo 
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo 
yum clean all && yum makecache 
yum -y install make gcc pcre-devel bzip2-devel openssl-devel systemd-devel
useradd -r -M -s /sbin/nologin haproxy 
cd /usr/src/haproxy-${VERSION}  
make -j $(nproc)  \
        TARGET=linux-glibc  \
        USE_OPENSSL=1  \
        USE_ZLIB=1  \
        USE_PCRE=1  \
        USE_SYSTEMD=1 && \
        make install PREFIX=/usr/local/haproxy 
mkdir /usr/local/haproxy/conf  
echo 'net.ipv4.ip_nonlocal_bind = 1' >>  /etc/sysctl.conf 
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
rm -rf /usr/src/haproxy-${VERSION}/ /var/cache/*
yum -y remove make gcc
// 添加一个变量文件
[root@localhost ~]# tree /config_ip/
/config_ip/
`-- RSS.txt

0 directories, 1 file


[root@localhost ~]# cat /config_ip/RSS.txt 
172.17.0.3
172.17.0.4

// 修改Dockerfile,删除RSS变量
[root@localhost ~]# cat haproxy/Dockerfile 
FROM centos

LABEL MAINTAINER gaofan1225 123@qq.com

ENV VERSION 2.5.0
ENV PATH /usr/local/haproxy/sbin:$PATH

ADD files/haproxy-${VERSION}.tar.gz /usr/src/
ADD files/install.sh /usr/src/
COPY config.sh /

RUN /usr/src/install.sh 

EXPOSE 80 443 8189

WORKDIR /usr/local/haproxy
ENTRYPOINT ["/config.sh"]

// 修改config.sh脚本
[root@localhost ~]# cat haproxy/config.sh 
#!/bin/sh

cat > /usr/local/haproxy/conf/haproxy.cfg << EOF
#--------------全局配置----------------
global
    log 127.0.0.1 local0  info
    #log loghost local0 info
    maxconn 20480
#chroot /usr/local/haproxy
    pidfile /var/run/haproxy.pid
    #maxconn 4000
    user haproxy
    group haproxy
    daemon
#---------------------------------------------------------------------
#common defaults that all the 'listen' and 'backend' sections will
#use if not designated in their block
#---------------------------------------------------------------------
defaults
    mode http
    log global
    option dontlognull
    option httpclose
    option httplog
    #option forwardfor
    option redispatch
    balance roundrobin
    timeout connect 10s
    timeout client 10s
    timeout server 10s
    timeout check 10s
    maxconn 60000
    retries 3
#--------------统计页面配置------------------
listen admin_stats
    bind 0.0.0.0:8189
    stats enable
    mode http
    log global
    stats uri /haproxy_stats
    stats realm Haproxy\ Statistics
    stats auth admin:admin
    #stats hide-version
    stats admin if TRUE
    stats refresh 30s
#---------------web设置-----------------------
listen webcluster
    bind 0.0.0.0:80
    mode http
    #option httpchk GET /index.html
    log global
    maxconn 3000
    balance roundrobin
    cookie SESSION_COOKIE insert indirect nocache
EOF
count=1
for rss_ip in $(cat /tmp/RSS.txt);do
cat >> /usr/local/haproxy/conf/haproxy.cfg << EOF
server web$count $rss_ip:80 check inter 2000 fall 5
EOF
let count++
done

/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg
/bin/bash
// 创建容器
[root@localhost ~]# docker build -t haproxy:v0.6 haproxy/

Successfully built 7b49d60d2838
Successfully tagged haproxy:v0.6

[root@localhost ~]# docker run -itd --name haproxy2 -p 80:80 -p 8189:8189 -v /config_ip:/tmp haproxy:v0.6
2b5a83358043032c2b207a1f2c2bffe4d9215c1b184e7ad1cba491d35c03168b

// 做映射
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                 CREATED             STATUS             PORTS                                                                                   NAMES
2b5a83358043   haproxy:v0.6   "/config.sh"            2 minutes ago       Up 2 minutes       0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:8189->8189/tcp, :::8189->8189/tcp, 443/tcp   haproxy2
2c56de84ec91   nginx:v0.1     "/start.sh"             About an hour ago   Up About an hour                                                                                           nginx
c21c60460234   httpd:v0.1     "httpd -D FOREGROUND"   2 hours ago         Up 2 hours         80/tcp, 443/tcp                                                                         httpd

[root@localhost ~]# docker exec -it haproxy2 /bin/bash
[root@2b5a83358043 haproxy]# ss -antl
State  Recv-Q Send-Q  Local Address:Port   Peer Address:Port Process                                                      
LISTEN 0      128           0.0.0.0:8189        0.0.0.0:*                                                                 
LISTEN 0      128           0.0.0.0:80          0.0.0.0:* 
                                                                
[root@2b5a83358043 haproxy]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
51: eth0@if52: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever

// 查看tmp下的变量文件
[root@2b5a83358043 haproxy]# cd /tmp/
[root@2b5a83358043 tmp]# ls
RSS.txt

[root@localhost ~]# docker images
REPOSITORY         TAG       IMAGE ID       CREATED         SIZE
haproxy            v0.6      7b49d60d2838   6 minutes ago   391MB
haproxy            v0.2      5ac065fbcc20   2 hours ago     391MB
httpd              v0.1      3709a35b5387   15 minutes ago  423MB
nginx              v0.1      45d2af2e6e0f   27 minutes ago  549MB
centos             latest    5d0da3dc9764   2 months ago    231MB

页面访问
请添加图片描述
请添加图片描述
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/5578.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!