Docker 2024 04/Docker Compose: Unterschied zwischen den Versionen

Aus CCWiki
Zur Navigation springen Zur Suche springen
Markierung: Zurückgesetzt
 
(24 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 4: Zeile 4:


  Der Standard Name für '''Docker Compose''' Dateien ist docker-compose.yml.
  Der Standard Name für '''Docker Compose''' Dateien ist docker-compose.yml.
  Mit dem Parameter {{BSL|-f}} kann jedoch direkt eine '''Docker Compose''' Datei angegeben werden.
  Mit dem Parameter {{BSL|-f}} kann jedoch direkt eine '''Docker Compose''' Datei angegeben werden.
  Z.b.: {{BSL|docker-compose -f service1.yml}}
  Z.b.: {{BSL|docker-compose -f service1.yml}}


=== Beispiel 1) Erster Container ===
=== Beispiel 1) Erster Container ===
Siehe [[Docker_2024_04/Containers#Beispiel_1):_Erster_Container_start|hier]]
Beispiel siehe [[Docker_2024_04/Containers#Beispiel_1):_Erster_Container_start|hier]]


Inhalt '''docker-compose.yml'''
Inhalt '''docker-compose.yml'''
Zeile 21: Zeile 23:
     image: ubuntu:22.04
     image: ubuntu:22.04
     #Command to run
     #Command to run
     command: bash
     command: ["bash"]
     #Parameter -it
     #Parameter -it
     stdin_open: true  
     stdin_open: true  
Zeile 50: Zeile 52:
   node_webserver:
   node_webserver:
     #Container name, --name
     #Container name, --name
     container_name: node_webserver
     container_name: example5
     #Used image
     #Used image
     image: example5:1.0
     image: example5:1.0
Zeile 74: Zeile 76:


=== Beispiel 3) Node Webserver (existing Image, Volume Mount) ===
=== Beispiel 3) Node Webserver (existing Image, Volume Mount) ===
Siehe [[Docker_2024_04/Containers#Beispiel_5.1):_Node_Webserver_Using_Named_Volume|hier]]
Beispiel siehe [[Docker_2024_04/Containers#Beispiel_5.1):_Node_Webserver_Using_Named_Volume|hier]]


Inhalt '''docker-compose.yml'''
Inhalt '''docker-compose.yml'''
Zeile 82: Zeile 84:
   node_webserver:
   node_webserver:
     #Container name, --name
     #Container name, --name
     container_name: node_webserver
     container_name: example5
     #Used image
     #Used image
     image: example5:1.0
     image: example5:1.0
Zeile 96: Zeile 98:


Das Volume wird automatisch erstellt und bleibt auch nach {{BSL|docker compose down}} erhalten.
Das Volume wird automatisch erstellt und bleibt auch nach {{BSL|docker compose down}} erhalten.
=== Beispiel 4) Node Webserver (building Image) ===
Inhalt '''Dockerfile'''
Siehe [[Docker_2024_04/Containers#Dockerfile|hier]]
Inhalt '''docker-compose.yml'''
{{BML|code=
services:
  #Service name
  node_webserver:
    #Container name, --name
    container_name: node_webserver
    #Build image
    build:
      context: .
    image: example5:1.0
    #Folder/Volume mount -v
    volumes:
      - www:/var/www
    ports:
      - 8000:5000
volumes:
  www:
}}
Löschen des bestehenden Images:
{{BML|code=docker image example5:1.0}}
Das starten des Services erstellt automatisch das Image bzw. die Images:
{{BML|code=docker compose up -d}}
Das oder die Images können auch explizit gebaut werden:
{{BML|code=docker compose build}}


=== Beispiel 5) Networking ===
=== Beispiel 5) Networking ===
Beispiel siehe [[Docker_2024_04/Networking#Beispiel_4):_Komplexeres_Beispiel|hier]]
Inhalt '''Dockerfile'''
Inhalt '''Dockerfile'''


Siehe [[Docker_2024_04/Networking#Dockerfile|hier]]
Siehe [[Docker_2024_04/Networking#Dockerfile|hier]]
 
Folgend werden '''Bridge''' Netzwerke verwendet. Es können verschiedene Treiber angegeben werden, siehe [https://docs.docker.com/compose/networking/ hier]<ref>https://docs.docker.com/compose/networking/</ref>
Das '''Host Network''' kann über den Parameter {{BSL|network_mode: host}} verwendet werden.
Inhalt '''docker-compose.yml'''
Inhalt '''docker-compose.yml'''
{{BML|code=
{{BML|code=
Zeile 111: Zeile 150:
       context: .
       context: .
     image: networking_example2:1.0
     image: networking_example2:1.0
    #Use networks
     networks:
     networks:
       - tier1
       - tier1
       - tier2
       - tier2
    #Depends on database
     depends_on:
     depends_on:
       - database
       - db


   database:
   db:
     container_name: database
     container_name: database
     hostname: database
     hostname: db
    image: networking_example2:1.0
    networks:
      - tier2
 
  app:
    container_name: app
    hostname: app
    build:
      context: .
     image: networking_example2:1.0
     image: networking_example2:1.0
     networks:
     networks:
      - tier1
       - tier2
       - tier2
    depends_on:
      - database


   reverseproxy:
   reverseproxy:
Zeile 142: Zeile 171:
     networks:
     networks:
       - tier1
       - tier1
    depends_on:
      - app


networks:
networks:
Zeile 148: Zeile 179:
}}
}}


Löschen des bestehenden Images:
Services starten:
{{BML|code=docker image example5:1.0}}
Das starten des Services erstellt automatisch das Image bzw. die Images:
{{BML|code=docker compose up -d}}
{{BML|code=docker compose up -d}}
Das oder die Images können auch explizit gebaut werden:
{{BML|code=docker compose build}}


=== Beispiel 4) Node Webserver (building Image) ===
Die Netzwerk funktionalität kann wie [[Docker_2024_04/Networking#Beispiel_4):_Komplexeres_Beispiel|hier]] bereits erläutert wurde, getestet werden.
Inhalt '''Dockerfile'''


Siehe [[Docker_2024_04/Containers#Dockerfile|hier]]
=== Beispiel 6) Restarting ===
Wird die im Service gestartete Anwendung beendet, so kann definiert werden ob der Service neu gestartet werden soll. Weiter Informationen finden sich [https://www.baeldung.com/ops/docker-compose-restart-policies hier]<ref>https://www.baeldung.com/ops/docker-compose-restart-policies</ref>
Folgendes Kommando bietet sich für ein eigenes Terminal an {{BSL|watch -n 0.1 -c "docker ps -a"}} um den Container Status zu überwachen.


Inhalt '''docker-compose.yml'''
Inhalt '''docker-compose.yml'''
{{BML|code=
{{BML|code=
services:
services:
   #Service name
   ubuntu:
  node_webserver:
     container_name: ubuntu
    #Container name, --name
     image: ubuntu:22.04
     container_name: node_webserver
     command: ["bash"]
     #Build image
    stdin_open: true
     build:
     tty: true
      context: .
}}
     image: example5:1.0
 
    #Folder/Volume mount -v
Service '''detached''' starten:
    volumes:
{{BML|code=
      - www:/var/www
docker compose up -d
    ports:
}}
      - 8000:5000
Mit Service verbinden und schließen
{{BML|code=
docker attach ubuntu
exit
}}
Der Service wurde beendet und ist im '''Exited State'''.
 
Inhalt '''docker-compose.yml'''


volumes:
{{BML|code=
   www:
services:
   ubuntu:
    #Container always restarts after application terminates
    restart: always
    container_name: ubuntu
    image: ubuntu:22.04
    command: ["bash"]
    stdin_open: true
    tty: true
}}
}}


Löschen des bestehenden Images:
Service '''detached''' starten:
{{BML|code=docker image example5:1.0}}
{{BML|code=
Das starten des Services erstellt automatisch das Image bzw. die Images:
docker compose up -d
{{BML|code=docker compose up -d}}
}}
Das oder die Images können auch explizit gebaut werden:
Mit Service verbinden und schließen
{{BML|code=docker compose build}}
{{BML|code=
docker attach ubuntu
exit
}}
Der Service wurde beendet und ist im '''Exited State''', wird jedoch neu gestartet.

Aktuelle Version vom 19. April 2024, 05:46 Uhr

Docker Compose bietet eine komfortable Möglichkeit Images zu bauen und Container bzw. Container im Serviceverbund zu starten. Die Erstellung von Volumes und Networks wird stark erleichtert. Zudem muss der oft Komplexe docker run Befehl nicht abgelegt werden.

Im folgenden werden einige der zuvor erstellten Beispiele mit Docker Compose nachgebaut.

Der Standard Name für Docker Compose Dateien ist docker-compose.yml.

Mit dem Parameter -f kann jedoch direkt eine Docker Compose Datei angegeben werden.

Z.b.: docker-compose -f service1.yml

Beispiel 1) Erster Container

Beispiel siehe hier

Inhalt docker-compose.yml

services:
  #Service name
  ubuntu:
    #Container name, --name
    container_name: ubuntu
    #Used image
    image: ubuntu:22.04
    #Command to run
    command: ["bash"]
    #Parameter -it
    stdin_open: true 
    tty: true

Service detached starten:

docker compose up -d

Mit Service verbinden und schließen

docker attach ubuntu
exit

Der Container ist nun im Exited State docker ps -a. Der Container wird mit folgendem Kommando korrekt gelöscht, bzw. auch gestoppt sofern dieser gestartet ist. Es werden so ebenfalls alle erstellten Netzwerke gelöscht. Wird Docker Compose verwendet so wird nicht Standardmäßig das bridge Netzwerk bridge verwendet.

docker compose down

Beispiel 2) Node Webserver (bestehendes Image, Folder Mount)

Siehe hier

Inhalt docker-compose.yml

services:
  #Service name
  node_webserver:
    #Container name, --name
    container_name: example5
    #Used image
    image: example5:1.0
    #Folder/Volume mount -v
    volumes:
      - ./http:/var/www
    ports:
      - 8000:5000

Service starten

docker compose up -d

Logs einsehen

docker compose logs [service name optional]

Ressourcen einsehen

docker compose stats [service name optional]

Informationen einsehen

docker compose ps [service name optional]

Webserver testen http://localhost:8000

Service beenden

docker compose down

Beispiel 3) Node Webserver (existing Image, Volume Mount)

Beispiel siehe hier

Inhalt docker-compose.yml

services:
  #Service name
  node_webserver:
    #Container name, --name
    container_name: example5
    #Used image
    image: example5:1.0
    #Folder/Volume mount -v
    volumes:
      - www:/var/www
    ports:
      - 8000:5000

volumes:
  www:

Das Volume wird automatisch erstellt und bleibt auch nach docker compose down erhalten.

Beispiel 4) Node Webserver (building Image)

Inhalt Dockerfile

Siehe hier

Inhalt docker-compose.yml

services:
  #Service name
  node_webserver:
    #Container name, --name
    container_name: node_webserver
    #Build image
    build:
      context: .
    image: example5:1.0
    #Folder/Volume mount -v
    volumes:
      - www:/var/www
    ports:
      - 8000:5000

volumes:
  www:

Löschen des bestehenden Images:

docker image example5:1.0

Das starten des Services erstellt automatisch das Image bzw. die Images:

docker compose up -d

Das oder die Images können auch explizit gebaut werden:

docker compose build

Beispiel 5) Networking

Beispiel siehe hier

Inhalt Dockerfile

Siehe hier

Folgend werden Bridge Netzwerke verwendet. Es können verschiedene Treiber angegeben werden, siehe hier[1]

Das Host Network kann über den Parameter network_mode: host verwendet werden.

Inhalt docker-compose.yml

services:
  app:
    container_name: app
    hostname: app
    build:
      context: .
    image: networking_example2:1.0
    #Use networks
    networks:
      - tier1
      - tier2
    #Depends on database
    depends_on:
      - db

  db:
    container_name: database
    hostname: db
    image: networking_example2:1.0
    networks:
      - tier2

  reverseproxy:
    container_name: reverseproxy
    hostname: reverseproxy
    image: networking_example2:1.0
    networks:
      - tier1
    depends_on:
      - app

networks:
  tier1:
  tier2:

Services starten:

docker compose up -d
Die Netzwerk funktionalität kann wie hier bereits erläutert wurde, getestet werden.

Beispiel 6) Restarting

Wird die im Service gestartete Anwendung beendet, so kann definiert werden ob der Service neu gestartet werden soll. Weiter Informationen finden sich hier[2]

Folgendes Kommando bietet sich für ein eigenes Terminal an watch -n 0.1 -c "docker ps -a" um den Container Status zu überwachen.

Inhalt docker-compose.yml

services:
  ubuntu:
    container_name: ubuntu
    image: ubuntu:22.04
    command: ["bash"]
    stdin_open: true 
    tty: true

Service detached starten:

docker compose up -d

Mit Service verbinden und schließen

docker attach ubuntu
exit

Der Service wurde beendet und ist im Exited State.

Inhalt docker-compose.yml

services:
  ubuntu:
    #Container always restarts after application terminates
    restart: always
    container_name: ubuntu
    image: ubuntu:22.04
    command: ["bash"]
    stdin_open: true 
    tty: true

Service detached starten:

docker compose up -d

Mit Service verbinden und schließen

docker attach ubuntu
exit

Der Service wurde beendet und ist im Exited State, wird jedoch neu gestartet.