Skip to content

Commit 47a4fc9

Browse files
committed
Major changes for 3.x images:
- Start building with AWS-LC instead of OpenSSL - Stop shipping dataplaneapi v2 - Stop building dataplaneapi v3 and use prebuilt packages - Add 3.4 branch - Set 3.3 as base/default/stable branch
1 parent 0163913 commit 47a4fc9

File tree

32 files changed

+1068
-262
lines changed

32 files changed

+1068
-262
lines changed

.github/workflows/docker_auto.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ jobs:
1313
env:
1414
DOCKER_PLATFORMS: linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64
1515
DOCKER_IMAGE: haproxytech/haproxy-alpine
16-
STABLE_BRANCH: "3.2"
16+
STABLE_BRANCH: "3.3"
1717
steps:
1818
- name: Login to Docker Hub
1919
id: login_docker

.github/workflows/docker_manual.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ jobs:
99
packages: write
1010
strategy:
1111
matrix:
12-
branch: ["2.4", "2.6", "2.8", "3.0", "3.1", "3.2", "3.3"]
12+
branch: ["2.4", "2.6", "2.8", "3.0", "3.1", "3.2", "3.3", "3.4"]
1313
env:
1414
DOCKER_PLATFORMS: linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64
1515
DOCKER_IMAGE: haproxytech/haproxy-alpine
16-
STABLE_BRANCH: "3.2"
16+
STABLE_BRANCH: "3.3"
1717
steps:
1818
- name: Login to Docker Hub
1919
id: login_docker

3.0/Dockerfile

Lines changed: 69 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,75 +1,105 @@
1-
FROM golang:alpine AS builder
1+
FROM alpine:3.20 AS awslc-builder
22

3-
ENV DATAPLANE_MINOR 3.0.15
4-
ENV DATAPLANE_V2_MINOR 2.9.19
5-
ENV DATAPLANE_URL https://github.com/haproxytech/dataplaneapi.git
6-
7-
RUN apk add --no-cache ca-certificates git make && \
8-
git clone "${DATAPLANE_URL}" "${GOPATH}/src/github.com/haproxytech/dataplaneapi" && \
9-
cd "${GOPATH}/src/github.com/haproxytech/dataplaneapi" && \
10-
git checkout "v${DATAPLANE_MINOR}" && \
11-
make build && cp build/dataplaneapi /dataplaneapi && \
12-
make clean && \
13-
git checkout "v${DATAPLANE_V2_MINOR}" && \
14-
make build && cp build/dataplaneapi /dataplaneapi-v2
3+
ENV AWSLC_URL=https://github.com/aws/aws-lc.git
4+
ENV AWSLC_TAG=v1.65.1
155

16-
FROM alpine:3.20
6+
RUN apk add --no-cache curl build-base make autoconf automake gcc libc-dev linux-headers git cmake samurai go && \
7+
git clone --depth 1 --branch "${AWSLC_TAG}" "${AWSLC_URL}" /tmp/aws-lc && \
8+
mkdir /tmp/aws-lc/build && \
9+
cd /tmp/aws-lc/build && \
10+
cmake -G Ninja -DCMAKE_INSTALL_PREFIX=/opt/aws-lc -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON .. && \
11+
ninja install && \
12+
rm -rf /tmp/aws-lc
1713

18-
MAINTAINER Dinko Korunic <dkorunic@haproxy.com>
19-
20-
LABEL Name HAProxy
21-
LABEL Release Community Edition
22-
LABEL Vendor HAProxy
23-
LABEL Version 3.0.12
24-
LABEL RUN /usr/bin/docker -d IMAGE
14+
FROM alpine:3.20 AS hapce-builder
2515

2616
ENV HAPROXY_BRANCH 3.0
2717
ENV HAPROXY_MINOR 3.0.12
2818
ENV HAPROXY_SHA256 cd2bade59a7e2d61f2d62be7c6c4cfc0e2b3a90431023720cae7c43843b0570b
2919
ENV HAPROXY_SRC_URL http://www.haproxy.org/download
3020

