So erstellen Sie einen Docker-basierten Lampenstapel mit Docker-Compose auf Ubuntu 18.04 Bionic Beaver Linux

So erstellen Sie einen Docker-basierten Lampenstapel mit Docker-Compose auf Ubuntu 18.04 Bionic Beaver Linux

Zielsetzung

Nach diesem Tutorial können Sie mit der Docker -Technologie eine Lampenumgebung erstellen.

Anforderungen

  • Wurzelberechtigungen
  • Grundkenntnisse über Docker

Konventionen

  • # - Erfordert, dass gegebene Linux -Befehle entweder mit Root -Berechtigungen ausgeführt werden müssen
    direkt als Stammbenutzer oder durch Verwendung von sudo Befehl
  • $ - Erfordert, dass die angegebenen Linux-Befehle als regelmäßiger nicht privilegierter Benutzer ausgeführt werden können

Andere Versionen dieses Tutorials

Ubuntu 20.04 (fokale Fossa)

Einführung


Docker ist ein Open -Source -Projekt, das darauf abzielt, Software im Inneren bereitzustellen Behälter. Sie können sich einen Container als eine Art „Paket“ vorstellen, eine isolierte Umgebung, die den Kernel mit der Hostmaschine teilt und alles enthält, was die Anwendung benötigt. Alle Behälter werden mit Verwendung gebaut Bilder (Das Central Images -Repository für sie ist DockerHub).

In diesem Tutorial sehen wir, wie Sie einen Lampenstapel erstellen, der auf Dockerized -Komponenten basiert: Nach der Philosophie „Ein Dienst pro Container“ werden wir die Umgebung mithilfe der Umgebung zusammenstellen Docker-Compose, Ein Werkzeug zum orchestrieren Containerzusammensetzungen.

Ein Dienst im Vergleich zum Multiple -Service für den Container

Es gibt mehrere Vorteile bei der Verwendung eines Dienstes pro Container, anstatt mehrere Dienste im selben auszuführen. Modularität zum Beispiel (wir können einen Behälter für verschiedene Zwecke wiederverwenden) oder eine bessere Wartbarkeit: Es ist einfacher, sich auf ein bestimmtes Stück einer Umgebung zu konzentrieren, anstatt alle gleichzeitig zu berücksichtigen. Wenn wir diese Philosophie respektieren möchten, müssen wir für jede Komponente unseres Lampenstapels einen Container erstellen: einen für Apache-Php und eine für die Datenbank. Die verschiedenen Behälter müssen in der Lage sein, miteinander zu sprechen: Um verknüpfte Container leicht zu orchestrieren, werden wir verwenden Docker-Compose.

Vorläufige Schritte

Vor dem Fortfahren müssen wir installieren Docker Und Docker-Compose auf unserem System:

# APT-Get Installieren Sie Docker Docker-Compose

Die Pakete werden in wenigen Sekunden installiert und die Docker Der Service wird automatisch gestartet. Wir können nun mit der Erstellung eines Verzeichnisses für unser Projekt und darin eingehen, ein weiteres, um die Seiten zu halten, die von Apache bedient werden. DocumentRoot wäre ein aussagekräftiger Name dafür; In diesem Fall ist die einzige Seite, die es bedient wird Index.Php:

$ mkdir -p dockerized-lamp/documentRoot $ echo ""> docerized-lamp/documentroot/index.Php 
Kopieren

Hier besteht unser Code einfach in der Phpinfo Funktion: Es ist Ausgabe (eine Seite, die Informationen zu PHP zeigt, falls Sie es nicht wissen), ist das, was unser Server standardmäßig anzeigt. Verwenden wir jetzt unseren Lieblingsredakteur, um die zu erstellen Docker-Compose.YML Datei für unser Projekt.



PHP-Apache

Wir können nun Anweisungen zum Erstellen und Verbinden unserer Container mit der Docker-Compose-Datei angeben. Dies ist eine Datei, die die verwendet Yaml Syntax. Alle Definitionen müssen in die bereitgestellt werden Dienstleistungen Abschnitt.

Version: '3' Dienste: Php-Apache: Bild: Php: 7.2.1 -Apache -Ports: - 80:80 Bände: - ./Documentroot:/var/www/html Links: - 'mariadb' 
Kopieren

Schauen wir uns an, was wir hier gerade getan haben. Die erste Zeile, die wir in die Datei eingefügt haben, Ausführung, Gibt an, welche Docker-Compose-Syntaxversion wir verwenden werden, in diesem Fall die Version 3, Die neueste Hauptversion verfügbar. In der Dienstleistungen Abschnitt beschrieben wir unseren Dienst, indem wir seinen Namen angeben, PHP-Apache (Ein willkürlicher Name können Sie verwenden, was Sie wollen), dann die Anweisungen zum Erstellen.

Der Bild Mit Keyword können Sie Docker wissen, mit welchem ​​Bild wir unseren Container erstellen möchten: In diesem Fall habe ich verwendet 7.2.1-Apache die uns Php 7 liefern.2.1 zusammen mit dem Apache -Webserver. Benötigen Sie eine andere PHP -Version? Sie müssen nur aus den vielen auf der Bildseite auf DockerHub bereitgestellt.

