ubuntu-docker-images team mailing list archive
-
ubuntu-docker-images team
-
Mailing list archive
-
Message #00185
Re: [RFC/RFA] Kafka Dockerfile
Hi,
Attached is a first version of the Kafka OCI Dockerfile.
It has been based on our other snap-based Dockerfiles.
Once everyone is happy with the Dockerfile proposed here, I will follow
up with launchpad MPs for the examples and documentation, as well as
github PRs for the OCI tests.
I decided not to add a default command or entrypoint to override the
base image one given the amount of binaries shipped by kafka (zookeeper,
the server, trogdor, producers and consumers, etc) and due to the need
of custom configuration files to execute those. Instead, we should write
good documentation on how to use the image.
If you want to test the image, you could:
start zookeeper:
docker run --network=$YOUR_DOCKER_NETWORK --name=zookeeper --rm -it -p 2181:2181 $YOUR_IMAGE zookeeper-server-start.sh /etc/kafka/zookeeper.properties
start the kafka server:
docker run --name=kafka --network=$YOUR_DOCKER_NETWORK --rm -it -p 9092:9092 $YOUR_IMAGE kafka-server-start.sh /etc/kafka/server.properties --override zookeeper.connect=zookeeper:2181
leave the above running and play with client binaries:
docker run --rm -it --network $YOUR_DOCKER_NETWORK $YOUR_IMAGE kafka-topics.sh --create --partitions 1 --replication-factor 1 --topic quickstart-events --bootstrap-server kafka:9092
docker run --rm -it --network $YOUR_DOCKER_NETWORK $YOUR_IMAGE kafka-topics.sh --describe --topic quickstart-events --bootstrap-server kafka:9092
docker run --rm -it --network $YOUR_DOCKER_NETWORK $YOUR_IMAGE kafka-console-producer.sh --topic quickstart-events --bootstrap-server kafka:9092
here you may type messages and use ctrl-c to exit; then you can
inspect the messages with the consumer below.
docker run --rm -it --network $YOUR_DOCKER_NETWORK $YOUR_IMAGE kafka-console-consumer.sh --topic quickstart-events --from-beginning --bootstrap-server kafka:9092
Please, let me know what you think.
--
Athos Ribeiro
FROM ubuntu:jammy AS snap-installer
RUN set -eux; \
apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get full-upgrade -y && \
DEBIAN_FRONTEND=noninteractive apt-get install -y \
jq curl ca-certificates squashfs-tools && \
# taken from https://snapcraft.io/docs/build-on-docker
# Alternatively, we can install snapd, and issue `snap download kafka`
curl -L -H 'Snap-CDN: none' $(curl -H 'X-Ubuntu-Series: 16' -H "X-Ubuntu-Architecture: $(dpkg --print-architecture)" 'https://api.snapcraft.io/api/v1/snaps/details/kafka?channel=rock/edge' | jq '.download_url' -r) --output kafka.snap && \
mkdir -p /snap && unsquashfs -d /snap/kafka kafka.snap
FROM ubuntu:jammy
LABEL maintainer="Ubuntu Server team <ubuntu-server@xxxxxxxxxxxxxxxx>"
ENV TZ=UTC PATH=/opt/kafka/bin:$PATH
COPY --from=snap-installer /snap/kafka/opt/kafka /opt/kafka
# Copy the manifest files from the snap
COPY --from=snap-installer /snap/kafka/snap/snapcraft.yaml /usr/share/rocks/
COPY --from=snap-installer /snap/kafka/snap/manifest.yaml /usr/share/rocks/
RUN set -eux; \
ln -s /opt/kafka/config /etc/kafka; \
apt-get update; \
DEBIAN_FRONTEND=noninteractive apt-get full-upgrade -y; \
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
openjdk-11-jre-headless ca-certificates tzdata \
; \
DEBIAN_FRONTEND=noninteractive apt-get remove --purge --auto-remove -y; \
rm -rf /var/lib/apt/lists/*; \
# create deb manifest
(echo "# os-release" && cat /etc/os-release && echo "# dpkg-query" && dpkg-query -f '${db:Status-Abbrev},${binary:Package},${Version},${source:Package},${Source:Version}\n' -W) > /usr/share/rocks/dpkg.query
EXPOSE 2181 9092
Follow ups