docker haproxy镜像编写
环境说明: centos8
主机名 | IP地址 | 部署dockerfile | 功能 |
---|---|---|---|
root@102 | 192.168.143.102 | dockerfile haproxy docker httpd | 提供负载均衡 |
haroxy编写文件
//haproxy结构
[root@102 opt]# tree haproxy/
haproxy/
├── Dockerfile
├── entrypoint.sh
└── files
├── haproxy-2.4.9.tar.gz
├── haproxy-2.5.0.tar.gz
└── install.sh
1 directory, 5 files
[root@102 /]# tree haproxy_config/
haproxy_config/
└── RSs.txt
0 directories, 1 file
//Dockerfile dockerfile镜像构建文件
[root@102 opt]# cat haproxy/Dockerfile
FROM alpine
LABEL MAINTAINER='xxx 1@2.com'
ENV version 2.4.9
ENV PATH /usr/local/harpoxy/sbin:$PATH
COPY files /tmp/
COPY entrypoint.sh /
RUN /tmp/install.sh
WORKDIR /usr/local/haproxy
EXPOSE 8189 80
ENTRYPOINT ["/entrypoint.sh"]
//install.sh安装脚本
[root@102 opt]# cat haproxy/files/install.sh
#!/bin/sh
sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/' /etc/apk/repositories
apk update
adduser -S -H -s /sbin/nologin haproxy
addgroup haproxy
apk add --no-cache -U make gcc pcre-dev bzip2-dev openssl-dev elogind-dev libc-dev dahdi-tools dahdi-tools-dev libexecinfo libexecinfo-dev ncurses-dev zlib-dev zlib
cd /tmp/
tar xf haproxy-${version}.tar.gz
cd haproxy-${version}
make clean && \
make TARGET=linux-musli \
USE_OPENSSL=1 \
USE_ZLIB=1 \
USE_PCRE=1 && \
make install PREFIX=/usr/local/haproxy && \
cp haproxy /usr/sbin/
echo 'net.ipv4.ip_nonlocal_bind = 1' >> /etc/sysctl.conf
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
mkdir -p /usr/local/haproxy/conf
apk del gcc make
rm -rf /tmp/* /var/cache/*
//entrypoint.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 rs_ip in $(cat /tmp/RSs.txt);do
cat >> /usr/local/haproxy/conf/haproxy.cfg <<EOF
server web$count $rs_ip:80 check inter 2000 fall 5
EOF
let count++
done
haproxy -f /usr/local/haproxy/conf/haproxy.cfg -db
RSe.txt
[root@102 /]# cat haproxy_config/RSs.txt
192.168.1.2
192.168.1.3
haroxy构建执行镜像
[root@102 opt]# docker build -t hyhxy0206/haproxy:v0.3 haproxy
[root@102 haproxy]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hyhxy0206/haproxy v0.3 88d7d59ae047 11 minutes ago 73.9MB
[root@102 opt]# docker run -d --name haproxy -p 80:80 -p 8189:8189 -v /haproxy_config:/tmp hyhxy0206/haproxy:v0.3
[root@102 opt]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
97eb9ce8277a hyhxy0206/haproxy:v0.3 "/entrypoint.sh" 15 minutes ago Up 15 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:8189->8189/tcp, :::8189->8189/tcp haproxy
apache镜像编写
//apache结构
[root@102 opt]# tree apache/
apache/
├── Dockerfile
└── files
├── apr-1.7.0.tar.gz
├── apr-util-1.6.1.tar.gz
├── httpd-2.4.48.tar.gz
├── httpd-2.4.51.tar.gz
└── install.sh
1 directory, 6 files
//Dockerfile dockerfile镜像构建文件
[root@102 opt]# cat apache/Dockerfile
FROM alpine
LABEL MAINTAINER "hy 1@2.com"
ENV version 2.4.51
ENV PATH /usr/local/apache/bin:$PATH
COPY files /tmp/
RUN /tmp/install.sh
WORKDIR /usr/local/apache
EXPOSE 80 443
CMD ["-D","FOREGROUND"]
ENTRYPOINT ["httpd"]
//install.sh安装脚本
[root@102 opt]# cat apache/files/install.sh
#!/bin/sh
sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/' /etc/apk/repositories && \
apk update && \
apk add --no-cache -U openssl-dev pcre-dev expat-dev libtool gcc make libc-dev && \
adduser -S -H -s /sbin/noglogin apache && \
cd /tmp && \
tar xf apr-1.7.0.tar.gz && \
tar xf apr-util-1.6.1.tar.gz && \
tar xf httpd-${version}.tar.gz && \
cd apr-1.7.0 && \
sed -i '/$RM "$cfgfile"/d' configure && \
./configure --prefix=/usr/local/apr && \
make -j $(nproc) && make install && \
cd ../apr-util-1.6.1 && \
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr && \
make -j $(nproc) && make install && \
cd ../httpd-${version} && \
./configure --prefix=/usr/local/apache \
--enable-so \
--enable-ssl \
--enable-cgi \
--enable-rewrite \
--with-zlib \
--with-pcre \
--with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr-util/ \
--enable-modules=most \
--enable-mpms-shared=all \
--with-mpm=prefork && \
make -j $(nproc) && make install && \
apk del gcc make && \
rm -rf /var/cache/* /tmp/*
//构建镜像
[root@102 opt]# docker build -t hyhxy0206/httpd: v0.3 apache
[root@102 haproxy]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hyhxy0206/haproxy v0.3 88d7d59ae047 11 minutes ago 73.9MB
hyhxy0206/httpd v0.3 a97b1706f1e2 7 hours ago 89.2MB
运行apache镜像查看haroxy负载均衡效果
[root@102 opt]# docker run -dit --name httpd hyhxy0206/httpd:v0.3
b3f4b04545bf0e9da8907beae0babb79660522268457498a7d7b94e51263b05a
[root@102 opt]# docker exec -it httpd /bin/bash
[root@b3f4b04545bf apache]# ls
bin cgi-bin error icons logs manual
build conf htdocs include man modules
[root@b3f4b04545bf 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
53: eth0@if54: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:c0:a8:01:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 192.168.1.2/24 brd 192.168.1.255 scope global eth0
valid_lft forever preferred_lft forever
[root@b3f4b04545bf apache]# exit
exit
[root@102 opt]# docker run -dit --name httpd2 hyhxy0206/httpd:latest
435fbd400320c39e2c13eb3f84430e5c8eea61aad1270167125a47c6db687562
[root@102 opt]# docker exec -it httpd2 /bin/bash
[root@435fbd400320 apache]# cd htdocs/
[root@435fbd400320 htdocs]# ls
index.html
[root@435fbd400320 htdocs]# echo 'web02' > index.html
[root@435fbd400320 htdocs]# ls
index.html
[root@435fbd400320 htdocs]# exit
exit
[root@102 opt]# curl 192.168.143.102
<html><body><h1>It works!</h1></body></html>
[root@102 opt]# curl 192.168.143.102
web02