文章目录
一、创建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
页面访问
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