GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

Dockerisieren von LEMP Stack mit Docker-Compose auf Ubuntu

Docker-Compose ist ein Befehlszeilentool zum Definieren und Verwalten von Docker-Anwendungen mit mehreren Containern. Compose ist ein Python-Skript, das einfach mit dem Befehl pip installiert werden kann (pip ist der Befehl zum Installieren von Python-Software aus dem Python-Paket-Repository). Mit compose können wir mehrere Docker-Container mit einem einzigen Befehl ausführen. Es ermöglicht Ihnen, einen Container als Dienst zu erstellen, der sich hervorragend für Ihre Entwicklungs-, Test- und Staging-Umgebung eignet.

In dieser Anleitung führe ich Sie Schritt für Schritt durch die Verwendung von docker-compose zum Erstellen einer LEMP-Stack-Umgebung (LEMP =Linux – Nginx – MySQL – PHP). Wir werden alle Komponenten in verschiedenen Docker-Containern ausführen, wir richten einen Nginx-Container, PHP-Container, PHPMyAdmin-Container und einen MySQL/MariaDB-Container ein.

Voraussetzungen

  • Ubuntu-Server 16.04 -64 Bit
  • Root-Rechte

Schritt 1 – Docker installieren

In diesem Schritt installieren wir Docker. Docker ist im Ubuntu-Repository verfügbar, aktualisieren Sie einfach Ihr Repository und installieren Sie es dann.

Ubuntu-Repository aktualisieren und upgraden:

sudo apt-get update
sudo apt-get upgrade

Installieren Sie den neuesten Docker aus dem Ubuntu-Repository.

sudo apt-get install -y docker.io

Docker starten und beim Booten starten lassen:

systemctl start docker
systemctl enable docker

Die Docker-Dienste werden ausgeführt.

Als Nächstes können Sie versuchen, Docker mit dem folgenden Befehl zu testen:

docker run hello-world

Hallo Welt von Docker.

Schritt 2 – Docker-Compose installieren

Im ersten Schritt haben wir Docker bereits installiert. Jetzt installieren wir docker-compose.

Wir brauchen python-pip für die Compose-Installation, installiere python und python-pip mit apt:

sudo apt-get install -y python python-pip

Wenn die Installation abgeschlossen ist, installieren Sie docker-compose mit dem Befehl pip.

pip install docker-compose

Überprüfen Sie nun die Docker-Compose-Version:

docker-compose --version

Docker-compose wurde installiert.

Schritt 3 – Docker-Umgebung erstellen und konfigurieren

In diesem Schritt erstellen wir unsere Docker-Compose-Umgebung. Wir werden einen Nicht-Root-Benutzer verwenden, also müssen wir diesen Benutzer jetzt erstellen.

Fügen Sie einen neuen Benutzer namens „hakase“ hinzu ' (wählen Sie hier Ihren eigenen Benutzernamen, wenn Sie möchten):

useradd -m -s /bin/bash hakase
passwd hakase

Fügen Sie als Nächstes den neuen Benutzer zum 'Docker hinzu ' gruppieren und Docker neu starten.

usermod -a -G docker hakase
sudo systemctl restart docker

Jetzt wird der Benutzer 'hakase ' kann Docker ohne sudo verwenden.

Melden Sie sich als Nächstes vom Root-Benutzer mit su beim Benutzer „hakase“ an.

su - hakase

Erstellen Sie ein neues Verzeichnis für die Compose-Umgebung.

mkdir lemp-compose/
cd lemp-compose/

Dies ist unsere Docker-Compose-Umgebung, alle Dateien, die im Docker-Container sein sollen, müssen in diesem Verzeichnis liegen. Wenn wir docker-compose verwenden, benötigen wir eine .yml-Datei mit dem Namen „docker-compose.yml“. '.

Erstellen Sie im Verzeichnis „lemp-compose“ einige neue Verzeichnisse und eine docker-compose.yml-Datei:

touch docker-compose.yml
mkdir -p {logs,nginx,public,db-data}
  • Protokolle :Verzeichnis für Nginx-Protokolldateien.
  • nginx :enthält Nginx-Konfiguration wie virtueller Host usw.
  • öffentlich :Verzeichnis für Webdateien, index.html und PHP-Infodatei.
  • DB-Daten :Volume des MariaDB-Datenverzeichnisses.

Erstellen Sie die Protokolldateien error.log und access.log in den 'logs ' Verzeichnis.

touch logs/{error,access}.log

Erstellen Sie eine neue Konfigurationsdatei für den virtuellen nginx-Host in der Datei „nginx ' Verzeichnis:

vim nginx/app.conf

Konfiguration unten einfügen:

