Docker Compose Starter Guide

Der Autor des Artikels, dessen Übersetzung wir heute veröffentlichen, sagt, dass er für Entwickler gedacht ist, die Docker Compose lernen möchten und ihre erste Client-Server-Anwendung mit Docker erstellen werden. Der Leser soll mit den Grundlagen von Docker vertraut sein. Wenn dies nicht der Fall ist, können Sie sich diese Reihe von Materialien, diese Veröffentlichung, in der die Grundlagen von Docker zusammen mit den Grundlagen von Kubernetes erläutert werden, und diesen Artikel für Anfänger ansehen.

Bild

Was ist Docker Compose?


Docker Compose ist ein in Docker enthaltenes Tool. Es wurde entwickelt, um die Probleme zu lösen, die mit der Bereitstellung von Projekten verbunden sind.

Beim Studium der Grundlagen von Docker sind Sie möglicherweise auf die Erstellung einfacher Anwendungen gestoßen, die unabhängig von beispielsweise externen Datenquellen oder bestimmten Diensten autonom arbeiten. In der Praxis sind solche Anwendungen selten. Reale Projekte umfassen normalerweise eine ganze Reihe von kollaborativen Anwendungen.

Woher wissen Sie, ob Sie Docker Compose beim Bereitstellen eines Projekts verwenden müssen? In der Tat - sehr einfach. Wenn mehrere Dienste verwendet werden, um das Funktionieren dieses Projekts sicherzustellen, kann Docker Compose hilfreich sein. Zum Beispiel in einer Situation, in der sie eine Website erstellen, die zur Authentifizierung von Benutzern eine Verbindung zur Datenbank herstellen muss. Ein ähnliches Projekt kann aus zwei Diensten bestehen - einem, der die Site bereitstellt, und einem, der für die Pflege der Datenbank verantwortlich ist.

Wenn die Docker Compose-Technologie vereinfacht beschrieben wird, können mit einem einzigen Befehl viele Dienste gestartet werden.

Unterschied zwischen Docker und Docker Compose


Docker wird verwendet, um die einzelnen Container (Dienste) zu verwalten, aus denen die Anwendung besteht.

Docker Compose wird verwendet, um mehrere Container, aus denen die Anwendung besteht, gleichzeitig zu verwalten. Dieses Tool bietet dieselben Funktionen wie Docker, ermöglicht Ihnen jedoch die Arbeit mit komplexeren Anwendungen.


Docker (einzelner Container) und Docker Compose (mehrere Container)

Typischer Anwendungsfall für Docker Compose


Docker Compose ist in den richtigen Händen ein sehr leistungsfähiges Tool, mit dem Sie Anwendungen mit einer komplexen Architektur schnell bereitstellen können. Jetzt sehen wir uns ein Beispiel für die praktische Verwendung von Docker Compose an, dessen Analyse es Ihnen ermöglicht, die Vorteile zu bewerten, die Sie mit Docker Compose erzielen.

Stellen Sie sich vor, Sie sind Entwickler eines Webprojekts. Dieses Projekt umfasst zwei Websites. Mit dem ersten können Geschäftsleute mit nur wenigen Klicks Online-Shops erstellen. Die zweite zielt auf die Kundenbetreuung ab. Diese beiden Sites interagieren mit derselben Datenbank.

Ihr Projekt wird immer beliebter und es stellt sich heraus, dass die Leistung des Servers, auf dem es arbeitet, nicht mehr ausreicht. Infolgedessen beschließen Sie, das gesamte Projekt auf einen anderen Computer zu übertragen.

Leider haben Sie so etwas wie Docker Compose nicht verwendet. Daher müssen Sie die Dienste einzeln übertragen und neu konfigurieren, in der Hoffnung, dass Sie bei dieser Arbeit nichts vergessen.

Wenn Sie Docker Compose verwenden, können Sie Ihr Projekt auf einen neuen Server übertragen, indem Sie mehrere Befehle ausführen. Um die Übertragung des Projekts an einen neuen Ort abzuschließen, müssen Sie nur einige Einstellungen vornehmen und eine Sicherungskopie der Datenbank auf den neuen Server hochladen.

Entwickeln einer Client-Server-Anwendung mit Docker Compose


Jetzt, da Sie wissen, wofür wir Docker Compose verwenden werden, ist es Zeit, Ihre erste Client-Server-Anwendung mit diesem Tool zu erstellen. Wir sprechen nämlich über die Entwicklung einer kleinen Website (Server) in Python, die eine Datei mit einem Textfragment erzeugen kann. Diese Datei wird vom Server von einem Programm (Client) angefordert, das ebenfalls in Python geschrieben ist. Nach dem Empfang der Datei vom Server zeigt das Programm den darin gespeicherten Text auf dem Bildschirm an.