Die zweite Anweisung, die wir zur Verfügung gestellt haben Häfen: Wir fordern Docker auf, den Port abzubilden 80 auf unserem Gastgeber, zum Hafen 80 Auf dem Container: Auf diese Weise erscheint wir den Webserver direkt auf unserem System.

Wir haben dann das benutzt Bände Anweisung zum Angeben a Binden Sie die Halterung. Da sich der Code während der Entwicklung stark ändert. Stattdessen werden wir Docker sagen Dokument Root Verzeichnis, at /var/www/html im Behälter. Dieses Verzeichnis repräsentiert den Hauptapache Virtualhost Das Dokument root, daher ist der Code, den wir darin eingeben, sofort verfügbar.

Endlich haben wir das benutzt Verknüpfung Schlüsselwort angeben Mariadb als Argument. Dieses Schlüsselwort wird nicht benötigt, wie es scheinen mag, um eine Verbindung zwischen den beiden Containern zu erstellen: auch ohne sie anzugeben, die Mariadb Der Service wäre aus dem für das gebauten Container erreichbar Apache-Php Service, indem er seinen Namen als Hostname verwendet. Das Schlüsselwort macht zwei Dinge: Lassen Sie uns zunächst optional eine angeben alias Wir können zusätzlich zu seinem Namen auf einen Dienst verweisen. Also zum Beispiel durch Schreiben:

Link: Mariadb: Datenbankservice 
Kopieren

Der Service könnte auch mit Verwendung erreicht werden Datenbankservice. Die zweite Sache Verknüpfung angibt eine Abhängigkeit: in diesem Fall die PHP-Apache Der Service wird als abhängig von der angesehen Mariadb eins, so wird letzteres vor dem ersteren gestartet.



Installieren Sie PHP -Erweiterungen

Die Standard-PHP-Apache-Dockerfile enthält keine einige PHP-Erweiterungen wie MySQLI oder PDO. Um sie zu installieren, müssen wir basierend darauf unsere eigene Dockerfile erstellen. Dazu erstellen wir ein Verzeichnis in unserem Projekt mit dem Namen PHP-Apache (dies wird unser sein Kontext aufbauen) und darin unsere Dockerfile. Fügen Sie den folgenden Code als PHP-Apache/Dockerfile ein und speichern Sie den folgenden Code:

 Von PHP: 7.2.1-apache Wartenwerfer Egidio Lindil Run Docker-Php-ext-Installation PDO PDO_MYSQL MYSQLI 
Kopieren

Wie Sie sehen können, mit dem AUS Anweisungen haben wir angegeben, dass diese Dockerfile auf dem Standard basieren sollte. Dann haben wir a aufgenommen LAUFEN Anweisung: Verwenden des Skripts im Bild selbst, Docker-Php-EXT-Installation, Wir schließen die Erweiterungen ein, die für die Verwendung von PDO und MySQLI erforderlich sind. An diesem Punkt müssen wir den Abschnitt PHP-Apache in unserem Docker-Compose leicht ändern, wenn wir unsere benutzerdefinierte Dockerfile verwenden möchten.YML, so:

Version: '3' Dienste: Php-Apache: Build: Kontext: ./PHP -Apache -Ports: - 80:80 Bände: - ./Documentroot:/var/www/html Links: - 'mariadb' 
Kopieren

Was hat sich verändert? Anstatt das zu verwendende Remote -Bild direkt anzugeben, haben wir das bereitgestellt Kontext Anweisung im Inneren der bauen Abschnitt, damit die Dockerfile im von uns erstellten und hier als Argument bereitgestellten Verzeichnis enthalten ist, wird automatisch verwendet. Das Kontextverzeichnis wird vom Docker -Daemon beim Erstellen des Bildes importiert. Wenn wir also zusätzliche Dateien hinzufügen möchten, müssen wir sie auch dort einsetzen.

Der Datenbankdienst

Eine Datenbank in einem wesentlichen Teil einer Lampenumgebung wird für die Persistenz verwendet. In diesem Fall werden wir verwenden Mariadb:

Mariadb: Bild: Mariadb: 10.1 Volumina: - Mariadb:/var/lib/mysql Umgebung: TZ: "Europa/rome" mySQL_Allow_Empty_password: "no" mysql_root_password: "rootpwd" mysql_user: testuser 'mysql_password:' testpassword 'mysql_dbase: 
Kopieren

Wir wissen bereits, was die Bild Schlüsselwort ist für. Das gleiche gilt für die Bände Anweisung, mit Ausnahme der Tatsache, dass wir diesmal nicht a deklariert haben Binden Sie die Halterung, Stattdessen haben wir uns auf A verwiesen Volumen genannt, für Beharrlichkeit. Es ist wichtig, sich für einen Moment auf den Unterschied zwischen den beiden zu konzentrieren.