upstream php {
        server phpfpm:9000;
}

server {

        server_name 193.70.36.50;

        error_log "/opt/bitnami/nginx/logs/myapp-error.log";
        access_log  "/opt/bitnami/nginx/logs/myapp-access.log";

        root /myapps;
        index index.php index.html;

        location / {

                try_files $uri $uri/ /index.php?$args;
        }

        location ~ \.php$ {

                include fastcgi.conf;
                fastcgi_intercept_errors on;
                fastcgi_pass php;
        }

        location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
                expires max;
                log_not_found off;
        }
}

Speichern Sie die Datei und beenden Sie vim.

Erstellen Sie eine neue index.html-Datei und eine PHP-Info-Datei im Verzeichnis „public ' Verzeichnis.

echo '<h1>LEMP Docker-Compose</h1><p><b>hakase-labs</b>' > public/index.html
echo '<?php phpinfo(); ?>' > public/info.php

Jetzt können Sie das Umgebungsverzeichnis wie unten gezeigt sehen:

tree

Schritt 4 - Konfiguration der docker-compose.yml-Datei

Im vorherigen Schritt haben wir die Verzeichnisse und Dateien erstellt, die für unsere Container benötigt werden. In diesem Schritt wollen wir die Datei 'docker-compose.yml bearbeiten '. In der Datei docker-compose.yml definieren wir unsere Dienste für den LEMP-Stack, die Basis-Images für jeden Container und die Docker-Volumes.

Melden Sie sich bei 'hakase an ' Benutzer und bearbeiten Sie die docker-compose.yml Datei mit vim:

su - hakase
cd lemp-compose/
vim docker-compose.yml

- Nginx-Dienste definieren

Fügen Sie die nginx-Konfiguration unten ein:

nginx:
    image: 'bitnami/nginx'
    ports:
        - '80:80'
    links:
        - phpfpm
    volumes:
        - ./logs/access.log:/opt/bitnami/nginx/logs/myapp-access.log
        - ./logs/error.log:/opt/bitnami/nginx/logs/myapp-error.log
        - ./nginx/app.conf:/bitnami/nginx/conf/vhosts/app.conf
        - ./public:/myapps

In dieser Konfiguration haben wir bereits Folgendes definiert:

  • nginx :Dienstname
  • Bild :Wir verwenden 'bitnami/nginx ' Docker-Bilder
  • Ports :Container-Port 80 verfügbar machen an den Host-Port 80
  • Links :verlinkt 'nginx ' Dienstcontainer in 'phpfpm ' Behälter
  • Volumen :Hängen Sie lokale Verzeichnisse in den Container ein. Mounten Sie das Protokolldateiverzeichnis, mounten Sie die virtuelle Nginx-Hostkonfiguration und mounten Sie das Web-Root-Verzeichnis.

- PHP-fpm-Dienste definieren

Fügen Sie die Konfiguration unter dem Nginx-Block ein:

phpfpm:
    image: 'bitnami/php-fpm'
    ports:
        - '9000:9000'
    volumes:
        - ./public:/myapps

Wir haben hier definiert:

  • phpfpm :Dienstnamen definieren.
  • Bild :Definieren Sie das Basis-Image für den phpfpm-Dienst mit "bitnami/php-fpm". ' Bild.
  • Ports :Wir führen PHP-fpm mit TCP-Port 9000 aus und den Port 9000 freigeben an den Gastgeber.
  • Volumen :Mounten Sie das Web-Root-Verzeichnis 'public ' zu 'meineapps ' auf dem Behälter.

- Definieren Sie den MySQL-Dienst

Fügen Sie im dritten Block die folgende Konfiguration für den MariaDB-Dienstcontainer ein:

mysql:
    image: 'mariadb'
    ports:
        - '3306:3306'
    volumes:
        - ./db-data:/var/lib/mysql
    environment:
        - MYSQL_ROOT_PASSWORD=hakase-labs123

Hier können Sie sehen, dass wir Folgendes verwenden:

  • mysql :als Dienstname.
  • Bild :Der Container basiert auf 'mariadb ' Docker-Bilder.
  • Ports :Dienstcontainer mit Port 3306 für eine MySQL-Verbindung und stellen Sie sie dem Host auf Port 3306 zur Verfügung .
  • Volumen :DB-Daten Verzeichnis mysql
  • Umgebung :Setzen Sie die Umgebungsvariable 'MYSQL_ROOT_PASSWORD ' für das MySQL-Root-Passwort für die Docker-Images, das beim Erstellen des Containers ausgeführt wird.

- Konfiguration der PHPMyAdmin-Dienste

Fügen Sie im letzten Block die folgende Konfiguration ein:

