Skip to content

Commit 65c6ceb

Browse files
committed
Add Zookeeper multi-arch support
1 parent 97957bd commit 65c6ceb

File tree

6 files changed

+181
-28
lines changed

6 files changed

+181
-28
lines changed

.travis.yml

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
sudo: required
2+
3+
language: java
4+
5+
services:
6+
- docker
7+
8+
# This version will be also tagged as 'latest'
9+
env:
10+
global:
11+
- LATEST="3.7.0"
12+
13+
matrix:
14+
include:
15+
- jdk: openjdk11
16+
env: ZOOKEEPER_VERSION=3.7.0 JAVA_VERSION=11-jre-slim
17+
18+
# Upgrade Docker Engine so we can use buildx
19+
before_install:
20+
- curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
21+
- sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
22+
- sudo apt-get update
23+
- sudo apt-get -y -o Dpkg::Options::="--force-confnew" install docker-ce
24+
25+
install:
26+
- docker --version
27+
- docker buildx version
28+
- docker-compose --version
29+
- echo "ZOOKEEPER VERSION $ZOOKEEPER_VERSION"
30+
- echo "JAVA VERSION $JAVA_VERSION"
31+
- echo "LATEST VERSION $LATEST"
32+
- if [ -z ${DOCKER_PASSWORD+x} ]; then echo "Using unauthenticated pulls on PR"; else echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin; fi
33+
- export CURRENT=${ZOOKEEPER_VERSION}
34+
35+
# Prepare the environment for multi-arch builds
36+
- docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
37+
- docker buildx create --use
38+
39+
# Build all of the platforms and cache the result
40+
- bash docker_buildx
41+
42+
# Using the multi-arch build cache
43+
- bash docker_buildx --load
44+
45+
script:
46+
# Shellcheck main source files
47+
- shellcheck -s bash start-zk.sh
48+
- cd test
49+
# Shellcheck the tests
50+
- shellcheck -x -e SC1090 -s bash *.sh **/*.sh
51+
- ./verifyImageLabels.sh # Verify docker image's label
52+
# Add more tests in the future
53+
54+
# This will deploy from master. Might want to have a single release branch for a little more control
55+
deploy:
56+
- provider: script
57+
script: bash docker_push latest
58+
on:
59+
repo: wurstmeister/zookeeper-docker
60+
branch: master
61+
condition: $CURRENT = $LATEST
62+
- provider: script
63+
script: bash docker_push "${ZOOKEEPER_VERSION}"
64+
on:
65+
repo: wurstmeister/zookeeper-docker
66+
# branch: release

Dockerfile

Lines changed: 46 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,53 @@
1-
FROM wurstmeister/base
2-
3-
MAINTAINER Wurstmeister
4-
5-
ENV ZOOKEEPER_VERSION 3.4.13
6-
7-
#Download Zookeeper
8-
RUN wget -q http://mirror.vorboss.net/apache/zookeeper/zookeeper-${ZOOKEEPER_VERSION}/zookeeper-${ZOOKEEPER_VERSION}.tar.gz && \
9-
wget -q https://www.apache.org/dist/zookeeper/KEYS && \
10-
wget -q https://www.apache.org/dist/zookeeper/zookeeper-${ZOOKEEPER_VERSION}/zookeeper-${ZOOKEEPER_VERSION}.tar.gz.asc && \
11-
wget -q https://www.apache.org/dist/zookeeper/zookeeper-${ZOOKEEPER_VERSION}/zookeeper-${ZOOKEEPER_VERSION}.tar.gz.md5
12-
13-
#Verify download
14-
RUN md5sum -c zookeeper-${ZOOKEEPER_VERSION}.tar.gz.md5 && \
15-
gpg --import KEYS && \
16-
gpg --verify zookeeper-${ZOOKEEPER_VERSION}.tar.gz.asc
17-
18-
#Install
19-
RUN tar -xzf zookeeper-${ZOOKEEPER_VERSION}.tar.gz -C /opt
20-
21-
#Configure
22-
RUN mv /opt/zookeeper-${ZOOKEEPER_VERSION}/conf/zoo_sample.cfg /opt/zookeeper-${ZOOKEEPER_VERSION}/conf/zoo.cfg
23-
24-
ENV JAVA_HOME /usr/lib/jvm/java-7-openjdk-amd64
25-
ENV ZK_HOME /opt/zookeeper-${ZOOKEEPER_VERSION}
1+
ARG java_version=11-jre-slim
2+
3+
FROM openjdk:${java_version}
4+
5+
ARG zookeeper_version=3.7.0
6+
ARG vcs_ref=unspecified
7+
ARG build_date=unspecified
8+
9+
LABEL org.label-schema.name="zookeeper" \
10+
org.label-schema.description="Apache Zookeeper" \
11+
org.label-schema.build-date="${build_date}" \
12+
org.label-schema.vcs-url="https://github.com/wurstmeister/zookeeper-docker" \
13+
org.label-schema.vcs-ref="${vcs_ref}" \
14+
org.label-schema.version="${java_version}_${zookeeper_version}}" \
15+
org.label-schema.schema-version="1.0" \
16+
maintainer="wurstmeister"
17+
18+
ENV ZOOKEEPER_VERSION=$zookeeper_version
19+
20+
# Install deps
21+
RUN apt-get update && apt-get install -y \
22+
wget \
23+
gnupg \
24+
&& rm -rf /var/lib/apt/lists/*
25+
26+
# Download Zookeeper
27+
RUN wget -q https://mirror.vorboss.net/apache/zookeeper/zookeeper-${ZOOKEEPER_VERSION}/apache-zookeeper-${ZOOKEEPER_VERSION}-bin.tar.gz && \
28+
wget -q https://www.apache.org/dist/zookeeper/KEYS && \
29+
wget -q https://downloads.apache.org/zookeeper/zookeeper-${ZOOKEEPER_VERSION}/apache-zookeeper-${ZOOKEEPER_VERSION}-bin.tar.gz.asc && \
30+
wget -q https://downloads.apache.org/zookeeper/zookeeper-${ZOOKEEPER_VERSION}/apache-zookeeper-${ZOOKEEPER_VERSION}-bin.tar.gz.sha512
31+
32+
# Verify download
33+
RUN sha512sum -c apache-zookeeper-${ZOOKEEPER_VERSION}-bin.tar.gz.sha512 && \
34+
gpg --import KEYS && \
35+
gpg --verify apache-zookeeper-${ZOOKEEPER_VERSION}-bin.tar.gz.asc
36+
37+
# Install
38+
RUN tar -xzf apache-zookeeper-${ZOOKEEPER_VERSION}-bin.tar.gz -C /opt && \
39+
mv /opt/apache-zookeeper-${ZOOKEEPER_VERSION}-bin /opt/zookeeper
40+
41+
# Configure
42+
RUN mv /opt/zookeeper/conf/zoo_sample.cfg /opt/zookeeper/conf/zoo.cfg
43+
44+
ENV ZK_HOME /opt/zookeeper
2645
RUN sed -i "s|/tmp/zookeeper|$ZK_HOME/data|g" $ZK_HOME/conf/zoo.cfg; mkdir $ZK_HOME/data
2746

2847
ADD start-zk.sh /usr/bin/start-zk.sh
2948
EXPOSE 2181 2888 3888
3049

31-
WORKDIR /opt/zookeeper-${ZOOKEEPER_VERSION}
32-
VOLUME ["/opt/zookeeper-${ZOOKEEPER_VERSION}/conf", "/opt/zookeeper-${ZOOKEEPER_VERSION}/data"]
50+
WORKDIR /opt/zookeeper
51+
VOLUME ["/opt/zookeeper/conf", "/opt/zookeeper/data"]
3352

3453
CMD /usr/sbin/sshd && bash /usr/bin/start-zk.sh

docker_buildx

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#!/bin/bash -e
2+
3+
# Build for amd64 and arm64
4+
PLATFORMS="linux/amd64,linux/arm64"
5+
6+
EXTRA_BUILDX_ARGS=$@
7+
CACHE_LOCATION="/tmp/docker-cache"
8+
9+
if [[ "${EXTRA_BUILDX_ARGS}" == *"--load"* ]]; then
10+
# We have to load the image for the current architecture only in order to run tests, so let's
11+
# pull FROM the multi-arch build that happened previously
12+
PLATFORMS="linux/${TRAVIS_CPU_ARCH}"
13+
CACHE="--cache-from=type=local,src=${CACHE_LOCATION}"
14+
elif [[ "${EXTRA_BUILDX_ARGS}" == *"--push"* ]]; then
15+
# Push ALL architectures FROM the multi-arch build cache that happened previously
16+
CACHE="--cache-from=type=local,src=${CACHE_LOCATION}"
17+
else
18+
# This is the multi-arch build that we should cache and use later
19+
CACHE="--cache-to=type=local,dest=${CACHE_LOCATION}"
20+
fi
21+
22+
docker buildx build \
23+
$CACHE \
24+
--platform "${PLATFORMS}" \
25+
--progress=plain \
26+
--build-arg zookeeper_version=$ZOOKEEPER_VERSION \
27+
--build-arg java_version=$JAVA_VERSION \
28+
--build-arg vcs_ref=$TRAVIS_COMMIT \
29+
--build-arg build_date=$(date -u +"%Y-%m-%dT%H:%M:%SZ") \
30+
-t wurstmeister/zookeeper \
31+
$EXTRA_BUILDX_ARGS \
32+
.

docker_push

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
!/bin/bash -e
2+
3+
BASE_IMAGE="wurstmeister/zookeeper"
4+
IMAGE_VERSION="$1"
5+
6+
if [ -z "$IMAGE_VERSION" ]; then
7+
echo "No IMAGE_VERSION var specified"
8+
exit 1
9+
fi
10+
11+
echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
12+
TARGET="$BASE_IMAGE:$IMAGE_VERSION"
13+
bash docker_buildx \
14+
-t "$TARGET" \
15+
--push

start-zk.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
sed -i -r 's|#(log4j.appender.ROLLINGFILE.MaxBackupIndex.*)|\1|g' $ZK_HOME/conf/log4j.properties
22
sed -i -r 's|#autopurge|autopurge|g' $ZK_HOME/conf/zoo.cfg
33

4-
/opt/zookeeper-3.4.13/bin/zkServer.sh start-foreground
4+
/opt/zookeeper/bin/zkServer.sh start-foreground

test/verifyImageLabels.sh

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
2+
#!/bin/bash -e
3+
4+
VCS_REF=$(docker inspect -f '{{ index .Config.Labels "org.label-schema.vcs-ref"}}' wurstmeister/zookeeper)
5+
echo "VCS_REF=$VCS_REF"
6+
if [ -z "$VCS_REF" ] || [ "$VCS_REF" = "unspecified" ]; then
7+
echo "org.label-schema.vcs-ref is empty or unspecified"
8+
exit 1
9+
fi
10+
if ! git cat-file -e "$VCS_REF^{commit}"; then
11+
echo "$VCS_REF Not a valid git commit"
12+
exit 1
13+
fi
14+
15+
BUILD_DATE=$(docker inspect -f '{{ index .Config.Labels "org.label-schema.build-date"}}' wurstmeister/zookeeper)
16+
echo "BUILD_DATE=$BUILD_DATE"
17+
if ! date -d "$BUILD_DATE"; then
18+
echo "$BUILD_DATE Not a valid date"
19+
exit 1
20+
fi
21+
exit 0

0 commit comments

Comments
 (0)