🐳docker-compose + 🎨diagrams = docker-compose-diagram 🐳🎨
docker-compose-diagram
🐳 docker-compose + 🎨 diagrams = docker-compose-diagram 🐳🎨
Motivation
This tool combines diagrams package and docker-compose allowing you to create diagrams out of docker-compose files. The tool might be helpful for documentation purposes.Installation
Please install graphviz. Then install this util from pypi via pip or other package manager.
pip install docker-compose-diagram
Usage
compose-diagram --file docker-compose.yml --direction=TB --nodesep=1.2
Example
Let's say we have the following docker-compose file:
docker-compose.yml
version: "3.8"
services:
backend-api: build: context: .. dockerfile: docker/django/Dockerfile image: dev_backend containername: devbackend restart: always volumes: - ..:/app/ depends_on: - db - redis - dynamodb - s3_minio working_dir: "/app/backend" expose: - 8000 ports: - "8000:8000" command: runserver labels: "dockercomposediagram.icon": "django" "dockercomposediagram.cluster": "EC2 Instance" "dockercomposediagram.description": "provides REST API"
db: containername: backendapi_db image: mysql/mysql-server:8 volumes: - mysql_data:/var/lib/mysql restart: unless-stopped ports: - "3306:3306" labels: "dockercomposediagram.icon": "mysql" "dockercomposediagram.cluster": "EC2 Instance" "dockercomposediagram.description": "main database"
s3_minio: image: minio/minio:latest containername: devminio entrypoint: sh command: -c 'minio server /data --console-address ":9001"' ports: - "9000:9000" - "9001:9001" volumes: - ./minio_data:/data labels: "dockercomposediagram.icon": "s3" "dockercomposediagram.description": "stores images"
celery-worker: containername: devcelery_worker build: context: .. dockerfile: docker/django/Dockerfile image: dev_backend working_dir: /app/backend volumes: - ..:/app/ command: celery -A config worker --autoscale=8,1 -P gevent -l INFO restart: unless-stopped depends_on: - db - redis labels: "dockercomposediagram.icon": "celery" "dockercomposediagram.cluster": "EC2 Instance" "dockercomposediagram.description": "runs background jobs"
celery-beat: containername: devcelery_beat build: context: .. dockerfile: docker/django/Dockerfile image: dev_backend working_dir: /app/backend volumes: - ..:/app/ command: celery -A config beat -l INFO restart: unless-stopped depends_on: - db - redis labels: "dockercomposediagram.icon": "celery" "dockercomposediagram.cluster": "EC2 Instance" "dockercomposediagram.description": "schedules background jobs"
dynamodb: command: "-jar DynamoDBLocal.jar -sharedDb -dbPath ./data" image: "amazon/dynamodb-local:latest" containername: devdynamodb ports: - "11000:8000" volumes: - "./dynamodb:/home/dynamodblocal/data" working_dir: /home/dynamodblocal labels: "dockercomposediagram.description": "stores sms codes"
redis: image: redis:alpine containername: devredis restart: unless-stopped ports: - "6379:6379" labels: "dockercomposediagram.cluster": "EC2 Instance" "dockercomposediagram.description": "used as broker"
volumes: mysql_data:
will create the following .png file 
Use cases
- project documentation;
- catching dependencies bugs in your docker-compose file;