Main /

Docker Compose Fuer Beginner

Docker Compose Fuer Beginner

WIP-Docker-Compose

docker-compose

Mit docker-compose wird die Konfiguration von Dockerfiles in die Datei `docker-compose.yml` ausgelagert.

Mit docker-compose beschränkt sich das Bauen/Starten/Stoppen eines Containers einen Befehl mit einem Parameter.

 # docker-compose build

baut den eigenen Container, wenn man das überhaupt möchte

 # docker-compose up

Startet den Container

 # docker-compose stop

Stoppt den Container

docker-compose.yml

Beispiel für eine docker-compose.yml Datei:

 version: '3.1'
 services:
   hello:
     image: my-hello:0.0.1
     container_name: my-world
  1. restart: always
     build: .
  1. ports:
  2. - 8080:80
     volumes:
       - ./mein-verzeichnis:/data
     environment:
       IRGEND_EINE_VARIABLE: scheibenkaese

Dockerfile

Neben dieser docker-compose.yml muss ein Dockerfile liegen, in dem der eigene Container beschrieben wird.

 FROM bash:4.4.23
 ADD hello.sh /
 RUN chmod +x /hello.sh
 CMD ["/hello.sh"]

hello.sh

Da wir eine hello.sh ausführen, wollen wir diese hier auch angeben.

 #!/usr/bin/env bash
 echo 'Hallo Welt'
 echo "Diese Variable ist aus dem docker-compose: $IRGEND_EINE_VARIABLE"
 if ; then
    echo
    echo "Ich sehe das Verzeichnis /data mit der Datei hello-world"
    echo
 fi

Eigentlich fehlt nur noch das Verzeichnis, das lokal hier existieren muss und die Datei da drin.

 # mkdir mein-verzeichnis
 # touch mein-verzeichnis/hello-world

bauen

Jetzt können wir das Dockerfile bauen mit Hilfe von docker-compose. Dabei wird das Script hello.sh in unser Docker-Image kopiert und ausführbar gemacht.

 # docker-compose build

 Building hello
 Step 1/4 : FROM bash:4.4.23
  ---> b06292092bf4
 Step 2/4 : ADD hello.sh /
  ---> Using cache
  ---> ef0e59d41832
 Step 3/4 : RUN chmod +x /hello.sh
  ---> Using cache
  ---> c5ca3cec3a43
 Step 4/4 : CMD ["/hello.sh"]
  ---> Using cache
  ---> 1ece9d679110
 Successfully built 1ece9d679110
 Successfully tagged my-hello:0.0.1

starten

Zum Ausführen dieses Docker-Images einfach docker-compose up starten

 # docker-compose up

 Creating network "dockertest_default" with the default driver
 Creating my-world ... done
 Attaching to my-world
 my-world | Hallo Welt
 my-world | Diese Variable ist aus dem docker-compose: scheibenkaese
 my-world | 
 my-world | Ich sehe das Verzeichnis /data mit der Datei hello-world
 my-world | 
 my-world exited with code 0

Stoppen brauchen wir das hier nicht mehr, da es sich selbst schon beendet hat.

Jetzt noch ein paar nützliche Dinge:

docker ps

Wo sieht man jetzt, welche Container laufen, dazu gibt es docker ps, das zeigt alle aktuell laufenden Container an.

  1. docker ps
 CONTAINER ID    IMAGE    COMMAND    CREATED   STATUS    PORTS    NAMES

Die Liste ist aber leer, weil unser Container sofort wieder beendet wurde.

docker images

 Es gibt aber eine weitere Liste, die der installierten Images. 

Ein Docker-Image ist wie eine Java-Klasse, ein Container ist eine mit 'new Klasse()' erstellte Instanz eines Images. Man kann mehrere Container eines Images erstellen und starten, der Port muss sich unterscheiden, mit dem ich die Container dann anspreche.

  1. docker images
 REPOSITORY      TAG         IMAGE ID         CREATED           SIZE
 my-hello        0.0.1       1ece9d679110     18 minutes ago    14.7MB
 bash            4.4.23      b06292092bf4     3 weeks ago       14.7MB

Hier sieht man, welche Docker-Images alle installiert sind, auch dessen Alter und Größe.

docker images starten

Zwei weitere Wege um unser Image jetzt zu starten:

 # docker run -it my-hello:0.0.1 bash

oder

 # docker run -it 1ece9d679110 bash

bequemer ist aber der Weg über docker-compose

 # docker-compose up

Portainer

Da es etwas altertümlich ist, mit docker ps oder docker images zu arbeiten, gibt es portainer. Das ist ein Docker Container, den man einmal bei sich installiert/startet und dann kann man über den angegeben Port seine Container verwalten.

 # docker volume create portainer-data
 # docker run -d -p 8080:9000 --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer-data:/data portainer/portainer

Jetzt geht im lokalen Browser: http://127.0.0.1:8080 vergibt sich einen Username/Password und schon kann man seine Container sehen.

Das geht auch über das Netz dann muss man im Router den Port nach außen freigeben und wenn man dann vergessen hat, das heutzutage https StateOfTheArt? ist, gibt es ständig Post von der Telekom, das man einen offenen http basierten Port hat.

Aber das ist ein anderes Thema.

Frische Änderungen | Menü editieren
zuletzt geändert am 14.02.2020 10:47 Uhr von Lars
Edit Page | Page History