Docker compose is the way to handle a multi container application.
File: "docker-compose.yml"
services:
django-app:
build:
context: .
dockerfile: Dockerfile
# TODO switch this command out with UNICORN
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/app
expose:
- "8000" # Exposes port 8000 to the internal Docker network
env_file:
- document_classification/document_classification_project/.env
nginx:
image: nginx:latest
volumes:
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
ports:
- "80:80"
depends_on:
- django-app
Yes the version tag is deprecated and not needed anymore.
Services
each service corresponds to a docker container. docker compose builds and starts them all together in the right order.
django-app and nginx are just names I chose to design the containers.
build
build defines the build configurations for django-app service
context: . indicates that it should use the current directory (as indicated by .) as the context. The Dockerfile needs to be an actual DockerFiles.
the command is run inside of that container. It overwrites the one inside of the Dockerfile.
Volumes
This is a way to share data between the host and the container. The host is the server where the containers are running.
I actually don't know why this is used for django-app. I should ask someone about it. It would probably work without it as well.
For nginx its to copy the settings inside of the container which is downloaded via nginx:latest.
notice that there is no dockerfile for nginx