= docker-compose
Thomas W. Stütz
1.0.0, 2021-03-24: How to use docker-compose in project work @ HTL Leonding college
ifndef::imagesdir[:imagesdir: images]
//:toc-placement!:  // prevents the generation of the doc at this position, so it can be printed afterwards
:sourcedir: ../src/main/java
:icons: font
:sectnums:    // Nummerierung der Überschriften / section numbering
:toc: left
:toclevels: 5
:experimental: true
:linkattrs:   // so window="_blank" will be executed

//Need this blank line after ifdef, don't know why...
ifdef::backend-html5[]

// https://fontawesome.com/v4.7.0/icons/
icon:file-text-o[link=https://raw.githubusercontent.com/htl-leonding-college/docker-lecture-notes/main/asciidocs/{docname}.adoc] ‏ ‏ ‎
icon:github-square[link=https://github.com/htl-leonding-college/docker-lecture-notes] ‏ ‏ ‎
icon:home[link=https://htl-leonding-college.github.io/docker-lecture-notes/docker.html]
endif::backend-html5[]

// print the toc here (not at the default position)
//toc::[]


[[bookmark-document-start]]
== Was bisher geschah ...

* Docker Lösungen bestehen aus Images und Containern

* Docker Container beinhalten einzelne Dienste
** Früher wurden mehrere Dienste pro OS installiert
** Dies ist nicht mehr der Fall -> Ein Dienst pro Container

* Jeder Docker Container erhält vom Docker daemon eine IP in einem eigenen "Docker-Netzwerk".
** Diese Netzwerk mus vorab mit `docker network create xxx` erstellt werden
** In dieses Netzwerk können mehrere Container eingebunden werden mit `--network=xxx`.
** Dadurch ist der Zugriff aufeinander ohne geöffnete Ports nach außen möglich
** Dies wird selten verwendet
** Will man mehrere Container für eine Softwarelösung verwenden ist neben zb k8s auch docker-compose eine Lösung

== Überblick

* docker-compose dient zum Orchestrieren von (mehreren) Containern (multi-container applications).

* Diese Container laufen in (mind.) einem gemeinsamen (virtuellem) Docker-Netzwerk mit eigenen IP-Adressen
** Der Zugriff aufeinander - also zwischen den Containern - ist leicht möglich (dh ohne Ports zu öffnen)

image:docker-compose.png[]

== Konfiguration von docker-compose

* Der Bauplan für docker-compose-Softwarelösungen sind sogenannte yaml-Files -> docker-compose.yml

[source,yml]
----
version: '3.8'

services:
  mc:
    image: itzg/minecraft-server
    ports:
      - 25565:25565
    environment:
      EULA: "TRUE"
    volumes:
      - ./minecraft-data:/data
----

.Aufruf mit
----
docker-compose up -d
----

* -d ... daemon -> läuft im Hintergrund

.Das Datenverzeichnis wird automatisch erstellt
----
.
└── minecraft-data
    ├── logs
    └── world
        ├── DIM-1
        │   └── data
        ├── DIM1
        │   └── data
        ├── data
        ├── datapacks
        ├── playerdata
        └── region
----

https://github.com/itzg/docker-minecraft-server

== Beispiel: Erstellen eines Quarkus-Backends mit postgres-DB