Wie bereits erwähnt, a Binden Sie die Halterung ist eine schnelle Möglichkeit, ein Hostverzeichnis in einem Container zu montieren, damit die in diesem Verzeichnis enthaltenen Dateien aus der eingeschränkten Umgebung zugänglich werden: Um eine Bindungshalterung anzugeben, die kurze Syntax Ist:

:

Der Hostpfad kann ein Verwandter (zur Docker-Compose-Datei) oder ein absoluter Pfad sein, während der Mountpoint im Container in absoluter Form angegeben werden muss.

A Volumen genannt ist etwas anderes: Es ist ein angemessenes Docker -Volumen Wird für die Persistenz verwendet, und es muss im Allgemeinen gegenüber einer Bindungshalterung bevorzugt werden, da es nicht von der Host -Dateistruktur abhängt (einer der vielen Vorteile von Containern, es ist ihre Portabilität). Die Syntax, mit der A referenzieren kann Volumen genannt In einer Dienstdefinition befindet sich:

:

A Volumen genannt Der Lebenszyklus ist unabhängig von dem eines Containers, der ihn verwendet, und muss in der deklariert werden Bände Abschnitt der Docker-Compose-Datei, wie wir gleich sehen werden.

Zurück zur Definition des Dienstes jetzt. Das letzte Schlüsselwort, das wir verwendet haben, ist Umfeld: Es lässt uns einige Umgebungsvariablen festlegen, die das Verhalten des Dienstes beeinflussen. Zuerst benutzten wir TZ Um unsere Datenbank Timezone anzugeben: In diesem Fall habe ich „Europa/Rom“ verwendet. Die Namen der anderen Variablen sagen alles über ihren Zweck aus: Durch die Verwendung von wichtigen Details als Name der zu erstellenden Standarddatenbank (TestDB), werden der Benutzer und sein Passwort erstellt werden. Wir haben auch das Stammbenutzerkennwort festgelegt und beschlossen, keine leeren Passwörter zuzulassen.



Der Volumesabschnitt

In diesem Abschnitt müssen wir das erklären Volumen genannt Wir haben uns aus dem bezogen Mariadb Serverdefinition:

Bände: Mariadb: 
Kopieren

Am Ende wird unsere Datei in ihrer Gesamtheit aussehen:

Version: '3' Dienste: Php-Apache: Bild: Php: 7.2.1 -Apache -Ports: - 80:80 Bände: - ./Documentroot:/var/www/html: z links: - 'mariadb' mariadb: Bild: mariadb: 10.1 Volumina: - Mariadb:/var/lib/mysql Umgebung: TZ: "Europa/rome" mySQL_Allow_Empty_password: "no" mysql_root_password: "rootpwd" mysql_user: testuser 'mysql_password:' testpassword: 'testpassword' mysql_dada: 
Kopieren

Es ist wirklich wichtig, die Eindrücke zu respektieren, damit die Datei korrekt interpretiert werden kann.

Lassen Sie uns unsere Umwelt aufbauen

Sobald wir alle Anweisungen für unsere Dienste angegeben haben, können wir die nutzen Docker-Compose Up Befehl, sie zu bauen. Der Befehl muss in demselben Verzeichnis ausgeführt werden, in dem die Docker-Compose.YML Datei befindet sich:

# Docker-Compose Up

Ein paar Minuten und wir werden bereit sein zu gehen. Am Ende, wenn alles gut lief, durch Navigieren zu Lokalhost Auf unserem Host werden wir die Ausgabe des PHP -Skripts sehen, das wir darin platziert haben Dokument Root:

Unsere Lampenumgebung ist jetzt bereit, genutzt zu werden.

Gedanken schließen

Wir haben gesehen, wie man einen Basic erstellt LAMPE Umgebung, mit Docker und orchestrieren Container und Dienste mit Docker-Compose. Das Setup, das wir verwendet haben, konzentriert sich auf die Entwicklung und kann weiter erweitert und optimiert werden, um den unterschiedlichen Anforderungen zu entsprechen: Doker -Dokumentation Es ist eine sehr gut geschriebene Quelle, die Sie konsultieren können, um Ihr Docker -Wissen zu erweitern. Zögern Sie nicht, einen Kommentar für alle Zweifel oder Fragen zu hinterlassen, die Sie haben.

Verwandte Linux -Tutorials:

  • Dinge zu installieren auf Ubuntu 20.04
  • Dinge zu tun nach der Installation Ubuntu 20.04 fokale Fossa Linux
  • So erstellen Sie einen Docker -basierten Lampenstapel mit Docker auf…
  • Ubuntu 20.04 Tricks und Dinge, die Sie vielleicht nicht wissen
  • Ubuntu 20.04 Leitfaden
  • Ubuntu 20.04 Hadoop
  • Die 8 besten Ubuntu -Desktop -Umgebungen (20.04 fokale Fossa…
  • FTP -Clientliste und -installation auf Ubuntu 20.04 Linux…
  • So stellen Sie über SSH eine Verbindung zum Docker -Container her
  • So installieren Sie Lampenstapel auf Almalinux