---
# System prepended metadata

title: Building a Docker compose file

---

# Building a Docker compose file
```dockerfile=
# This is your docker compose version.
# The version of compose is set by your docker version. That can be found here.
# https://docs.docker.com/compose/compose-file/compose-versioning/
version: "3"

# All your containers are stored inside this services tag.
services:
  # This is one of the containers in this example. It's name is db.
  db:
    # The image for docker to pull down before starting the container.
    image: postgres
    # This is the hostname that other containers can reach this one.
    # They have to be on the same docker network for this to work.
    hostname: postgresql
    # Volumes are where your docker container can stores persistant information.
    volumes:
    # - local/directory:/container/directory
      - ./data/db:/var/lib/postgresql/data
  # Environment variables are predefined knobs. 
  # You can set before starting your container.
  # They are useful for defining usernames or UIDs for the container to run as.
    environment:
      # PUID and PGID are unique IDs given to each user on linux.
      # To creat a new user and get it's IDs use.
      # useradd youruser; id youruser
      - PUID=1000
      - PGID=1000
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    networks:
     - mynetwork 
    depends_on:
      - db

networks:
  mynetwork:
    # External networks have to already exist to use them.
    # They can either be from an other container or created manually using.
    # docker network create mynetwork || true
    external: true

```