Beroenden och felsökning i Docker Compose

Docker för medelnivå

Mike Metzger

Data Engineering Consultant

Vad är beroenden?

  • Beroenden definierar startordningen för resurser
  • Resurser (containrar) kan kräva andra resurser
  • Exempelwebbapplikation
    • Databascontainern postgresql måste starta först

Exempel på containerberoende – postgres

Docker för medelnivå

Vad är beroenden?

  • Beroenden definierar startordningen för resurser
  • Resurser (containrar) kan kräva andra resurser
  • Exempelwebbapplikation
    • Databascontainern postgresql måste starta först
    • Sedan python_app

Exempel på containerberoende – python_app

Docker för medelnivå

Vad är beroenden?

  • Beroenden definierar startordningen för resurser
  • Resurser (containrar) kan kräva andra resurser
  • Exempelwebbapplikation
    • Databascontainern postgresql måste starta först
    • Sedan python_app
    • Slutligen webbservern nginx

Exempel på containerberoende – fullständigt

Docker för medelnivå

depends_on

  • Beroenden definieras med attributet depends_on
  • Beroenden kan kedjas som i exemplet
  • Eller kan en resurs ha flera beroenden om det behövs
  • Ordningen i compose.yaml-filen spelar ingen roll
services:
  postgresql:
    image: postgresql:latest

python_app: image: custom_app depends_on: - postgresql
nginx: image: nginx/latest depends_on: - python_app
Docker för medelnivå

Stänga ned applikationer

  • Nedstängning av en applikation sker i omvänd ordning
  • Stoppar resursen nginx

Exempel på containerberoende – fullständigt

Docker för medelnivå

Stänga ned applikationer

  • Nedstängning av en applikation sker i omvänd ordning
  • Stoppar resursen nginx
  • Stoppar sedan resursen python_app

Exempel på containerberoende – python_app

Docker för medelnivå

Stänga ned applikationer

  • Nedstängning av en applikation sker i omvänd ordning
  • Stoppar resursen nginx
  • Stoppar sedan resursen python_app
  • Och slutligen resursen postgresql

Exempel på containerberoende – postgres

Docker för medelnivå

Fler alternativ

  • Docker Compose erbjuder fler alternativ för beroenden
  • condition: anger när en resurs anses vara redo.
    • service_started – Resursen har startat normalt
      • Standardbeteende
    • service_completed_successfully – Resursen har körts klart, t.ex. en inledande konfiguration
    • service_healthy – Resursen uppfyller ett kriterium definierat av healthcheck
services:
  nginx:
    image: nginx/latest
    depends_on:
      python_app:
        condition: service_started

python_app: image: custom_app depends_on: postgresql: condition: service_healthy
Docker för medelnivå

Felsökningsverktyg i Docker Compose

  • Docker Compose har ytterligare felsökningsverktyg
  • docker compose logs – Samlar utdata från alla resurser i applikationen
    redis-1  | * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
    redis-1  | * Running mode=standalone, port=6379.
    redis-1  | * Server initialized
    redis-1  | * Ready to accept connections tcp
    web-1    | * Serving Flask app 'app.py'
    web-1    |  * Running on all addresses (0.0.0.0)
    web-1    |  * Running on http://172.20.0.2:5000
    web-1    | Press CTRL+C to quit
    
  • docker compose logs <resourcename>
Docker för medelnivå

docker compose top

  • docker compose top visar status för resurser i en applikation
composetest-redis-1
UID   PID    PPID   C    STIME   TTY   TIME       CMD
999   2767   2726   0    01:16   ?     00:03:27   redis-server *:6379

composetest-web-1
UID    PID    PPID   C    STIME   TTY   TIME       CMD
root   2768   2740   0    01:16   ?     00:00:23   /usr/local/bin/python /usr/local/bin/flask run
Docker för medelnivå

Nu kör vi en övning!

Docker för medelnivå

Preparing Video For Download...