31-
ENV HAPROXY_UID haproxy
32-
ENV HAPROXY_GID haproxy
33-
34-
COPY --from=builder /dataplaneapi /usr/local/bin/dataplaneapi
35-
COPY --from=builder /dataplaneapi-v2 /usr/local/bin/dataplaneapi-v2
21+
COPY --from=awslc-builder /opt/aws-lc /opt/aws-lc
3622

3723
RUN apk add --no-cache ca-certificates jemalloc && \
3824
apk add --no-cache --virtual build-deps gcc libc-dev \
3925
linux-headers lua5.4-dev make openssl openssl-dev pcre2-dev tar \
4026
zlib-dev curl shadow jemalloc-dev && \
4127
curl -sfSL "${HAPROXY_SRC_URL}/${HAPROXY_BRANCH}/src/haproxy-${HAPROXY_MINOR}.tar.gz" -o haproxy.tar.gz && \
4228
echo "$HAPROXY_SHA256 *haproxy.tar.gz" | sha256sum -c - && \
43-
groupadd "$HAPROXY_GID" && \
44-
useradd -g "$HAPROXY_GID" "$HAPROXY_UID" && \
4529
mkdir -p /tmp/haproxy && \
4630
tar -xzf haproxy.tar.gz -C /tmp/haproxy --strip-components=1 && \
4731
rm -f haproxy.tar.gz && \
4832
make -C /tmp/haproxy -j"$(nproc)" TARGET=linux-musl CPU=generic USE_PCRE2=1 USE_PCRE2_JIT=1 \
4933
USE_TFO=1 USE_LINUX_TPROXY=1 USE_GETADDRINFO=1 \
5034
USE_LUA=1 LUA_LIB=/usr/lib/lua5.4 LUA_INC=/usr/include/lua5.4 \
5135
USE_PROMEX=1 USE_SLZ=1 \
52-
USE_OPENSSL=1 USE_PTHREAD_EMULATION=1 \
53-
USE_QUIC=1 USE_QUIC_OPENSSL_COMPAT=1 \
36+
USE_OPENSSL_AWSLC=1 USE_PTHREAD_EMULATION=1 \
37+
SSL_INC=/opt/aws-lc/include SSL_LIB=/opt/aws-lc/lib USE_QUIC=1 \
38+
LDFLAGS="-L/opt/aws-lc/lib -Wl,-rpath,/opt/aws-lc/lib" \
5439
ADDLIB=-ljemalloc \
5540
all && \
56-
make -C /tmp/haproxy TARGET=linux2628 install-bin install-man && \
41+
make -C /tmp/haproxy TARGET=linux2628 install-bin
42+
43+
FROM alpine:3.20
44+
45+
MAINTAINER Dinko Korunic <dkorunic@haproxy.com>
46+
47+
LABEL Name HAProxy
48+
LABEL Release Community Edition
49+
LABEL Vendor HAProxy
50+
LABEL Version 3.0.12
51+
LABEL RUN /usr/bin/docker -d IMAGE
52+
53+
ENV HAPROXY_BRANCH 3.0
54+
ENV HAPROXY_MINOR 3.0.12
55+
ENV HAPROXY_SHA256 cd2bade59a7e2d61f2d62be7c6c4cfc0e2b3a90431023720cae7c43843b0570b
56+
ENV HAPROXY_SRC_URL http://www.haproxy.org/download
57+
58+
ENV HAPROXY_UID haproxy
59+
ENV HAPROXY_GID haproxy
60+
61+
ENV DATAPLANE_MINOR 3.0.15
62+
ENV DATAPLANE_URL https://github.com/haproxytech/dataplaneapi/releases/download
63+
64+
ARG TARGETPLATFORM
65+
66+
COPY --from=awslc-builder /opt/aws-lc /opt/aws-lc
67+
COPY --from=hapce-builder /usr/local/sbin/haproxy /usr/local/sbin/haproxy
68+
COPY --from=hapce-builder /tmp/haproxy/examples/errorfiles/ /usr/local/etc/haproxy/errors
69+
70+
RUN apk add --no-cache ca-certificates jemalloc zlib lua5.4-libs pcre2 shadow curl && \
71+
groupadd "$HAPROXY_GID" && \
72+
useradd -g "$HAPROXY_GID" "$HAPROXY_UID" && \
73+
chmod +x /usr/local/sbin/haproxy && \
5774
ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy && \
5875
mkdir -p /var/lib/haproxy && \
5976
chown "$HAPROXY_UID:$HAPROXY_GID" /var/lib/haproxy && \
6077
mkdir -p /usr/local/etc/haproxy && \
6178
ln -s /usr/local/etc/haproxy /etc/haproxy && \
62-
cp -R /tmp/haproxy/examples/errorfiles /usr/local/etc/haproxy/errors && \
63-
rm -rf /tmp/haproxy && \
79+
case "${TARGETPLATFORM}" in \
80+
"linux/arm64") API_ARCH=arm64 ;; \
81+
"linux/amd64") API_ARCH=x86_64 ;; \
82+
"linux/arm/v6") API_ARCH=arm ;; \
83+
"linux/arm/v7") API_ARCH=arm ;; \
84+
*) echo "ARG TARGETPLATFORM undeclared" >&2 && exit 1 ;; \
85+
esac && \
86+
curl -sfSL "${DATAPLANE_URL}/v${DATAPLANE_MINOR}/dataplaneapi_${DATAPLANE_MINOR}_linux_${API_ARCH}.tar.gz" -o dataplaneapi.tar.gz && \
87+
mkdir -p /tmp/dataplaneapi && \
88+
tar -xzf dataplaneapi.tar.gz -C /tmp/dataplaneapi && \
89+
rm -f dataplaneapi.tar.gz && \
90+
cp /tmp/dataplaneapi/dataplaneapi /usr/local/bin/dataplaneapi && \
6491
chmod +x /usr/local/bin/dataplaneapi && \
65-
ln -s /usr/local/bin/dataplaneapi /usr/bin/dataplaneapi && \
66-
chmod +x /usr/local/bin/dataplaneapi-v2 && \
67-
ln -s /usr/local/bin/dataplaneapi-v2 /usr/bin/dataplaneapi-v2 && \
6892
touch /usr/local/etc/haproxy/dataplaneapi.yml && \
6993
chown "$HAPROXY_UID:$HAPROXY_GID" /usr/local/etc/haproxy/dataplaneapi.yml && \
70-
apk del build-deps && \
71-
apk add --no-cache openssl zlib lua5.4-libs pcre2 && \
72-
rm -f /var/cache/apk/*
94+
mkdir -p /usr/local/var/lib/dataplaneapi && \
95+
chown "$HAPROXY_UID:$HAPROXY_GID" /usr/local/var/lib/dataplaneapi && \
96+
ln -s /usr/local/var/lib/dataplaneapi /var/lib/dataplaneapi && \
97+
rm -rf /tmp/dataplaneapi && \
98+
rm -f /var/cache/apk/* && \
99+
echo "/lib:/usr/local/lib:/usr/lib:/opt/aws-lc/lib" > "/etc/ld-musl-$(uname -m).path" && \
100+
mkdir -p /opt/aws-lc/ssl && \
101+
rm -rf /opt/aws-lc/ssl/certs && \
102+
ln -s /etc/ssl/certs /opt/aws-lc/ssl/certs
73103

74104
COPY haproxy.cfg /usr/local/etc/haproxy
75105
COPY docker-entrypoint.sh /

3.0/Dockerfile.api

Lines changed: 56 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,45 @@
1+
FROM alpine:3.20 AS awslc-builder
2+
3+
ENV AWSLC_URL=https://github.com/aws/aws-lc.git
4+
ENV AWSLC_TAG=v1.65.1
5+
6+
RUN apk add --no-cache curl build-base make autoconf automake gcc libc-dev linux-headers git cmake samurai go && \
7+
git clone --depth 1 --branch "${AWSLC_TAG}" "${AWSLC_URL}" /tmp/aws-lc && \
8+
mkdir /tmp/aws-lc/build && \
9+
cd /tmp/aws-lc/build && \
10+
cmake -G Ninja -DCMAKE_INSTALL_PREFIX=/opt/aws-lc -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON .. && \
11+
ninja install && \
12+
rm -rf /tmp/aws-lc
13+
14+
FROM alpine:3.20 AS hapce-builder
15+
16+
ENV HAPROXY_BRANCH 3.0
17+
ENV HAPROXY_MINOR 3.0.12
18+
ENV HAPROXY_SHA256 cd2bade59a7e2d61f2d62be7c6c4cfc0e2b3a90431023720cae7c43843b0570b
19+
ENV HAPROXY_SRC_URL http://www.haproxy.org/download
20+
21+
COPY --from=awslc-builder /opt/aws-lc /opt/aws-lc
22+
23+
RUN apk add --no-cache ca-certificates jemalloc && \
24+
apk add --no-cache --virtual build-deps gcc libc-dev \
25+
linux-headers lua5.4-dev make openssl openssl-dev pcre2-dev tar \
26+
zlib-dev curl shadow jemalloc-dev && \
27+
curl -sfSL "${HAPROXY_SRC_URL}/${HAPROXY_BRANCH}/src/haproxy-${HAPROXY_MINOR}.tar.gz" -o haproxy.tar.gz && \
28+
echo "$HAPROXY_SHA256 *haproxy.tar.gz" | sha256sum -c - && \
29+
mkdir -p /tmp/haproxy && \
30+
tar -xzf haproxy.tar.gz -C /tmp/haproxy --strip-components=1 && \
31+
rm -f haproxy.tar.gz && \
32+
make -C /tmp/haproxy -j"$(nproc)" TARGET=linux-musl CPU=generic USE_PCRE2=1 USE_PCRE2_JIT=1 \
33+
USE_TFO=1 USE_LINUX_TPROXY=1 USE_GETADDRINFO=1 \
34+
USE_LUA=1 LUA_LIB=/usr/lib/lua5.4 LUA_INC=/usr/include/lua5.4 \
35+
USE_PROMEX=1 USE_SLZ=1 \
36+
USE_OPENSSL_AWSLC=1 USE_PTHREAD_EMULATION=1 \
37+
SSL_INC=/opt/aws-lc/include SSL_LIB=/opt/aws-lc/lib USE_QUIC=1 \
38+
LDFLAGS="-L/opt/aws-lc/lib -Wl,-rpath,/opt/aws-lc/lib" \
39+
ADDLIB=-ljemalloc \
40+
all && \
41+
make -C /tmp/haproxy TARGET=linux2628 install-bin
42+
143
FROM alpine:3.20
244

345
MAINTAINER Dinko Korunic <dkorunic@haproxy.com>
@@ -21,6 +63,10 @@ ENV DATAPLANE_URL https://github.com/haproxytech/dataplaneapi/releases/download
2163

2264
ARG TARGETPLATFORM
2365

66+
COPY --from=awslc-builder /opt/aws-lc /opt/aws-lc
67+
COPY --from=hapce-builder /usr/local/sbin/haproxy /usr/local/sbin/haproxy
68+
COPY --from=hapce-builder /tmp/haproxy/examples/errorfiles/ /usr/local/etc/haproxy/errors
69+
2470
ARG S6_OVERLAY_VERSION=3.2.1.0
2571
ENV S6_OVERLAY_VERSION $S6_OVERLAY_VERSION
2672
ENV S6_READ_ONLY_ROOT=1
@@ -29,34 +75,15 @@ ENV S6_GROUP=haproxy
2975

3076
COPY /fs /
3177

32-
RUN apk add --no-cache ca-certificates jemalloc && \
33-
apk add --no-cache --virtual build-deps gcc libc-dev \
34-
linux-headers lua5.4-dev make openssl openssl-dev pcre2-dev tar xz \
35-
zlib-dev curl shadow jemalloc-dev && \
36-
curl -sfSL "${HAPROXY_SRC_URL}/${HAPROXY_BRANCH}/src/haproxy-${HAPROXY_MINOR}.tar.gz" -o haproxy.tar.gz && \
37-
echo "$HAPROXY_SHA256 *haproxy.tar.gz" | sha256sum -c - && \
78+
RUN apk add --no-cache ca-certificates jemalloc zlib lua5.4-libs pcre2 shadow curl && \
3879
groupadd "$HAPROXY_GID" && \
3980
useradd -g "$HAPROXY_GID" "$HAPROXY_UID" && \
40-
mkdir -p /tmp/haproxy && \
41-
tar -xzf haproxy.tar.gz -C /tmp/haproxy --strip-components=1 && \
42-
rm -f haproxy.tar.gz && \
43-
make -C /tmp/haproxy -j"$(nproc)" TARGET=linux-musl CPU=generic USE_PCRE2=1 USE_PCRE2_JIT=1 \
44-
USE_TFO=1 USE_LINUX_TPROXY=1 USE_GETADDRINFO=1 \
45-
USE_LUA=1 LUA_LIB=/usr/lib/lua5.4 LUA_INC=/usr/include/lua5.4 \
46-
USE_PROMEX=1 USE_SLZ=1 \
47-
USE_OPENSSL=1 USE_PTHREAD_EMULATION=1 \
48-
USE_QUIC=1 USE_QUIC_OPENSSL_COMPAT=1 \
49-
ADDLIB=-ljemalloc \
50-
all && \
51-
make -C /tmp/haproxy TARGET=linux2628 install-bin install-man && \
81+
chmod +x /usr/local/sbin/haproxy && \
5282
ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy && \
5383
mkdir -p /var/lib/haproxy && \
5484
chown "$HAPROXY_UID:$HAPROXY_GID" /var/lib/haproxy && \
5585
mkdir -p /usr/local/etc/haproxy && \
56-
chown "$HAPROXY_UID:$HAPROXY_GID" /usr/local/etc/haproxy && \
5786
ln -s /usr/local/etc/haproxy /etc/haproxy && \
58-
cp -R /tmp/haproxy/examples/errorfiles /usr/local/etc/haproxy/errors && \
59-
rm -rf /tmp/haproxy && \
6087
case "${TARGETPLATFORM}" in \
6188
"linux/arm64") API_ARCH=arm64 ;; \
6289
"linux/amd64") API_ARCH=x86_64 ;; \
@@ -69,11 +96,18 @@ RUN apk add --no-cache ca-certificates jemalloc && \
6996
tar -xzf dataplaneapi.tar.gz -C /tmp/dataplaneapi && \
7097
rm -f dataplaneapi.tar.gz && \
7198
cp /tmp/dataplaneapi/dataplaneapi /usr/local/bin/dataplaneapi && \
99+
chmod +x /usr/local/bin/dataplaneapi && \
100+
touch /usr/local/etc/haproxy/dataplaneapi.yml && \
72101
chown "$HAPROXY_UID:$HAPROXY_GID" /usr/local/etc/haproxy/dataplaneapi.yml && \
73102
mkdir -p /usr/local/var/lib/dataplaneapi && \
74103
chown "$HAPROXY_UID:$HAPROXY_GID" /usr/local/var/lib/dataplaneapi && \
75104
ln -s /usr/local/var/lib/dataplaneapi /var/lib/dataplaneapi && \
76105
rm -rf /tmp/dataplaneapi && \
106+
rm -f /var/cache/apk/* && \
107+
echo "/lib:/usr/local/lib:/usr/lib:/opt/aws-lc/lib" > "/etc/ld-musl-$(uname -m).path" && \
108+
mkdir -p /opt/aws-lc/ssl && \
109+
rm -rf /opt/aws-lc/ssl/certs && \
110+
ln -s /etc/ssl/certs /opt/aws-lc/ssl/certs && \
77111
case "${TARGETPLATFORM}" in \
78112
"linux/arm64") S6_ARCH=aarch64 ;; \
79113
"linux/amd64") S6_ARCH=x86_64 ;; \
@@ -87,10 +121,7 @@ RUN apk add --no-cache ca-certificates jemalloc && \
87121
tar -C / -Jxpf /tmp/s6-overlay-binaries.tar.xz && \
88122
rm -f /tmp/s6-overlay-scripts.tar.xz /tmp/s6-overlay-binaries.tar.xz && \
89123
chown -R "${S6_USER}:${S6_GROUP}" /init /etc/s6-overlay && \
90-
chmod u+x /init /etc/s6-overlay/scripts/* && \
91-
apk del build-deps && \
92-
apk add --no-cache openssl zlib lua5.4-libs pcre2 && \
93-
rm -f /var/cache/apk/*
124+
chmod u+x /init /etc/s6-overlay/scripts/*
94125

95126
EXPOSE 80
96127
EXPOSE 443

0 commit comments

Comments
 (0)