So erstellen Sie einen Docker -basierten Lampenstapel mit Docker auf Ubuntu 20.04
- 720
- 146
- Matteo Möllinger
Der Lampenstapel
Lampe ist der Software -Stapel, auf dem wahrscheinlich die meisten Websites ausgeführt werden. Linux repräsentiert die Grundlage des Stapels, und die herkömmliche Implementierung umfasst Apache als Webserver, die MySQL-Datenbank und PHP als serverseitige Programmiersprache. Es gibt jedoch viele mögliche Variationen: Mariadb wird beispielsweise häufig anstelle von MySQL verwendet, von denen es sich um eine Gabel handelt, und andere Programmiersprachen, da Python oder Perl anstelle von PHP verwendet werden können. In diesem Artikel sehen wir, wie Sie einen Basis-Lampenstapel mit Docker und dem Docker-Compose-Dienstprogramm implementieren können.
In diesem Tutorial lernen Sie:
- So installieren Sie Docker und Docker-Compose auf Ubuntu 20.04
- So definieren Sie Dienste und Volumes mit Docker-Compose
- So kartieren Sie Host-Ports in Containerports in der Docker-Compose-Konfigurationsdatei
- So verwenden Sie Bindmontage und benannte Volumes
- So erstellen Sie ein Projekt mit Docker-Compose
Softwareanforderungen und Konventionen verwendet
Kategorie | Anforderungen, Konventionen oder Softwareversion verwendet |
---|---|
System | Installierte Ubuntu 20.04 oder verbessert Ubuntu auf 20.04 FOSSA FOSSA |
Software | Docker, Docker-Compose |
Andere | Root -Berechtigungen zum Aufbau von Docker -Containern und zum Starten des Docker -Dienstes |
Konventionen | # - erfordert, dass gegebene Linux -Befehle mit Root -Berechtigungen entweder direkt als Stammbenutzer oder mit Verwendung von ausgeführt werden können sudo Befehl$ - Erfordert, dass die angegebenen Linux-Befehle als regelmäßiger nicht privilegierter Benutzer ausgeführt werden können |
-
Installieren von Paketen und Starten des Docker -Dienstes
Um einen Docker-basierten Lampenstapel auf Ubuntu 20 zu erstellen.04 FORSA FOSSA, als erstes müssen wir die von uns benötigte Software installieren:
Docker
selbst undDocker-Compose
, Dies ist ein Dienstprogramm, mit dem wir Multi-Container-Anwendungen einfach organisieren könnenYaml
Konfigurationsdateien. Beide Pakete sind in den offiziellen Repositories in Ubuntu erhältlich. Wir können sie durch installierengeeignet
:$ sudo APT Installieren Sie Docker Docker-Compose
Nachdem die Installation durchgeführt wurde
Docker
Service und aktivieren Sie es beim Start. Wir können beide Operationen mit einem einzigen Befehl ausführen:$ systemctl aktivieren -jetzt Docker
-
Projektaufbau
Der erste Schritt auf unserer Reise besteht in der Erstellung des Verzeichnisses, das wir als Wurzel unseres Projekts verwenden werden. Für diesen Artikel werden wir es nennen
Linuxconfig
. In diesem Verzeichnis werden wir einen anderen erstellen,Dokument Root
, die unsere Website -Dateien hosten. Wir können beide Verzeichnisse gleichzeitig mit dem erstellen-P
Option derMkdir
Befehl:$ mkdir -p linuxconfig/documentroot
In der
Linuxconfig
Das Verzeichnis definieren die Docker-Compose-Konfiguration für unser Projekt in einer YAML-Datei, die standardmäßig aufgerufen werden sollteDocker-Compose.YML
. In der Konfigurationsdatei können wir drei Hauptstrophen verwenden: Dienstleistungen, Bände Und Netzwerke.Jeder Abschnitt wird verwendet, um den entsprechenden Aspekt eines Projekts zu konfigurieren. In diesem Tutorial werden wir nur die ersten beiden verwenden. Wir werden die Komponenten des Lampenstapels als Dienste in ihren eigenen separaten Containern implementieren.
Die mit Docker-Compose erstellten Container sind Mitglieder desselben Netzwerks und können daher standardmäßig miteinander sprechen. Im Netzwerk kann jeder Container die anderen mit einem mit seinem Namen identischen Hostnamen oder dem Namen, der zur Definition des vom Container implementierten Dienstes verwendet wird, verweisen kann.
Standardmäßig werden Container mit dem Namen des Verzeichnisses mit der Konfigurationsdatei als Präfix benannt. In diesem Fall beispielsweise der Container, der für einen Dienst genannt wird PHP-HTTPD, wird benannt linuxconfig_php-httpd_1.
-
Definieren des PHP + HTTPD -Dienstes
Der erste Dienst, den wir in der Konfigurationsdatei definieren werden Php Als Apache -Webservermodul. Wir werden eines der offiziellen PHP -Bilder verwenden, auf denen verfügbar ist Dockerhub als Basis für unseren Container, insbesondere die mit dem
-Apache
Suffix, das das oben erwähnte Setup liefert. Lassen Sie uns unsere Konfiguration schreiben:
KopierenVersion: '3.7 'Dienste: PHP-HTTPD: Bild: Php: 7.3 -Apache -Ports: - 80:80 Bände: - "./Documentroot:/var/www/html "
Das erste, was wir in der Konfigurationsdatei angegeben haben, ist
Ausführung
. Mit dieser Anweisung deklarieren wir, welche spezifische Version der komponierten Datei wir verwenden werden. Im Moment des Schreibens, Version3.7
ist der neueste und empfohlene. - Nachdem wir die Version der Komponierungsdatei deklariert hatten, begannen wir, die zu schreiben Service Strophe; Darin definieren wir die Dienste, die unseren Lampenstapel zusammenstellen werden. Wir haben den ersten Dienst angerufen
PHP-HTTPD
. Der Servicername ist völlig willkürlich, aber immer eine gute Angewohnheit, eine zu verwenden, die im Kontext des Projekts von Bedeutung ist.Der
Bild
Der Befehl wird verwendet, um auf welchem Bild der Container basiert, in diesem Fall basierenPHP: 7.3-Apache
.Der
Häfen
Der Befehl wird verwendet, um Ports auf dem Container freizulegen und eine Karte zwischen Host -Ports und Containerports zu erstellen. Eine solche Karte wird definiert, indem die Ports mit a getrennt werden:
. Auf der linken Seite geben wir den Host -Port an und rechts den Port im Container sollte er zugeordnet werden. In diesem Fall haben wir Port kartiert80
Auf dem Host zum Port80
Im Container, da es sich um den Standardport handelt, der vom Apache -Webserver verwendet wird.Die letzte Anweisung, die wir verwendet haben, ist
Bände
: damit können wir eine Zuordnung zwischen a angeben Volumen genannt oder ein Weg (Relativ oder absolut) auf dem Hostsystem zu einem Pfad auf dem Container, auf dem es montiert wird.In unserem Setup die
./Dokument Root
Das Verzeichnis hosten die Site -Dateien: Es wird auf dem montiert/var/www/html
Verzeichnis im Container, da das letztere das Dokumentstamm ist, das vom Standard Apache VirtualHost verwendet wird. Ein solches Setup heißt a Binden Sie die Halterung und ist besonders nützlich während der Entwicklung, da die Änderungen, die wir in den Projektdateien vornehmen, sofort im Container reflektiert werden. Der Nachteil dieser Konfiguration ist, dass sie eine Abhängigkeit zwischen dem Container und der Host -Maschinen -Dateistruktur festlegt, wodurch der Hauptvorteil der Verwendung von Docker verwendet wird: Portabilität.Das zu im Container montierte Verzeichnis wird automatisch erstellt, wenn es nicht vorhanden ist, wenn der
Docker-Compose Up
Der Befehl wird gestartet: In diesem Fall wird er Root gehören, wenn es nicht anders angegeben ist.In der
Dokument Root
Verzeichnis Wir können jetzt eine Indexdatei erstellen und versuchen, unser Projekt zu erstellen, um zu überprüfen, ob das Setup funktioniert:$ echo "DocumentRoot/Index.Php $ sudo docker -compose up -d
Nach der Ausführung des Befehls werden die benötigten Docker -Bilder von DockerHub und den Containern, die wir mit den Einstellungen, die wir zur Verfügung gestellt haben, im Hintergrund bereitgestellt, heruntergeladen und das Terminal nicht blockiert) heruntergeladen. Aufgrund der
-D
Option, die wir dem zur Verfügung gestellt habenDocker-Compose
Befehl. Mit dem Projekt in Betrieb, wenn wir navigieren zuLokalhost
Mit unserem Browser sollten wir die folgende Seite sehen:
Die Phpinfo -SeiteUm das Projekt aus dem Verzeichnis zu stoppen, in dem das veranstaltet wird
Docker-Compose.YML
Datei, wir können ausführen:$ sudo docer-compose stop
Definieren des Mariadb -Dienstes
Ein wesentlicher Bestandteil des Lampenstapels ist die Datenbankschicht. In unserer Konfiguration werden wir verwenden Mariadb und sein offizielles Docker -Image auf DockerHub verfügbar:
KopierenVersion: '3.7 'Dienste: PHP-HTTPD: Bild: Php: 7.3 -Apache -Ports: - 80:80 Bände: - "./Documentroot:/var/www/html "mariadb: Bild: mariadb: 10.5.2 Volumina: - Mariadb -Volume:/var/lib/mysql Umgebung: TZ: "Europa/rome" mysql_allow_tempy_password: "no" mysql_root_password: "rootpwd" mysql_user: 'testuser' mysql_password: 'testpassword:' testpassword: 'testpassword:' testpassword: 'testpassword' mysql_daTase: 'testpassword:' testpassword: 'testpassword' mysql_daTase: 'testpassword:' testpassword: 'testpassword' mysql_daTase: 'testpassword:' testpassword: 'testpassword' mysql_daTasing: Mariadb-Volume:
In der Dienstleistungen Stanza, wir haben einen weiteren Dienst definiert und nennen ihn an
Mariadb
und mit demBild
Anweisungen, die wir angegeben haben, möchten wir die verwenden10.5.2
Version des offiziellen Bildes.In der vorherigen Service -Definition haben wir eine Bindmontage verwendet. Diesmal haben wir stattdessen einen richtigen Docker verwendet Volumen genannt, aufmontieren
/var/lib/mysql
Im Container (es ist das Standarddatenverzeichnis, das von Mariadb verwendet wird). Im Gegensatz zu einer Bindungshalterung erzeugen benannte Volumes keine Abhängigkeiten des Containers in der Host -Dateisystemstruktur. Sie werden vollständig von Docker verwaltet und sind die empfohlene Methode, um Daten zu bestehen, die ansonsten bei der Zerstörung von Containern verloren gehen würden.Namensvolumina können im Haupt definiert werden
Bände
Strophe der Konfigurationsdatei und kann aus dem verwiesen werdenBände
Unterabschnitt jeder definierten Dienste. In diesem Fall haben wir unseren Band angerufenMariadb-Volume
.Als nächster Schritt haben wir den Wert einiger definiert Umgebungsvariablen Wird verwendet, um das Behälterverhalten zu beeinflussen. Umgebungsvariablen sind in der definiert
Umfeld
Abschnitt einer Servicedefinition. Die in diesem Fall definierten Variablen haben den folgenden Effekt:Variable Wirkung TZ Legen Sie die vom MariADB -Server verwendete Zeitzone fest MySQL_Allow_Empty_Password Aktivieren oder deaktivieren Sie die Verwendung von leerem Passwort für den DB -Root -Benutzer Mysql_root_password Dies ist eine obligatorische Variable und wird verwendet, um das DB -Root -Benutzerkennwort festzulegen Mysql_database Optional verwendet, um den Namen der Datenbank anzugeben, die beim Image -Start erstellt werden sollen MySQL_USER Optional verwendet, um den Namen eines Benutzers anzugeben, der mit Superuser -Berechtigungen für die mit MySQL_Database angegebene Datenbank erstellt wird MySQL_Password Wird verwendet, um das Kennwort für den Benutzer anzugeben, der mit dem von mySQL_USER angegebenen Namen erstellt wurde Zu diesem Zeitpunkt sollten wir einen funktionierenden Webserver haben, der mit PHP arbeiten kann, und eine Datenbank, um unsere Daten zu speichern.
Bonus - phpmyadmin
Unser Grundlampenstapel sollte jetzt abgeschlossen sein. Als Bonus möchten wir vielleicht hinzufügen phpmyadmin Um unsere MariADB-Datenbank einfach von einer benutzerfreundlichen Weboberfläche zu steuern. Fügen wir die zugehörige Servicedefinition unserer Docker-Compose-Konfiguration hinzu:
KopierenVersion: '3.7 'Dienste: PHP-HTTPD: Bild: Php: 7.3 -Apache -Ports: - 80:80 Bände: - "./Documentroot:/var/www/html "mariadb: Bild: mariadb: 10.5.2 Volumina: - Mariadb -Volume:/var/lib/mysql Umgebung: TZ: "Europa/rome" mysql_allow_tempy_password: "no" mysql_root_password: "rootpwd" mysql_user: 'testuser' mysql_password: 'testpassword:' testpassword 'mySql_daTase:' myScl_password: 'testpassword' mySql_daTase: 'mySthb. Bild: phpmyadmin/phpmyadmin Links: - 'Mariadb: DB' Ports: - 8081: 80 Bände: Mariadb -Volume:
Wir haben unseren Service benannt
phpmyadmin
und konfigurierte es, um die zu verwenden phpmyadmin/phpmyadmin Bild von DockerHub. Wir haben auch die benutztLinks
Schlüsselwort zum ersten Mal; wofür ist das? Wie wir bereits wissen, können alle in derselben Docker-Compose-Konfiguration erstellten Container standardmäßig und ohne spezielle Konfigurationen miteinander erstellt werden. Das PhpMyAdmin -Bild ist so konfiguriert, dass er auf einen laufenden Datenbankcontainer durch die verweistdb
Name, daher müssen wir einen Alias mit demselben Namen für unseren Mariadb -Dienst erstellen. Genau das ist wasLinks
wird verwendet für: Definieren von zusätzlichen Aliase, um einen Dienst von einem anderen zu erreichen.In der Service -Definition haben wir auch Port zugeordnet
8081
unserer Hostmaschine, zum Port80
Innerhalb des Containers (Port 80 ist bereits im PHP-HTTPD-Container auf denselben Anschluss abgebildet). Die PhpMyAdmin -Schnittstelle ist daher an der erreichbar Localhost: 8081 Adresse. Lassen Sie uns unser Projekt wieder aufbauen und überprüfen:$ sudo docer -compose up -d -build
Die PhpMyAdmin -AnmeldeseiteWir können uns mit den Anmeldeinformationen anmelden, die wir für unseren Datenbankdienst definiert haben, und verifizieren, dass die
testdb
Die Datenbank wurde erstellt:
PhpMyAdmin Homepage
Verwenden eines benutzerdefinierten Bildes für einen Dienst
In den obigen Beispielen haben wir immer Vanillebilder in unserer Dienstedefinition verwendet. Es gibt Fälle, in denen wir basierend auf ihnen benutzerdefinierte Docker -Bilder verwenden möchten. Angenommen, wir möchten den PHP-HTTPD-Dienst erstellen, aber eine zusätzliche PHP-Erweiterung angeben: Wie können wir das tun? Auf der Wurzel des Projekts definieren wir ein neues Verzeichnis und nennen es nach dem Dienst nach dem Service:
$ mkdir php-httpd
In diesem Verzeichnis erstellen wir eine Dockerfile, mit der das Basisbild mit dem folgenden Inhalt erweitert wird:
Von PHP: 7.3-Apache-Label Warteur = "[email protected] "APT-GET-Update && apt-Get Installation -y libmcrypt-dev \ && pecl installieren Sie McRypt-1.0.2 \ && docker-php-text-enable mcrypt
Zurück in unser
Docker-Compose.YML
Datei ändern wir die Definition derPHP-HTTPD
Service. Wir können das Bild nicht direkt verweisen wie zuvor. Stattdessen geben wir das Verzeichnis an, das unsere benutzerdefinierte Dockerfile als Build -Kontext enthält:
KopierenVersion: '3.7 'Dienste: PHP-HTTPD: Build: Kontext: ./PHP -HTTPD -Ports: - 80:80 Bände: - "./Documentroot:/var/www/html "[…]
Im
bauen
Abschnitt Wir definieren Konfigurationen, die zum Zeitpunkt der Erstellung angewendet werden. In diesem Fall haben wir verwendetKontext
Um das Verzeichnis mit Dockerfile zu verweisen: Das Verzeichnis wird als Build -Kontext verwendet, und sein Inhalt wird an den Docker -Daemon gesendet, wenn der Container erstellt wird. Um die Änderung anzuwenden.Um mehr über zusätzliche Erweiterungen im PHP -Docker -Bild zu erfahren, können Sie sich die offizielle Dokumentation und insbesondere die Pecl -Erweiterungen Abschnitt.
Schlussfolgerungen
In diesem Tutorial haben wir gesehen. Wir haben gesehen, wie man die verschiedenen Dienste im Docker-Compose definiert.YML-Konfigurationsdatei und So konfigurieren Sie Bindungsmontage, benannte Volumes und Host-Container-Ports Mapping. Wir haben auch gesehen, wie man benutzerdefinierte Bilder verwendet. Sie können sich die Docker-Compose-Referenz für die detaillierte Liste der Anweisungen ansehen, die in der Docker-Compose-Konfigurationsdatei verwendet werden können.
Verwandte Linux -Tutorials:
- Ubuntu 20.04 WordPress mit Apache -Installation
- Dinge zu installieren auf Ubuntu 20.04
- Ampache Raspberry Pi Installation
- OpenLiteSpeed WordPress Installation
- Wie man mit der Woocommerce -REST -API mit Python arbeitet
- So installieren Sie Lampenstapel auf Almalinux
- So richten Sie Linux Apache MySQL Python Server ein
- Ubuntu 20.04: WordPress mit Nginx -Installation
- So ändern Sie Mariadb -Benutzerkennwort
- Installieren Sie MySQL auf Ubuntu 20.04 LTS Linux
- « Ubuntu 20.04 Cinnamon Desktop Installation
- So listen und entfernen Sie das PPA -Repository auf Ubuntu 20.04 Linux »