This post was originally published on this site
docker-compose is a pretty cool tool that allows you to bootstrap and run multiple docker containers with 1 configuration file
Below is an example docker-compose file for staring a 3 node confluent kafka cluster
---
version: '2'
services:
zookeeper:
image: confluentinc/cp-zookeeper:latest
network_mode: host
environment:
ZOOKEEPER_CLIENT_PORT: 32181
ZOOKEEPER_TICK_TIME: 2000
extra_hosts:
- "moby:127.0.0.1"
restart: always
kafka-1:
image: confluentinc/cp-kafka:latest
network_mode: host
depends_on:
- zookeeper
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: localhost:32181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://myserver.com:29092
restart: always
extra_hosts:
- "moby:127.0.0.1"
kafka-2:
image: confluentinc/cp-kafka:latest
network_mode: host
depends_on:
- zookeeper
environment:
KAFKA_BROKER_ID: 2
KAFKA_ZOOKEEPER_CONNECT: localhost:32181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://myserver.com:29093
restart: always
extra_hosts:
- "moby:127.0.0.1"
kafka-3:
image: confluentinc/cp-kafka:latest
network_mode: host
depends_on:
- zookeeper
environment:
KAFKA_BROKER_ID: 3
KAFKA_ZOOKEEPER_CONNECT: localhost:32181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://myserver.com:29094
restart: always
extra_hosts:
- "moby:127.0.0.1"
kafka-rest:
image: confluentinc/cp-kafka-rest:latest
network_mode: host
depends_on:
- kafka-1
- kafka-2
- kafka-3
restart: always
environment:
KAFKA_REST_ZOOKEEPER_CONNECT: localhost:32181
KAFKA_REST_LISTENERS: http://0.0.0.0:8082
KAFKA_REST_HOST_NAME: kafka-rest
extra_hosts:
- "moby:127.0.0.1"
---
version: '2'
services:
zookeeper:
image: confluentinc/cp-zookeeper:latest
network_mode: host
environment:
ZOOKEEPER_CLIENT_PORT: 32181
ZOOKEEPER_TICK_TIME: 2000
extra_hosts:
- "moby:127.0.0.1"
restart: always
kafka-1:
image: confluentinc/cp-kafka:latest
network_mode: host
depends_on:
- zookeeper
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: localhost:32181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://test.myserver.com:29092
restart: always
extra_hosts:
- "moby:127.0.0.1"
kafka-2:
image: confluentinc/cp-kafka:latest
network_mode: host
depends_on:
- zookeeper
environment:
KAFKA_BROKER_ID: 2
KAFKA_ZOOKEEPER_CONNECT: localhost:32181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://test.myserver.com:29093
restart: always
extra_hosts:
- "moby:127.0.0.1"
kafka-3:
image: confluentinc/cp-kafka:latest
network_mode: host
depends_on:
- zookeeper
environment:
KAFKA_BROKER_ID: 3
KAFKA_ZOOKEEPER_CONNECT: localhost:32181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://test.myserver.com:29094
restart: always
extra_hosts:
- "moby:127.0.0.1"
kafka-rest:
image: confluentinc/cp-kafka-rest:latest
network_mode: host
depends_on:
- kafka-1
- kafka-2
- kafka-3
restart: always
environment:
KAFKA_REST_ZOOKEEPER_CONNECT: localhost:32181
KAFKA_REST_LISTENERS: http://0.0.0.0:8082
KAFKA_REST_HOST_NAME: kafka-rest
extra_hosts:
- "moby:127.0.0.1"
You can now run docker-compose by with a second -f and the redefined properties in the test file will ovewrite those in the base file
docker-compose -f docker-compose.yml -f docker-compose.test.yml up -d
More information regarding docker compose advanced configuration can be found here