基于Alpine 编写Haproxy的Dockerfile

本文详细描述了如何使用AlpineLinux基础镜像构建HaproxyDocker镜像,配置环境变量、安装依赖、编辑entrypoint.sh脚本以启动Haproxy服务,并通过iptables和sysctl设置网络规则。还展示了如何测试容器并与外部HTTP服务器通信。
摘要由CSDN通过智能技术生成

TARGET=linux-glibc \

USE_OPENSSL=1 \

USE_ZLIB=1 \

USE_PCRE=1 \

USE_SYSTEMD=1 && \

make install PREFIX=/usr/local/haproxy

echo ‘net.ipv4.ip_nonlocal_bind = 1’ >> /etc/sysctl.conf

echo ‘net.ipv4.ip_forward = 1’ >> /etc/sysctl.conf

sysctl -p

mkdir /usr/local/haproxy/conf

echo ‘local0.* /var/log/haproxy.log’ >> /etc/rsyslog.conf

yum -y remove gcc gcc-c++ make

rm -rf /usr/src/* /var/cache/*

//编写开启脚本

[root@localhost ~]# cat haproxy/entrypoint.sh

#!/bin/bash

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

//构建haproxy镜像

[root@localhost ~]# docker build -t 1314444/haproxy:v0.1 haproxy

Sending build context to Docker daemon 3.604MB

Step 1/10 : FROM centos

—> 5d0da3dc9764

Step 2/10 : LABEL MAINTAINER=‘1314444 123@qq.com’

—> Using cache

—> a8b67caa2102

Step 3/10 : ENV version 2.4.0

—> Using cache

—> c48a871bda67

Step 4/10 : ENV PATH /usr/local/haproxy/sbin:$PATH

—> Using cache

—> df0ccbe70aba

Step 5/10 : COPY files /usr/src/

—> Using cache

—> a8b7c9abce9e

Step 6/10 : COPY entrypoint.sh /

—> Using cache

—> 1cd3b00edf13

Step 7/10 : RUN [“/bin/bash”,“-c”,“/usr/src/install.sh”]

—> Using cache

—> 89c76dd3e051

Step 8/10 : EXPOSE 80 8189

—> Using cache

—> af832f2ffd4a

Step 9/10 : WORKDIR /usr/local/haproxy

—> Using cache

—> 66adeda8f354

Step 10/10 : ENTRYPOINT [“/entrypoint.sh”]

—> Using cache

—> f50226955caa

Successfully built f50226955caa

Successfully tagged 1314444/haproxy:v0.1

//查看镜像

[root@localhost ~]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

1314444/haproxy v0.1 f50226955caa 3 minutes ago 381MB

//基于新镜像创建haproxy容器

[root@localhost ~]# docker run -d --name haproxy -p 80:80 -p 8189:8189 -v /haproxy_config/:/tmp 1314444/haproxy:v0.1

9bfc78e5dc8c30892f46beb6599d8e4a79843c107310a1ca892d3eea1bd54258

[root@localhost ~]# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

504afeb4a2e3 nginx “/docker-entrypoint.…” 24 minutes ago Up 24 minutes 80/tcp web2

94447b9531c3 httpd “httpd-foreground” 24 minutes ago Up 24 minutes 80/tcp web1

9bfc78e5dc8c 1314444/haproxy:v0.1 “/entrypoint.sh” 23 seconds ago Up 22 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:8189->8189/tcp, :::8189->8189/tcp haproxy

[root@localhost ~]# docker exec -it haproxy /bin/bash

[root@9bfc78e5dc8c haproxy]# pwd

/usr/local/haproxy

[root@9bfc78e5dc8c haproxy]# ss -anlt

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:*

在这里插入图片描述

在这里插入图片描述

**用户:admin

密码:admin**

在这里插入图片描述

http://IP:8189/haproxy_stats

在这里插入图片描述

上传镜像仓库

[root@localhost ~]# docker login

Authenticating with existing credentials…

WARNING! Your password will be stored unencrypted in /root/.docker/config.json.

Configure a credential helper to remove this warning. See

https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

[root@localhost ~]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

1314444/haproxy v0.1 f50226955caa 2 hours ago 381MB

[root@localhost ~]# docker push 1314444/haproxy:v0.1

The push refers to repository [docker.io/1314444/haproxy]

888b23fa1cd4: Pushed

1454c74ea402: Pushed

e573f0878e77: Pushed

74ddd0ec08fa: Mounted from 1314444/httpd

v0.1: digest: sha256:92fb4f3019f78407e6af14ea3f3f7873c5b2dbca1f13ef837ed325220707ce23 size: 1159

基于Alpine 编写Haproxy的Dockerfile(精简版)

=================================================================================================

//创建dockerfile文件目录以及脚本文件

[root@localhost ~]# mkdir -p haproxy/files

[root@localhost ~]# ls haproxy/

files

[root@localhost ~]# touch haproxy/Dockerfile

[root@localhost ~]# touch haproxy/files/install.sh

[root@localhost ~]# touch haproxy/entrypoint.sh

//项目结构

[root@localhost ~]# tree haproxy/

haproxy/

|-- Dockerfile

|-- entrypoint.sh

`-- files

|-- haproxy-2.4.0.tar.gz

`-- install.sh

1 directory, 4 files

//添加脚本权限

[root@localhost ~]# chmod +x haproxy/entrypoint.sh

[root@localhost ~]# chmod +x haproxy/files/install.sh

[root@localhost ~]# ls -l haproxy/entrypoint.sh

-rwxr-xr-x. 1 root root 1624 Dec 12 18:21 haproxy/entrypoint.sh

[root@localhost ~]# ls -l haproxy/files/install.sh

-rwxr-xr-x. 1 root root 1032 Dec 12 18:16 haproxy/files/install.sh

//创建两台装容器(一台httpd,一台nginx,用来测试)

[root@localhost ~]# docker run --name web1 -d httpd

e84f1c748e99d47bbf856a5403ec1cb3bb301e6a98daaa0d1e32f786699823a1

[root@localhost ~]# docker inspect web05

“Gateway”: “172.17.0.2”,

“IPAddress”: “172.17.0.3”,

“IPPrefixLen”: 16,

“IPv6Gateway”: “”,

“GlobalIPv6Address”: “”,

“GlobalIPv6PrefixLen”: 0,

“MacAddress”: “02:42:ac:11:00:05”,

“DriverOpts”: null

}

}

}

}

]

[root@localhost ~]# docker run --name web2 -d nginx

4d9789e30cacde1baa2bbe45d9141a085dc8e7213bb0ee7c33712dd8a645088b

[root@localhost ~]# docker inspect web06

“IPAddress”: “172.17.0.4”,

“IPPrefixLen”: 16,

“IPv6Gateway”: “”,

“GlobalIPv6Address”: “”,

“GlobalIPv6PrefixLen”: 0,

“MacAddress”: “02:42:ac:11:00:06”,

“DriverOpts”: null

}

}

}

}

]

//测试一下

[root@localhost ~]# curl 172.17.0.3

It works!

[root@localhost ~]# curl 172.17.0.4

Welcome to nginx!

Welcome to nginx!

If you see this page, the nginx web server is successfully installed and

working. Further configuration is required.

For online documentation and support please refer to

nginx.org.

Commercial support is available at

nginx.com.

Thank you for using nginx.

//编写dockerfile

[root@localhost ~]# cat haproxy/Dockerfile

FROM alpine

LABEL MAINTAINER=‘1314444 123@qq.com’

ENV version 2.4.0

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

COPY files/ /tmp/

COPY entrypoint.sh /

RUN /tmp/install.sh

EXPOSE 80 8189

WORKDIR /usr/local/haproxy

ENTRYPOINT [“/entrypoint.sh”]

//编写安装脚本

[root@localhost ~]# 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 -j $(nproc) \

TARGET=linux-musl \

USE_OPENSSL=1 \

USE_ZLIB=1 \

USE_PCRE=1 && \

make install PREFIX=/usr/local/haproxy

echo ‘net.ipv4.ip_nonlocal_bind = 1’ >> /etc/sysctl.conf

echo ‘net.ipv4.ip_forward = 1’ >> /etc/sysctl.conf

mkdir /usr/local/haproxy/conf

apk del gcc make

rm -rf /tmp/* /var/cache/*

//编写开启脚本

[root@localhost ~]# cat haproxy/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
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

由于篇幅有限,这里就不一一罗列了,20道常见面试题(含答案)+21条MySQL性能调优经验小编已整理成Word文档或PDF文档

MySQL全家桶笔记

还有更多面试复习笔记分享如下

Java架构专题面试复习

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!
轻大家的负担。**[外链图片转存中…(img-bOq05Dds-1711934114129)]

[外链图片转存中…(img-3g7aHM3W-1711934114130)]

[外链图片转存中…(img-YSBRgbCZ-1711934114130)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

由于篇幅有限,这里就不一一罗列了,20道常见面试题(含答案)+21条MySQL性能调优经验小编已整理成Word文档或PDF文档

[外链图片转存中…(img-ttv9DIq0-1711934114130)]

还有更多面试复习笔记分享如下

[外链图片转存中…(img-dDywL3Qj-1711934114131)]

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

  • 30
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Alpine是一个轻量级的Linux发行版,适合作为Docker容器的基础镜像。Dockerfile是用来构建Docker镜像的文件,其中可以指定基础镜像、安装软件包等操作。在构建Alpine镜像时,可以使用apk命令来安装软件包和解决依赖关系。例如,可以使用以下命令在Alpine中安装nginx: ``` FROM alpine RUN apk add --no-cache nginx ``` 这个Dockerfile首先指定了基础镜像为Alpine,然后使用apk命令安装了nginx软件包。通过构建这个Docker镜像,可以在容器中部署nginx服务。 另外,你提到了修改nginx的配置文件。在容器中修改配置文件可以使用docker exec命令进入容器,并使用vi或其他编辑器修改配置文件。修改完成后,可以使用nginx -s reload命令重新加载配置文件。 总结起来,使用Alpine作为基础镜像,可以通过Dockerfile来构建一个包含nginx的Docker镜像,并在容器中修改nginx的配置文件。 #### 引用[.reference_title] - *1* *3* [Dockerfile中使用alpine镜像部署nginx服务](https://blog.csdn.net/cxyxt/article/details/126630118)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [dockerfilealpine为基础镜像构建nginx镜像](https://blog.csdn.net/qq_45211528/article/details/126630066)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值