Docker Compose

Posted by Rico's Nerd Cluster on June 5, 2024

Environment Variable Reading

Through .env: TODO

Through inline env variables

1
2
3
4
5
6
7
8
9
10
11
12
version: '3.8'
services:
  app:
    image: your-image:latest
    environment:
      - USER_NAME=${USER}
    volumes:
      - /home/${USER}/data:/data
    build:
      context: .
      args:
        USER_NAME: ${USER}
  • we are creating a new environment variable USER_NAME=${USER}.
  • We are mounting /home/${USER}/data (local machine) to /data (docker)

Use Cases

  • docker-compose.yml:
    1
    2
    
      stdin_open: true  # Keep stdin open to allow interactive mode, docker run -i
      tty: true         # Allocate a pseudo-TTY, docker run -t
    
    • docker ps -a: see all recently launched and exited containers
  • Launch a docker container based on platform:
    • In docker-compose.yml:
      1
      2
      3
      4
      
        services:
          runtime:
            profiles:
              - arm
      
    • In an upper level script:
      1
      2
      3
      4
      5
      
        ARCH=$(uname -m)
        CURRENT_DIR=$(dirname $(realpath docker-compose.yml))
        if [ "$ARCH" = "aarch64" ]; then
            docker compose --profile arm up
        fi
      

      Launch Docker Containers

  • Caution: Docker containers are not completely ephemeral

    • Use docker composeup --build with --build to build the containers so they are ephemeral