Skip to content

Commit

Permalink
Migrates zipkin-kafka docker image
Browse files Browse the repository at this point in the history
  • Loading branch information
Adrian Cole committed Oct 17, 2019
1 parent 07b4243 commit 493a7fc
Show file tree
Hide file tree
Showing 7 changed files with 167 additions and 6 deletions.
14 changes: 14 additions & 0 deletions docker/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,20 @@ nginx. To build, run something like
$ docker build -t openzipkin/zipkin-ui:test -f docker/Dockerfile --target zipkin-ui .
```

## zipkin-kafka Docker image

We also provide an image that runs both Kafka+ZooKeeper for testing the [Kafka collector](https://github.com/openzipkin/zipkin/tree/master/zipkin-collector/kafka)
and the upcoming [Kafka storage](https://github.com/openzipkin-contrib/zipkin-storage-kafka).
To build, run something like

```bash
$ docker build -t openzipkin/zipkin-kafka:test -f docker/kafka/Dockerfile .
```

Then configure the [Kafka sender](https://github.com/openzipkin/zipkin-reporter-java/blob/master/kafka11/src/main/java/zipkin2/reporter/kafka11/KafkaSender.java) using a `bootstrapServers` value of `host.docker.internal:9092` if your application is inside the same docker network or `localhost:19092` if not, but running on the same host.

In other words, if you are running a sample application on your laptop, you would use `localhost:19092` bootstrap server to send spans to the Kafka broker running in Docker.

### Dockerfile migration

We are currently migrating the Docker configuration from https://github.com/openzipkin/docker-zipkin/tree/master/zipkin.
Expand Down
12 changes: 9 additions & 3 deletions docker/hooks/post_build
Original file line number Diff line number Diff line change
Expand Up @@ -15,16 +15,22 @@ for tag in ${TAGS[@]:1}; do
docker tag "openzipkin/zipkin-slim:${TAGS[0]}" "openzipkin/zipkin-slim:$tag"
done

# We always build an image containing nginx and zipkin-lens in addition to the default image of zipkin-server
echo Building zipkin-ui

# We always build test images formerly hosted on openzipkin/docker-zipkin
# SOURCE_BRANCH contains the name of the branch or tag being built. Our build of the master branch
# ignores this argument, while our build of release tags uses it to fetch the right release artifact.

echo Building zipkin-ui
docker build --build-arg version="$SOURCE_BRANCH" -f "$DOCKERFILE_PATH" -t "openzipkin/zipkin-ui:${TAGS[0]}" --target zipkin-ui .
for tag in ${TAGS[@]:1}; do
docker tag "openzipkin/zipkin-ui:${TAGS[0]}" "openzipkin/zipkin-ui:$tag"
done

echo Building zipkin-kafka
docker build --build-arg version="$SOURCE_BRANCH" -f "docker/kafka/Dockerfile"-t "openzipkin/zipkin-kafka:${TAGS[0]}" --target zipkin-kafka .
for tag in ${TAGS[@]:1}; do
docker tag "openzipkin/zipkin-kafka:${TAGS[0]}" "openzipkin/zipkin-kafka:$tag"
done

# We also build storage images to correspond with the server version to keep schemas up to date
for storage in cassandra; do
echo Building "$storage"
Expand Down
5 changes: 2 additions & 3 deletions docker/hooks/post_push
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,13 @@
set -v

if [[ "$DOCKER_REPO" == "index.docker.io/openzipkin/zipkin" ]]; then
# We always push zipkin-slim / zipkin-ui
echo Pushing zipkin-slim and zipkin-ui
echo Pushing test zipkin-slim and test images
IFS=',' read -ra TAGS <<< "$DOCKER_TAG"
for tag in ${TAGS[@]}; do
docker push "openzipkin/zipkin-slim:$tag"
docker push "openzipkin/zipkin-ui:$tag"
docker push "openzipkin/zipkin-kafka:$tag"

# We also push storage images on every build
for storage in cassandra; do
docker push "openzipkin/zipkin-${storage}:$tag"
done
Expand Down
43 changes: 43 additions & 0 deletions docker/kafka/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
#
# Copyright 2015-2019 The OpenZipkin Authors
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
# in compliance with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software distributed under the License
# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
# or implied. See the License for the specific language governing permissions and limitations under
# the License.
#

FROM alpine

ENV SCALA_VERSION 2.12
ENV KAFKA_VERSION 2.3.0
ENV ZOOKEEPER_VERSION 3.4.14

WORKDIR /kafka
ADD /docker/kafka/install.sh /kafka/install
RUN /kafka/install

ADD /docker/kafka/wait-for-zookeeper.sh /kafka/bin
ADD /docker/kafka/start.sh /kafka/bin

# Share the same base image to reduce layers used in testing
FROM openzipkin/jre-full:11.0.4-11.33
LABEL MAINTAINER Zipkin "https://zipkin.io/"

WORKDIR /kafka

RUN ["/busybox/sh", "-c", "adduser -g '' -h /kafka -D kafka"]

COPY --from=0 --chown=kafka /kafka /kafka

USER kafka

# Port 19092 is for connections from the Docker host
EXPOSE 2181 9092 19092

ENTRYPOINT ["/busybox/sh", "/kafka/bin/start.sh"]
48 changes: 48 additions & 0 deletions docker/kafka/install.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
#!/bin/sh
#
# Copyright 2015-2019 The OpenZipkin Authors
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
# in compliance with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software distributed under the License
# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
# or implied. See the License for the specific language governing permissions and limitations under
# the License.
#

set -eux

echo "*** Installing Kafka and dependencies"
apk add --update --no-cache jq curl

APACHE_MIRROR=$(curl --stderr /dev/null https://www.apache.org/dyn/closer.cgi\?as_json\=1 | jq -r '.preferred')

curl -sSL $APACHE_MIRROR/zookeeper/zookeeper-$ZOOKEEPER_VERSION/zookeeper-$ZOOKEEPER_VERSION.tar.gz | tar xz
mkdir zookeeper
mv zookeeper-$ZOOKEEPER_VERSION/conf zookeeper/

# download kafka binaries
curl -sSL $APACHE_MIRROR/kafka/$KAFKA_VERSION/kafka_$SCALA_VERSION-$KAFKA_VERSION.tgz | tar xz
mv kafka_$SCALA_VERSION-$KAFKA_VERSION/* .

# Set explicit, basic configuration
cat > config/server.properties <<-EOF
broker.id=0
zookeeper.connect=127.0.0.1:2181
replica.socket.timeout.ms=1500
log.dirs=/kafka/logs
auto.create.topics.enable=true
offsets.topic.replication.factor=1
listeners=PLAINTEXT://0.0.0.0:9092,PLAINTEXT_HOST://0.0.0.0:19092
listener.security.protocol.map=PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
EOF

mkdir /kafka/logs

echo "*** Cleaning Up"
rm -rf zookeeper-$ZOOKEEPER_VERSION

echo "*** Image build complete"
31 changes: 31 additions & 0 deletions docker/kafka/start.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#!/busybox/sh
#
# Copyright 2015-2019 The OpenZipkin Authors
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
# in compliance with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software distributed under the License
# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
# or implied. See the License for the specific language governing permissions and limitations under
# the License.
#


echo Starting Zookeeper
/busybox/sh /kafka/bin/kafka-run-class.sh -Dlog4j.configuration=file:/kafka/config/log4j.properties org.apache.zookeeper.server.quorum.QuorumPeerMain /kafka/zookeeper/conf/zoo_sample.cfg &
/busybox/sh /kafka/bin/wait-for-zookeeper.sh

if [[ -z "$KAFKA_ADVERTISED_HOST_NAME" ]]; then
listeners=PLAINTEXT://:9092
# Have internal docker producers and consumers use the normal hostname:9092, and outside docker localhost:19092
echo advertised.listeners=PLAINTEXT://${HOSTNAME}:9092,PLAINTEXT_HOST://localhost:19092 >> /kafka/config/server.properties
else
# Have internal docker producers and consumers use the normal hostname:9092, and outside docker the advertised host on port 19092
echo "advertised.listeners=PLAINTEXT://${HOSTNAME}:9092,PLAINTEXT_HOST://${KAFKA_ADVERTISED_HOST_NAME}:19092" >> /kafka/config/server.properties
fi

echo Starting Kafka
/busybox/sh /kafka/bin/kafka-run-class.sh -name kafkaServer -Dlog4j.configuration=file:/kafka/config/log4j.properties kafka.Kafka /kafka/config/server.properties
20 changes: 20 additions & 0 deletions docker/kafka/wait-for-zookeeper.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#!/busybox/sh
#
# Copyright 2015-2019 The OpenZipkin Authors
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
# in compliance with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software distributed under the License
# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
# or implied. See the License for the specific language governing permissions and limitations under
# the License.
#


until echo stat | nc 127.0.0.1 2181
do
sleep 1
done

0 comments on commit 493a7fc

Please sign in to comment.