编译keepalived制作镜像
制作镜像文件(dockerfile)
方案一
FROM alpine:3.12
# 默认编译的keepalived版本
ARG VERSION=2.2.7
LABEL author="jiaxzeng"
LABEL project="https://www.keepalived.org"
# 编译keepalived
RUN sed -i 's@dl-cdn.alpinelinux.org@mirrors.aliyun.com@g' /etc/apk/repositories \
&& apk update && apk upgrade \
&& apk --no-cache add \
autoconf curl ipset ipset-dev libnftnl-dev \
iptables iptables-dev libnfnetlink pcre2-dev \
libnfnetlink-dev libnl3 libnl3-dev \
make openssl openssl-dev musl-dev gcc tini \
&& curl -o /tmp/keepalived-${VERSION}.tar.gz -SL https://www.keepalived.org/software/keepalived-${VERSION}.tar.gz \
&& tar xf /tmp/keepalived-${VERSION}.tar.gz -C /tmp \
&& cd /tmp/keepalived-${VERSION} \
&& ./configure --sysconfdir=/etc --enable-regex --enable-json \
&& make && make install && cd - \
&& rm -rf /tmp/keepalived-${VERSION}* \
&& apk --no-cache del \
autoconf gcc ipset-dev libnftnl-dev \
iptables-dev libnfnetlink-dev \
libnl3-dev make musl-dev openssl-dev
# 启动keepalived
ENTRYPOINT ["/opt/keepalived/entrypoint.sh"]
方案二【推荐】
并行构建,使用docker buildkit功能
FROM alpine:3.12 AS build
# 默认编译的keepalived版本
ARG VERSION=2.2.7
# 编译keepalived
RUN sed -i 's@dl-cdn.alpinelinux.org@mirrors.aliyun.com@g' /etc/apk/repositories \
&& apk --no-cache add \
autoconf curl ipset ipset-dev libnftnl-dev \
iptables iptables-dev libnfnetlink pcre2-dev \
libnfnetlink-dev libnl3 libnl3-dev \
make openssl openssl-dev musl-dev gcc
# 下载安装包
RUN curl -o /tmp/keepalived-${VERSION}.tar.gz -SL https://www.keepalived.org/software/keepalived-${VERSION}.tar.gz \
&& tar xf /tmp/keepalived-${VERSION}.tar.gz -C /tmp
# 编译安装
RUN cd /tmp/keepalived-${VERSION} \
&& ./configure --prefix=/opt/keepalived --enable-regex --enable-json \
&& make && make install
FROM alpine:3.16 AS keepalived
LABEL author=jiaxzeng
LABEL project=https://www.keepalived.org
# 拷贝构建容器的 /opt/keepalived 目录
COPY --from=build /opt/keepalived /opt/keepalived
# 拷贝entrypoint.sh文件
COPY ./entrypoint.sh /opt/keepalived/entrypoint.sh
# 安装keepalived依赖的包
RUN sed -i 's@dl-cdn.alpinelinux.org@mirrors.aliyun.com@g' /etc/apk/repositories \
&& apk --no-cache add \
curl ipset iptables libnfnetlink libnl3 pcre2-dev openssl tini \
&& chmod +x /opt/keepalived/entrypoint.sh
# 工作目录
WORKDIR /etc/keepalived
# 启动命令
ENTRYPOINT ["/opt/keepalived/entrypoint.sh"]
FROM alpine:3.12 AS build
# 默认编译的keepalived版本
ARG VERSION=2.2.7
# 编译keepalived
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories \
&& apk --no-cache add \
autoconf curl ipset ipset-dev libnftnl-dev \
iptables iptables-dev libnfnetlink pcre2-dev \
libnfnetlink-dev libnl3 libnl3-dev \
make openssl openssl-dev musl-dev gcc
# 下载安装包
RUN curl -o /tmp/keepalived-${VERSION}.tar.gz -SL https://www.keepalived.org/software/keepalived-${VERSION}.tar.gz \
&& tar xf /tmp/keepalived-${VERSION}.tar.gz -C /tmp
# 编译安装
RUN cd /tmp/keepalived-${VERSION} \
&& ./configure --prefix=/opt/keepalived --enable-regex --enable-json \
&& make && make install
FROM alpine:3.18 AS keepalived
LABEL author=jiaxzeng
LABEL project=https://www.keepalived.org
# 拷贝构建容器的 /opt/keepalived 目录
COPY --from=build /opt/keepalived /opt/keepalived
# 拷贝entrypoint.sh文件
COPY ./entrypoint.sh /opt/keepalived/entrypoint.sh
# 安装keepalived依赖的包
RUN sed -i 's@dl-cdn.alpinelinux.org@mirrors.aliyun.com@g' /etc/apk/repositories \
&& apk --no-cache add \
curl ipset iptables libnfnetlink libnl3 pcre2-dev openssl libcrypto1.1 libssl1.1 tini \
&& chmod +x /opt/keepalived/entrypoint.sh
# 工作目录
WORKDIR /etc/keepalived
# 启动命令
ENTRYPOINT ["/opt/keepalived/entrypoint.sh"]
启动服务脚本(entrypoint.sh)
#!/bin/sh
set -e
# 优化keepalived启动问题
rm -rf /var/run/keepalived.pid
# docker logs 输出日志
tail -F /etc/keepalived/logs/keepalived.log &
# 启动keepalived并持久化日志
exec tini -- /opt/keepalived/sbin/keepalived --log-console --log-detail --dont-fork >> /etc/keepalived/logs/keepalived.log 2>&
打包镜像命令
指定编译keepalived版本
# nerdctl 环境
nerdctl build --rm --build-arg VERSION=2.2.7 -t jiaxzeng/keepalived:2.2.7-alpine3.12 .
# docker 环境
DOCKER_BUILDKIT=1 docker build --rm --build-arg VERSION=2.2.7 -t jiaxzeng/keepalived:2.2.7-alpine3.16 .
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?