编译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 .
posted @   jiaxzeng  阅读(300)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示