Modius - Techblog

  • Ansible
  • Docker
  • DevOps
  • Gastautor werden
  • Newsletter abonnieren
  • Über Mich
  • Kontakt

Docker Compose – Automatisiertes starten von Microservices

Veröffentlicht am 29. Juni 2018 von Christian Piazzi 3 Kommentare , Aktualisiert am 27. Oktober 2020
Geschätzte Lesezeit: 2 Minuten

Docker bind mounts - Gestapelte Container

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.

Kategorie: DevOps, Docker Tags: Compose, Docker, docker-compose.yml, Microservice, python, Redis

Kategorien

  • Linux
  • Internet, Bloggen & Co
  • Programmierung
  • Sicherheit
  • Netzwerk & Co
  • Mikrokontroller
  • Windows

Neueste Kommentare

  • Prometheus Installation unter Ubuntu - Modius - Techblog bei Prometheus Installation unter CentOS
  • Rainer bei Docker Container – anzeigen, starten, stoppen und löschen
  • Rainer Wohlfarth bei Docker Container – anzeigen, starten, stoppen und löschen
  • Rainer Wohlfarth bei Docker Container – anzeigen, starten, stoppen und löschen
  • Rainer Wohlfarth bei Docker Container – anzeigen, starten, stoppen und löschen

Werbung

Archive

Kontakt, Datenschutz und Impressum

  • Kontakt
  • Datenschutz
  • Impressum

Schlagwörter

Anleitung Ansible Apache Apple App Store Automatisierung Blogparade C++ Centos centos 7 CentOS7 Container Datenbank DevOps Docker Dr. Racket Dr. Scheme funktional Gastartikel Google HowTo httpd Icinga2 Icinga 2 Installation itsm Linux Minecraft Monitoring mooc MySQL owncloud PHP Plugin Programmierung python Raspberry Pi Schritt für Schritt Server Sicherheit Tutorial Ubuntu Update Windows Wordpress

Copyright © 2025 · Outreach Pro on Genesis Framework · WordPress · Anmelden