Sowohl an der Arbeit wie auch Privat gibt es immer wieder die unterschiedlichsten Gründe, ein Docker Image nicht in den DockerHub zu laden. Will man trotzdem zum Beispiel mit seiner Arbeitsgruppe seine Docker Images auf einfache weise teilen, kann sich die Installation eines eigenen Docker Repositories lohnen. Genau Dafür kann man Docker Registry verwenden. Eleganter weise kann man auch Docker Registry in einem Container laufen lassen.
WeiterlesenDocker – Verwendung von Volume
Wenn man sich mit Container beschäftigt kommt irgendwann der Punkt, wo man Daten außerhalb des Containers ablegen möchte um zum Beispiel diese in einen anderen Container einbinden zu können. Um dies zu bei Docker zu realisieren, kann ein sogenanntes Volume erstellen. Wie man dies genau macht, schauen wir uns nun hier im Artikel an.
WeiterlesenDocker – Richtige Handhabung von bind mounts
Die guten alten bind mounts. Es gibt sie genau so lange wie es Docker selbst bereits gibt. Aus diesem Grund werden die meisten von euch, die sich schon etwas länger mit Docker beschäftigen auch bereits einiges über bind mounts wissen. Trotzdem möchte ich hier noch mal vorstellen was bind mounts genau sind und was man mit diesen machen kann.
Docker Container – anzeigen, starten, stoppen und löschen
In den vergangenen Artikel haben wir uns nun bereits einige Docker Themen angeschaut. Das ging über die Installation von Docker über Python Apps deployen bis zum Aufbau kleiner Microservices. Heute schauen wir uns mal alles rund um das Thema Docker Container an. Wie kann ich sie anzeigen, starten, stoppen oder auch von meine Host entfernen.
WeiterlesenDocker Compose – Automatisiertes starten von Microservices
Im Artikel Docker Microservices – Key-Value Store mit Python und Redis haben wir uns angeschaut, wie man mit Docker eine Microservices Setup realisieren kann. Da so ein Setup auch mehr wie zwei Docker Container enthalten kann, wollen wir uns in diesem Artikel damit beschäftigen, wie man eine Microservices Struktur mit hilfe von Docker Compose aufbauen kann.
Inhaltsverzeichnis
Was ist Docker Compose?
Unter Docker Compose versteht man die Funktion, mittels eines Datei (docker-compose.yml) einen Container mit Einstellungen und Abhängigkeiten zu versehen. Dabei kann zum Beispiel das Netzwerk konfiguriert werden, Mount Points für Netzlaufwerke gesetzt werden oder auch Links zu anderen Container hergestellt werden. Um den letzteren Punkt geht es uns hier in dem Artikel heute.
Wir wollen eine docker-compose.yml Datei für den Docker Container mit der Abfrage des Key-Value Stores anlegen. Beim Starten dieses Docker Containers soll automatisch Redis als Abhängigkeit gestartet werden. Wie das ganze im Detail aussieht schauen wir uns im nächsten Abschnitt etwas genauer an.
Anlegen eines docker-compose.yml für den Key-Value Store
Die docker-compose.yml legen wir im selben Ordner an, in dem auch das Dockerfile liegt. Die Datei wird anschließend mit dem folgenden Inhalt gefüllt:
1 2 3 4 5 6 7 8 | version: '3' services: dockerapp: build: . depends_on: - redis redis: image: redis:3.2.0 |
In der ersten Zeile hinterlegen wir hier die Version von Docker Compose. Diese könnt ihr mit dem folgenden Befehl ermitteln:
1 2 3 4 5 6 | docker-compose version docker-compose version 1.21.1, build 5a3f1a3 docker-py version: 3.3.0 CPython version: 3.6.4 OpenSSL version: OpenSSL 1.0.2o 27 Mar 2018 |
In der zweiten Zeile fangen wir dann mit der Definition des Microservices Setups an, in dem wir die einzelnen Services benennen.
Dabei beginnen wir mit dem Container, in dem das Python Script liegt. Dieser soll beim Ausführen der docker-compose.yml gebaut und gestartet werden.
In Zeile 5/6 legen wir dann die Abhängigkeit zum redis Container fest. Wichtig hierbei ist, dass wir auf einen Container verweisen, der nun weiter unten im docker-compose.yml noch definiert wird.
In Zeile 7/8 definieren wir dann den redis Container. Damit ist das anlegen der docker-compose Datei auch schon abgeschlossen.
Ausführen der Docker Compose Datei
Wir führen nun zum Starten des Setups die docker-compose.yml Datei aus. Dafür müssen wir uns in dem Ordner befinden, in dem diese Datei angelegt wurde. Hier wird die Datei dann mit docker-compose up ausgeführt. Das ganze sieht wie folgt aus:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | docker-compose up Creating network "microservices_default" with the default driver Building dockerapp Step 1/7 : FROM python:3.6 ---> 29d2f3226daf Step 2/7 : RUN pip install redis ---> Using cache ---> 39cee31a4554 Step 3/7 : RUN useradd -ms /bin/bash modius ---> Using cache ---> 5560897ee61c Step 4/7 : USER modius ---> Using cache ---> 56551ab66703 Step 5/7 : WORKDIR /app ---> Using cache ---> b7195ccc0dae Step 6/7 : COPY app /app ---> bfd8b5b94cb6 Step 7/7 : CMD ["python","-u", "app.py"] ---> Running in cb1440e3f207 Removing intermediate container cb1440e3f207 ---> 643347123f85 Successfully built 643347123f85 Successfully tagged microservices_dockerapp:latest WARNING: Image for service dockerapp was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`. Creating microservices_redis_1 ... done Creating microservices_dockerapp_1 ... done Attaching to microservices_redis_1, microservices_dockerapp_1 redis_1 | _._ redis_1 | _.-``__ ''-._ redis_1 | _.-`` `. `_. ''-._ Redis 3.2.0 (00000000/0) 64 bit redis_1 | .-`` .-```. ```\/ _.,_ ''-._ redis_1 | ( ' , .-` | `, ) Running in standalone mode redis_1 | |`-._`-...-` __...-.``-._|'` _.-'| Port: 6379 redis_1 | | `-._ `._ / _.-' | PID: 1 redis_1 | `-._ `-._ `-./ _.-' _.-' redis_1 | |`-._`-._ `-.__.-' _.-'_.-'| redis_1 | | `-._`-._ _.-'_.-' | http://redis.io redis_1 | `-._ `-._`-.__.-'_.-' _.-' redis_1 | |`-._`-._ `-.__.-' _.-'_.-'| redis_1 | | `-._`-._ _.-'_.-' | redis_1 | `-._ `-._`-.__.-'_.-' _.-' redis_1 | `-._ `-.__.-' _.-' redis_1 | `-._ _.-' redis_1 | `-.__.-' redis_1 | redis_1 | 1:M 26 Jun 13:19:38.404 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. redis_1 | 1:M 26 Jun 13:19:38.405 # Server started, Redis version 3.2.0 redis_1 | 1:M 26 Jun 13:19:38.405 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled. redis_1 | 1:M 26 Jun 13:19:38.405 * The server is now ready to accept connections on port 6379 dockerapp_1 | b'bar' microservices_dockerapp_1 exited with code 0 |
Das ausführen kann mit ctrl + c abgebrochen werden.
Nach diesem Prinzip kann man nun Microservice Setups beliebiger größe Aufbauen.