← Back to team overview

ubuntu-docker-images team mailing list archive

Re: [RFC/RFA] Kafka Dockerfile

 

On Wed, Apr 06, 2022 at 06:23:32PM -0400, Sergio Durigan Junior wrote:
On Wednesday, April 06 2022, Athos Ribeiro wrote:

Hi,

Attached is a first version of the Kafka OCI Dockerfile.
It has been based on our other snap-based Dockerfiles.

Thanks a lot, Athos.

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.

This is the same approach I took with the Loki ROCK, so +1.

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

Thank you for the detailed instructions on how to test.  This made it
easier for me to verify that things are working as they should.

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; \

Indentation is wrong here.

	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


Otherwise, I like the simplicity of the Dockerfile and I agree with the
plan to invest on the documentation in order to explain how to use this
image.

LGTM.

Thanks, Sergio,

I fixed the indentation issue you pointed and pushed the package to https://code.launchpad.net/~canonical-server/ubuntu-docker-images/+git/kafka

I also followed up with filing an MP to add docker-compose and k8s
examples at
https://code.launchpad.net/~athos-ribeiro/ubuntu-docker-images/+git/kafka/+merge/418884


Cheers,

--
Sergio
GPG key ID: E92F D0B3 6B14 F1F4 D8E0  EB2F 106D A1C8 C3CB BF14

--
Athos Ribeiro


References