Bitte beachten Sie, dass wir erwarten, dass Sie die Grundlagen von Docker besitzen und dass Sie die Docker-Plattform bereits installiert haben.

Lassen Sie uns an dem Projekt arbeiten.

▍1. Projekterstellung


Um Ihre erste Client-Server-Anwendung zu erstellen, empfehle ich, zunächst einen Projektordner zu erstellen. Es sollte die folgenden Dateien und Ordner enthalten:

  • docker-compose.yml . Dies ist eine Docker Compose-Datei, die die Anweisungen zum Starten und Konfigurieren von Diensten enthält.
  • Serverordner. Es enthält die Dateien, die für den Betrieb des Servers erforderlich sind.
  • Ordner- client . Hier werden die Dateien der Client-Anwendung angezeigt.

Daher sollte der Inhalt des Hauptordners Ihres Projekts folgendermaßen aussehen:

 . ├── client/ ├── docker-compose.yml └── server/ 2 directories, 1 file 

▍2. Servererstellung


Hier werden wir beim Erstellen des Servers einige grundlegende Dinge in Bezug auf Docker ansprechen.

2a. Dateierstellung


Gehen Sie zum Serverordner und erstellen Sie die folgenden Dateien darin:

  • server.py Datei. Es wird den Servercode enthalten.
  • index.html Datei. Diese Datei enthält einen Text, den die Clientanwendung anzeigen soll.
  • Dockerfile Datei. Dies ist eine Docker-Datei, die die Anweisungen zum Erstellen einer Serverumgebung enthält.

So sollte der Inhalt Ihres server/ Ordners aussehen:

 . ├── Dockerfile ├── index.html └── server.py 0 directories, 3 files 

2b. Bearbeiten einer Python-Datei.


Fügen Sie der Datei server.py den folgenden Code server.py :

 #!/usr/bin/env python3 #    python. #       -. #     - ,      Python. import http.server import socketserver #         . handler = http.server.SimpleHTTPRequestHandler #   ,        1234. #    ,        ,    docker-compose. with socketserver.TCPServer(("", 1234), handler) as httpd:   #       ,    .  httpd.serve_forever() 

Mit diesem Code können Sie einen einfachen Webserver erstellen. Es gibt Clients die Datei index.html , deren Inhalt später auf der Webseite angezeigt wird.

2c. Bearbeitung von HTML-Dateien


Fügen Sie der Datei index.html den folgenden Text hinzu:

 Docker-Compose is magic! 

Dieser Text wird an den Kunden übermittelt.

2d. Dockerfile bearbeiten


Jetzt erstellen wir eine einfache Dockerfile , die für die Organisation der Laufzeit des Python-Servers verantwortlich ist. Wir werden das offizielle Image für die Ausführung von in Python geschriebenen Programmen als Grundlage für das erstellte Image verwenden. Hier ist der Inhalt der Docker-Datei:

 #    ,  Dockerfile       . #      'FROM'. #      python ( DockerHub). #   ,    ,  'python',     - 'latest'. FROM python:latest #       ,   Python,     'server.py'  'index.html'. #     ,     'ADD'. #  , 'server.py',    ,   . #  , '/server/',  ,        . #        '/server/'. ADD server.py /server/ ADD index.html /server/ #     'WORKDIR', ,   . #      . #    ,      ,   '/server/'. WORKDIR /server/ 

Lassen Sie uns nun am Client arbeiten.

▍3. Kundenerstellung


Beim Erstellen des Client-Teils unseres Projekts werden wir uns gleichzeitig an einige der Grundlagen von Docker erinnern.

3a. Dateierstellung


Wechseln Sie in den Ordner Ihres client Projekts und erstellen Sie die folgenden Dateien darin:

  • Die Datei client.py . Dies ist der Client-Code.
  • Dockerfile Datei. Diese Datei spielt dieselbe Rolle wie eine ähnliche Datei im Serverordner. Es enthält nämlich Anweisungen, die die Erstellung einer Umgebung zum Ausführen von Clientcode beschreiben.

Daher sollte Ihr client/ Ordner in dieser Arbeitsphase folgendermaßen aussehen:

 . ├── client.py └── Dockerfile 0 directories, 2 files 

3b. Bearbeitung von Python-Dateien


Fügen Sie der Datei client.py den folgenden Code client.py :

 #!/usr/bin/env python3 #    Python. #      'index.html'  . #     ,      Python. import urllib.request #      'http://localhost:1234/'. # ,      ,   'http://localhost:1234'. # localhost   ,      . # 1234 -   ,        . fp = urllib.request.urlopen("http://localhost:1234/") # 'encodedContent'     ('index.html'). # 'decodedContent'     (  ,      ). encodedContent = fp.read() decodedContent = encodedContent.decode("utf8") #   ,    ('index.html'). print(decodedContent) #    . fp.close() 

