A B C D E F G H I J K L M N O P Q R S T U V W X Z

docker-compose

English version below

Docker Compose kann immer dann verwendet werden, wenn mehrere Docker-Container gleichzeitig gestartet und beendeet werden sollen und untereinander kommunizieren müssen. Ein klassischer Anwendungsfall ist eine Web-App mit Datenbankanbindung. Hier bräuchte man einen Container mit der App und einen Container mit der Datenbank. Außerdem muss die Datenbank einen Port anbieten, über den die App und die Datenbank kommunizieren können.

Docker Compose ist nicht automatisch in Docker integriert und muss zusätzlich installiert werden. Eine Anleitung dafür gibt es hier.

Docker-Compose file

Um Docker-Compose zu verwenden, muss man ein Docker-Compose-File anlegen. Dieses heißt in Regelfall „docker-compose.yml“ und ist im YAML-Format verfasst. Die Informationen aus dem docker-compose-file ersetzen oder ergänzen Informationen aus einem Dockerfile.

Grundlegende Struktur

Prinzipiell folgt das docker-compose-file folgender Struktur:

version: number-of-docker-version
services:
  service-1:
    property-1:
    property-2:
      - list-if-needed
  service-2:
    property-1:
    property-2:

Die Datei enthält im Prinzip eine Auflistung aller gewünschten Dockercontainer und der Einstellungen, die für diese vorgenommen werden sollen.

Im folgenden werden einige mögliche Einstellungen näher erklärt.

container_name

Mit container_name wird angegeben, wie der zu erstellende Container Docker-intern heißen soll. Wird diese Eigenschaft nicht angegeben, wird ein automatischer Name vergeben.

version: 3
services:
  my-container:
    container_name: my-container

image

Durch image kann der Name eines DockerHub-images angegeben werden. Dieses wird dann als Basis für den Container genutzt.

Dockerfile-Äquivalent: FROM

version: 3
  services:
    my-neo4j-service:
      image: neo4j

build

Mit build kann ein eigenes Dockerfile angegeben werden, das für das Erstellen des Containers verwendet werden soll. Dieses Argument hat zwei Unterpunkte: Mit context wird der Pfad zu dem Ordner angegeben, in dem das Dockerfile liegt, mit dockerfile dessen Name.

version: 3
  services:
    my-container:
      build:
        context: .
        dockerfile: Dockerfile

volumes

volumes gibt Festplatten an, die im Dockercontainer erstellt werden sollen. Wie auch im Dockerfile gibt es hier die Möglichkeit, die Festplatten mit Ordnern auf dem Host-System zu synchronisieren.

Dockerfile Äquivalent: VOLUME

version: 3
  services:
    my-container:
      container_name: my-container
      volumes:
        - '.:/app'
        - '/app/node_modules'

ports

Wenn Ports spezifiziert werden sollen, die an das Host-System weitergeleitet werden, geht das über ports. Hier werden die Ports wie im Dockerfile angegeben.

Dockerfile Äquivalent: PORTS

version: 3
  services:
    my-container:
      ports:
        - "3000:3000"
    my-neo4j-container:
      image: neo4j
      ports:
        - "1234:4000"

 

English version

Docker Compose can be used whenever multiple Docker containers need to be started and stopped simultaneously and need to communicate with each other. A classic use case is a web app with database connection. Here, you would need a container with the app and a container with the database. Also, the database needs to provide a port through which the app and the database can communicate.

Docker Compose is not automatically integrated with Docker and needs to be installed additionally. Instructions are available here.

Docker Compose file

To use Docker-Compose, you have to create a Docker-Compose file. This is usually called „docker-compose.yml“ and is written in YAML format. The information from the docker-compose file replaces or supplements information from a Dockerfile.

Basic structure

In principle, the docker-compose-file follows the following structure:

version: number-of-docker-version
  services:
    service-1:
      property-1:
      property-2:
        - list-if-needed
    service-2:
       property-1:
       property-2:

Essentially, the file contains a listing of all the Docker containers you want to use and the settings to be made for them.

Some possible settings are explained in more detail below.

container_name

The container_name is used to specify what the container that will be created should be called internally in Docker. If this property is not specified, an automatic name is assigned.

version: 3 
  services: 
    my-container: 
      container_name: my-container

image

With image the name of a DockerHub image can be specified. This will then be used as the base for the container.

Dockerfile equivalent: FROM

version: 3
  services:
    my-neo4j-service:
      image: neo4j

build

Use build to specify a custom Dockerfile to use for building the container. This argument has two subparameters: Use context to specify the path to the folder where the Dockerfile is located, and use dockerfile to specify its name.

version: 3
  services:
    my-container:
      build:
        context: .
        dockerfile: Dockerfile

volumes

volumes specifies volumes to be created in the Docker container. As in Dockerfile, there is an option here to synchronize the disks with folders on the host system.

Dockerfile equivalent: VOLUME

version: 3
  services:
    my-container:
      container_name: my-container
      volumes:
        - '.:/app'
        - '/app/node_modules'

ports

If ports that will be forwarded to the host system are to be specified, this is done via ports. The ports are specified in the same way as in the Dockerfile.

Dockerfile equivalent: PORTS

version: 3
  services:
  my-container:
    ports:
      - "3000:3000"
    my-neo4j-container:
      image: neo4j
      ports:
        - "1234:4000"

Ähnliche Einträge