In einer der vorherigen Artikel, haben wir den Prozess der Ausführung von a untersucht Docker Container aus einem Bild. DockerDas Hauptkonzept von ist darauf ausgerichtet, dass jeder einzelne Prozess über einen eigenen Container mit der notwendigen Umgebung verfügt, die auf seine spezifischen Bedürfnisse zugeschnitten ist. Bei der Bearbeitung komplexer Anwendungen entsteht jedoch eine Herausforderung.
Stellen Sie sich eine Webanwendung vor, die eine Datenbank, einen Webserver und möglicherweise einen PHP-Interpreter erfordert. Dies erfordert bereits die Verwaltung von drei separaten Containern, und es wird umständlich, diese einzeln manuell einzurichten und auszuführen. Um dieses Problem anzugehen, wurde die „dockerDas Dienstprogramm „-compose“ wurde eingeführt. Es ermöglicht die Verwaltung von Containergruppen und erleichtert deren Erstellung, Konfiguration und Entfernung mit einem Befehl. Dieses Tutorial soll eine Einführung geben Docker für Anfänger, wobei der Schwerpunkt auf der praktischen Anwendung liegt docker-komponieren.
Docker-Compose-Setup
Zuerst sollten Sie den „Basis“-Paketsatz installieren:
apt-get update && apt-get install -y ca-certificates curl gnupg && sudo install -m 0755 -d /etc/apt/keyrings && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg && chmod a+r /etc/apt/keyrings/docker.gpg
echo \ "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update && apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
Der weitere Vorgang ist sehr einfach, es reicht aus, die vorkompilierte Datei herunterzuladen:
curl -L "https://github.com/docker/compose/releases/download/1.27.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Erteilen Sie dann Ausführungsberechtigungen:
chmod +x /usr/local/bin/docker-compose
Überprüfen Sie dann die Version des Pakets:
docker-compose --version
Ein Projekt erstellen
Wenn Sie an Projekten mitgearbeitet oder diese gesehen haben Docker, Sie haben vielleicht bemerkt, dass es eine gibt docker-compose-Datei im Projektordner.yaml". In dieser Datei werden die Container konfiguriert, die für Ihr Projekt erstellt werden müssen. Sie werden automatisch mit erstellt docker-komponieren. Die Datei verwendet YAML-Syntax und sollte die folgenden Daten enthalten:
version: 'file_version'
networks: 'used_networks'
volumes: 'used_storages'
services: 'used_containers'
Die Version gibt die Syntaxversion der Datei an. Für verschiedene Versionen stehen unterschiedliche Schlüsselwörter zur Verfügung, was der Abwärtskompatibilität dient. Wir werden Version 3.5 verwenden. Als nächstes müssen wir die Volumes, Netzwerke und die Container selbst auflisten.
Die YAML-Syntax ähnelt JSON, es gibt durch Doppelpunkte getrennte Schlüssel-Wert-Paare, aber hier kann der Wert vollständig leer sein, andere Schlüssel enthalten und es kann auch ein Array von Werten sein, wobei in diesem Fall jedes Array-Element mit a beginnt Bindestrich "-". Aber im Gegensatz zu JSON ist die Einrückung hier sehr wichtig, um die Verschachtelung von Werten anzuzeigen, also übersehen Sie sie nicht.
Erstellen wir einen Ordner mit dem Namen „serverspace-docker' und erstellen Sie eine Datei mit dem Namen 'docker-compose.yaml‘ drin:
mkdir /opt/serverspace-docker && nano /opt/docker-compose.yaml
Und fügen Sie diesen Code ein:
version: '3.5'
services: docker-nginx: image: nginx
Es reicht aus, den Container auszuführen.
Laufende Container
So starten Sie eine Gruppe von Containern, die in konfiguriert sind docker-compose.yaml müssen Sie zu dem Ordner navigieren, in dem sich diese Konfigurationsdatei befindet, und den Befehl ausführen docker-Komponieren Dort. Zum Beispiel:
cd /opt/serverspace-docker/
docker-compose up
Danach werden die Container gestartet, ihre Ausgabeströme werden zu einem zusammengeführt und Sie sehen Informationen im Terminal. Um die Container zu stoppen, drücken Sie einfach Strg+C. Wenn Sie die Container im Hintergrund ausführen möchten, verwenden Sie die -d Option:
docker-compose up -d
Um die Ausführung von Containern im Hintergrund zu stoppen, können Sie die verwenden docker-Komponieren Stopp Befehl:
Das docker-Aufschreiben Der Befehl stoppt nicht nur alle laufenden Container, sondern entfernt sie auch:
Weiterleitung von Containerhäfen
Der Container läuft, nützt uns aber im Moment kaum. Mit Dockerkönnen wir Port 80 des Containers an das Host-Betriebssystem weiterleiten und darauf zugreifen. Benutzen Sie dazu die 'Häfen' Direktive. Die Syntax lautet wie folgt:
ports:
- external_port:internal_port
Lassen Sie uns also Port 80 an 8098 weiterleiten
Dadurch können wir öffnen nginx am 'externen' Port:
Mounten von Ordnern
Um externe Speicher- oder Hostordner in den Container einzubinden, wird der Abschnitt „Volumes“ verwendet. Die Syntax ist der Arbeit mit Ports sehr ähnlich:
volumes:
- /path/to/external/folder:/path/to/internal/folder
Erstellen wir eine Datei mit dem Namen „index.html“ im aktuellen Projektordner und mounten diesen Ordner anstelle von „/usr/share/“ des Containers.nginxOrdner „/html/“:
echo "You're the best!" > index.html
Und fügen Sie die Ordner-Mounting-Anweisung hinzu docker-Datei zusammenstellen:
Nach dem Neustart des Containers sehen Sie Ihre eigene Seite im Browser.
Volumes konfigurieren
Wir können nicht nur externe Ordner, sondern auch darin erstellte Volumes mounten Docker zum Behälter. Dazu müssen Sie zunächst das Volume zum Hauptabschnitt „Volumes“ hinzufügen. Zum Beispiel, "serverspace-vl". Die meisten Webanwendungen erfordern eine Datenbank, wie z MySQL. Fügen wir einen weiteren Container für diese Datenbank hinzu und fügen unser Volume hinzu. Das Hinzufügen des Volumes erfolgt auf die gleiche Weise wie ein externer Ordner, mit der Ausnahme, dass anstelle eines Ordners der Name des Volumes angegeben wird. Fügen wir hinzu MySQL zu unserer Konfiguration:
docker-mysql:
image: mysql
volumes:
- serverspace-vl:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=VeryStr0ngPassword
- MYSQL_DATABASE=database
- MYSQL_USER=user
- MYSQL_PASSWORD=AnotherPassw0rd
Hier haben wir auch den Abschnitt „Umgebung“ hinzugefügt, in dem wir Umgebungsvariablen für den Container festlegen. Sie sind erforderlich, um den Standarddatenbanknamen und das Root-Passwort anzugeben.
Netzwerke konfigurieren
Container müssen miteinander kommunizieren. Wir haben schon Nginx und MySQL, und sie müssen noch nicht miteinander kommunizieren. Aber sobald wir einen Container für PhpMyAdmin haben, der auf MariaDB zugreifen muss, wird sich die Situation ändern. Virtuelle Netzwerke dienen der Kommunikation zwischen Containern und können ähnlich wie Volumes hinzugefügt werden. Fügen Sie zunächst das Netzwerk zum Hauptnetzwerk hinzu.Netzwerke" Abschnitt:
networks:
serverspace-network:
Fügen Sie dann dieses Netzwerk für jeden Container hinzu, der „externen“ Zugriff benötigt. Anschließend sind die Container unter ihrem Namen im Netzwerk verfügbar. Fügen wir beispielsweise PhpMyAdmin hinzu und gewähren ihm Zugriff auf die Datenbank:
docker-phpmyadmin:
image: phpmyadmin/phpmyadmin:latest
ports:
- "8099:80"
environment:
- PMA_HOST=docker-mysql
networks:
- serverspace-network
Hier beziehen wir uns in der Variablen PMA_HOST auf „docker-mysql" Host, der dank des gemeinsamen Netzwerks zwischen diesen Containern zugänglich ist. Ebenso im "docker-mysql„Container, unser PhpMyAdmin-Container ist zugänglich als“docker-phpmyadmin". Sie können die Adresse öffnen http://docker-server:8099 und authentifizieren Sie sich, um zu überprüfen, ob die Datenbank funktioniert.
Anschließen an einen Container
Mit der docker-compose, Sie können eine Verbindung zu jedem Container in der Gruppe herstellen. Nutzen Sie einfach die exec Befehl. Starten Sie das Projekt beispielsweise im Hintergrund:
docker-compose up -d
Dann verbinden wir uns mit dem Container Nginx:
docker-compose exec docker-nginx /bin/bash
Schlussfolgerungen
In diesem Artikel haben wir die Verwendung von behandelt Docker für Anfänger. Außerdem haben wir beschrieben, wie man einige davon verwendet docker Container als Komplex, eine Einheit. Das Thema ist recht umfangreich und komplex, aber sehr interessant. Wenn Sie das Projekt auf diese Weise auf einem Computer bereitstellen, können Sie es überall dort bereitstellen, wo Sie es benötigen, indem Sie einfach die Konfiguration dorthin kopieren. Deshalb erfreut sich diese Technologie bei Entwicklern und DevOps so großer Beliebtheit.