phpmyadmin:
    image: 'phpmyadmin/phpmyadmin'
    restart: always
    ports:
       - '8080:80'
    links:
        - mysql:mysql
    environment:
        MYSQL_USERNAME: root
        MYSQL_ROOT_PASSWORD: hakase-labs123
        PMA_HOST: mysql

Wir verwenden ein „phpmyadmin“-Docker-Image, das den Container-Port 80 abbildet bis 8080 Verknüpfen Sie auf dem Host den Container mit der mariadb container, setze restart always und setze einige Umgebungsvariablen des Docker-Images, einschließlich set 'PMA_HOST '.

Speichern Sie die Datei und beenden Sie vim.

Sie können das vollständige Beispiel auf GitHub sehen.

Schritt 5 – Docker-Compose ausführen

Jetzt können wir docker-compose ausführen. Hinweis:Wenn Sie Docker-Compose ausführen möchten, müssen Sie sich im Docker-Compose-Projektverzeichnis befinden und sicherstellen, dass dort die yml-Datei mit der Compose-Konfiguration vorhanden ist.

Führen Sie den folgenden Befehl aus, um den LEMP-Stack hochzufahren:

docker-compose up -d

-d: läuft als Daemon oder Hintergrund

Sie werden das Ergebnis sehen, dass die neuen Container erstellt wurden, überprüfen Sie es mit dem folgenden Befehl:

docker-compose ps

Jetzt haben wir vier Container, auf denen Nginx, PHP-fpm, MariaDB und PHPMyAdmin ausgeführt werden.

Schritt 6 – Testen

Überprüfen von Ports, die vom Docker-Proxy auf dem Host verwendet werden.

netstat -plntu

Wir sehen Port 80 für den Nginx-Container, Port 3306 für den MariaDB-Container, Port 9000 für den php-fpm-Container und Port 8080 für den PHPMyAdmin-Container.

Greifen Sie über den Webbrowser auf Port 80 zu und Sie sehen unsere index.html-Datei.

http://Server-IP-Adresse/

Stellen Sie sicher, dass PHP-fpm läuft, greifen Sie über den Webbrowser darauf zu.

http://serverip-adresse/info.php

Greifen Sie in der MySQL-Shell auf den MySQL-Container zu.

docker-compose exec mysql bash
mysql -u root -p
TYPE MYSQL PASSWORD: hakase-labs123

Erstellen Sie nun eine neue Datenbank:

create database hakase_db;
exit

Auf den MariaDB-Mysql-Shell-Container kann zugegriffen werden, und wir haben eine neue Datenbank „hakase_db“ erstellt '.

Als nächstes greifen Sie auf PHPMyAdmin auf Port 8080 zu:http://serverip-address:8080/.

Sie sehen die Anmeldeseite von PHPMyAdmin, geben Sie einfach den Benutzernamen „root“ ein ' und das Passwort ist 'hakase-labs123 '.

Sie werden automatisch mit dem mysql-Container verbunden, der im PMA_HOST definiert wurde Umgebungsvariable.

Klicken Sie auf "Los". ' und Sie sehen das phpmyadmin-Dashboard, das mit 'mysql verbunden ist ' Container.

Erfolg! Der LEMP-Stack wird unter einem Docker-Compose-Setup ausgeführt, das aus vier Containern besteht.

Referenz

https://hub.docker.com/r/bitnami/nginx/

https://hub.docker.com/r/bitnami/php-fpm/

https://hub.docker.com/_/mariadb/

https://hub.docker.com/r/phpmyadmin/phpmyadmin/

https://docs.docker.com/compose/

https://github.com/yuzukiseo/hakase-labs/tree/master/lemp-compose


Ubuntu
  1. Installation des LEMP-Stacks auf Ubuntu 14.04

  2. So installieren Sie WordPress mit Docker auf Ubuntu

  3. Dockering von Wordpress mit Nginx und PHP-FPM auf Ubuntu 16.04

  4. So installieren Sie WordPress mit einem LEMP-Stack auf Ubuntu 18.04

  5. So installieren Sie Magento 2.4 mit LEMP Stack auf Ubuntu 20.04

Installieren Sie ProjectSend auf Ubuntu 20.04 mit Nginx (LEMP Stack)

Installieren Sie NextCloud auf Ubuntu 18.04 mit Nginx (LEMP Stack)

Installieren Sie NextCloud auf Ubuntu 20.04 mit Nginx (LEMP Stack)

So installieren Sie Mailtrain auf Ubuntu 18.04 mit Docker

Portainer mit Docker auf Ubuntu installieren

So installieren Sie den LEMP-Stack mit PhpMyAdmin in Ubuntu 20.04