Dank dieses Codes kann die Clientanwendung Daten vom Server herunterladen und auf dem Bildschirm anzeigen.

3c. Dockerfile bearbeiten


Wie beim Server erstellen wir eine einfache Dockerfile für den Client, die für die Erstellung der Umgebung verantwortlich ist, in der die Client-Python-Anwendung funktioniert. Hier ist der Client- Dockerfile Code:

 #   ,     Dockerfile. FROM python:latest #  'client.py'   '/client/'. ADD client.py /client/ #      '/client/'. WORKDIR /client/ 

▍4. Docker komponieren


Wie Sie vielleicht bemerkt haben, haben wir zwei verschiedene Projekte erstellt: den Server und den Client. Jeder von ihnen hat seine eigene Dockerfile . Bisher geht alles, was passiert, nicht über die Grundlagen der Arbeit mit Docker hinaus. Jetzt fangen wir mit Docker Compose an. Dazu wenden wir uns der Datei docker-compose.yml , die sich im Stammordner des Projekts befindet.

Bitte beachten Sie, dass wir hier nicht versuchen, absolut alle Befehle zu berücksichtigen, die in docker-compose.yml . Unser Hauptziel ist es, Ihnen ein praktisches Beispiel zu geben, das Ihnen Grundkenntnisse in Docker Compose vermittelt.

Hier ist der Code, der in die docker-compose.yml :

 #  docker-compose     . #   "3"    -        . version: "3" #  ,  docker-composes   . # 1  = 1 . #    , ,   ... # ,     ,   'services'. services: #    ,       . #  ,     . #   (): . #    ,   . #       . #  ,    ,    'server'. server:   #   "build"     #    Dockerfile,      ,   #    .   #  'server/'     ,   #    Dockerfile.   build: server/   # ,      .   #     "python ./server.py".   command: python ./server.py   #   ,      'server/server.py'   1234.   #          (   ),   #         .   #       'ports'.   #      : [ ]:[ ]   #        1234         # 1234  (         #   ).   ports:     - 1234:1234 #   (): . #    'client'. client:   #  'client/    ,     #  Dockerfile    .   build: client/   # ,      .   #     "python ./client.py".   command: python ./client.py   #   'network_mode'     .   #    ,      'localhost' .   network_mode: host   #   'depends_on'  ,   ,   #   , ,       .   #  ,   'client'       'server'.   depends_on:     - server 

▍5. Projektmontage


Nachdem alle erforderlichen Anweisungen in docker-compose.yml , muss das Projekt zusammengestellt werden. Dieser Schritt unserer Arbeit ähnelt der Verwendung des docker build , der entsprechende Befehl bezieht sich jedoch auf mehrere Dienste:

 $ docker-compose build 

▍6. Projektstart


Nachdem das Projekt abgeschlossen ist, ist es Zeit, es zu starten. Dieser Schritt unserer Arbeit entspricht dem Schritt, in dem bei der Arbeit mit einzelnen Containern der Befehl docker run ausgeführt wird:

 $ docker-compose up 

Nach Ausführung dieses Befehls sollte das Terminal den vom Client vom Server heruntergeladenen Text anzeigen: Docker-Compose is magic! .

Wie bereits erwähnt, verwendet der Server den Computerport 1234 , um Clientanforderungen zu bedienen. Wenn Sie zum Browser unter http: // localhost: 1234 / gehen , wird daher eine Seite mit dem Text Docker-Compose is magic! angezeigt Docker-Compose is magic! .

Nützliche Befehle


Schauen wir uns einige der Befehle an, die Sie bei der Arbeit mit Docker Compose möglicherweise nützlich finden.

Mit diesem Befehl können Sie Container und andere Ressourcen stoppen und löschen, die mit dem docker-compose up :

 $ docker-compose down 

Dieser Befehl zeigt die Dienstprotokolle an:

 $ docker-compose logs -f [service name] 

In unserem Projekt kann es beispielsweise in der folgenden Form verwendet werden: $ docker-compose logs -f [service name] .

Mit diesem Befehl können Sie die Container auflisten:

 $ docker-compose ps 

Mit diesem Befehl können Sie einen Befehl in einem ausführenden Container ausführen:

 $ docker-compose exec [service name] [command] 

Zum Beispiel könnte es so aussehen: docker-compose exec server ls .

Mit diesem Befehl können Sie eine Liste von Bildern anzeigen:

 $ docker-compose images 

Zusammenfassung


Wir haben die Grundlagen der Arbeit mit der Docker Compose-Technologie untersucht, deren Wissen es Ihnen ermöglicht, diese Technologie zu verwenden und auf Wunsch mit dem tieferen Studium zu beginnen. Hier ist das Repository mit dem Projektcode, den wir hier überprüft haben.

Liebe Leser! Verwenden Sie Docker Compose in Ihren Projekten?

Source: https://habr.com/ru/post/de450312/


All Articles