使用dockerfile编写haproxy镜像
目录结构
[root@docker /]# tree /haproxy/
/haproxy/
├── dockerfile
├── entrypoint.sh
└── files
├── haproxy-2.5.0.tar.gz
├── haproxy.cfg
└── install.sh
[root@docker ~]# tree /config/
/config/
└── RSe.txt
install.sh
[root@docker /]# cat haproxy/files/install.sh
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 -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 clean &&
make TARGET=linux-glibc
USE_OPENSSL=1
USE_ZLIB=1
USE_PCRE=1
USE_SYSTEMD=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
yum -y remove make gcc gcc-c++ &&
rm -rf /tmp/* /var/cache/*
entrypoint.sh
[root@docker ~]# cat /haproxy/entrypoint.sh #!/bin/bash cat > /usr/local/haproxy/conf/haproxy.cfg <> /usr/local/haproxy/conf/haproxy.cfg < dockerfile [root@docker ~]# cat /haproxy/dockerfile FROM centos LABEL MAINTAINER='aoman xx@163.com' ENV version 2.5.0 ENV PATH /usr/local/harpoxy/sbin:$PATH ADD files/haproxy-${version}.tar.gz /usr/src/ ADD files/install.sh /tmp/ ADD entrypoint.sh / RUN ["/bin/bash","-c","/tmp/install.sh"] WORKDIR /usr/local/haproxy EXPOSE 80 8189 CMD ["/entrypoint.sh"]RSe.txt[root@localhost ~]# cat /config/RSe.txt 172.17.0.3 172.17.0.4生成镜像
[root@docker ~]# docker build -t xm17671855780/haproxy:v0.2 /haproxy/ Sending build context to Docker daemon 3.827MB Step 1/11 : FROM centos ---> 5d0da3dc9764 Step 2/11 : LABEL MAINTAINER='aoman xx@163.com' ---> Using cache ---> 900e2c5549fa Step 3/11 : ENV version 2.5.0 ---> Using cache ---> 8642325d3599 Step 4/11 : ENV PATH /usr/local/harpoxy/sbin:$PATH ---> Using cache ---> c2c825fd7348 Step 5/11 : ADD files/haproxy-${version}.tar.gz /usr/src/ ---> Using cache ---> 07369fd4754d Step 6/11 : ADD files/install.sh /tmp/ ---> Using cache ---> 6ee8b8ec5cc6 Step 7/11 : ADD entrypoint.sh / ---> Using cache ---> 68f6e78e3860 Step 8/11 : RUN ["/bin/bash","-c","/tmp/install.sh"] ---> Using cache ---> 51998b23bd21 Step 9/11 : WORKDIR /usr/local/haproxy ---> Using cache ---> d62bac32629c Step 10/11 : EXPOSE 80 8189 ---> Using cache ---> 562517200529 Step 11/11 : CMD ["/entrypoint.sh"] ---> Running in 223dc75638e7 Removing intermediate container 223dc75638e7 ---> 94aa6c820c5c Successfully built 94aa6c820c5c Successfully tagged xm17671855780/haproxy:v0.2使用新创建的镜像来运行一个haproxy容器,并映射80端口和8189端口
[root@docker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE xm17671855780/haproxy v0.2 94aa6c820c5c 12 minutes ago 410MB xm17671855780/file_httpd v0.2 a563454c4a5f 2 days ago 701MB centos latest 5d0da3dc9764 2 months ago 231MB [root@docker ~]# docker run -dit --name haproxy1 -v /config/:/tmp -p 80:80 -p 8189:8189 94aa6c820c5c 14c8f4f71700e28c07ee8e4e1eef1701250006e2080665705c724ff28c1a5a7a [root@docker ~]# docker exec -it haproxy1 /bin/bash [root@14c8f4f71700 haproxy]# ss -anlt State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 128 0.0.0.0:80 0.0.0.0:* LISTEN 0 128 0.0.0.0:8189 0.0.0.0:* [root@5d6cb0e1b29e haproxy]# ip a 1: lo: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 50: eth0@if51: mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:11:00:05 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 172.17.0.5/16 brd 172.17.255.255 scope global eth0 valid_lft forever preferred_lft forever 使用httpd镜像运行两个httpd
[root@docker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE xm17671855780/haproxy v0.2 94aa6c820c5c 12 minutes ago 410MB xm17671855780/file_httpd v0.2 a563454c4a5f 2 days ago 701MB centos latest 5d0da3dc9764 2 months ago 231MB [root@docker files]# docker run -dit --name httpd1 a563454c4a5f [root@docker ~]# docker exec -it httpd1 /bin/bash [root@25932175f666 src]# ip a 1: lo: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 44: eth0@if45: 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.3/16 brd 172.17.255.255 scope global eth0 valid_lft forever preferred_lft forever [root@25932175f666 src]# cat /usr/local/apache/htdocs/index.html It works! [root@docker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE xm17671855780/haproxy v0.2 94aa6c820c5c 12 minutes ago 410MB xm17671855780/file_httpd v0.2 a563454c4a5f 2 days ago 701MB centos latest 5d0da3dc9764 2 months ago 231MB [root@docker files]# docker run -dit --name httpd2 a563454c4a5f 92e0ca6adc15eacf3b7a1aef54bfd4bd79b7c7e148df7a0f534dc224169ba09f [root@docker files]# docker exec -it httpd2 /bin/bash [root@92e0ca6adc15 src]# ls apr-1.7.0 apr-util-1.6.1 debug httpd-2.4.48 kernels [root@92e0ca6adc15 src]# cd /usr/local/apache/htdocs/ [root@92e0ca6adc15 htdocs]# ls index.html [root@92e0ca6adc15 htdocs]# echo "web test!" > index.html [root@92e0ca6adc15 htdocs]# cat index.html web test! [root@92e0ca6adc15 htdocs]# ip a 1: lo: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 46: eth0@if47: 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 浏览器访问



