Technologieaustausch

【Docker-compose】 Erstellen Sie eine PHP-Umgebung

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Docker-Compose-Container-Orchestrierung

1. Was ist

Compose ist eine von der Docker Company eingeführte Tool-Software, die mehrere Docker-Container verwalten kann, um eine Anwendung zu bilden. Sie müssen eine Konfigurationsdatei docker-compose.yml im YAML-Format definieren und die Aufrufbeziehungen zwischen mehreren Containern schreiben.Dann können Sie mit nur einem Befehl diese Container gleichzeitig starten/stoppen

  • · Docker-Compose ist das offizielle Open-Source-Projekt von Docker, das für die schnelle Orchestrierung von Docker-Container-Clustern verantwortlich ist.

2. Was können Sie tun?

Docker empfiehlt, in jedem Container nur einen Dienst auszuführen. Da der Docker-Container selbst nur sehr wenig Ressourcen beansprucht, ist es am besten, jeden Dienst separat zu trennen. Aber dann stehen wir vor einem anderen Problem?

Wenn ich mehrere Dienste gleichzeitig bereitstellen muss, muss ich dann für jeden Dienst eine separate Docker-Datei schreiben und dann das Image und den Container erstellen? Das ist anstrengend, daher stellt uns Docker offiziell das Multi-Service-Bereitstellungstool Docker-Compose zur Verfügung .

Um beispielsweise ein Web-Microservice-Projekt zu implementieren, ist es häufig erforderlich, zusätzlich zum Web-Service-Container selbst den Back-End-Datenbank-MySQL-Service-Container, den Redis-Server, das Registrierungscenter Eureka und sogar Lastausgleichscontainer usw. hinzuzufügen. . . . . .

Mit Compose können Benutzer eine Reihe zugehöriger Anwendungscontainer als Projekt über eine separate Docker-Compose.yml-Vorlagendatei (YAML-Format) definieren.

Sie können ganz einfach eine Multi-Container-Anwendung mit einer Konfigurationsdatei definieren und dann mit einem einzigen Befehl alle Abhängigkeiten der Anwendung installieren und den Build abschließen. Docker-Compose löst das Problem der Verwaltung und Orchestrierung von Containern.

3. Wohin gehen?

  • Offizielle Website · https://docs.docker.com/compose/compose-file/compose-file-v3/
  • https://docs.docker.com/compose/install/

Beschleunigte Download-Adresse

sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
  • 1

Fügen Sie ausführbare Berechtigungen hinzu

chmod +x /usr/local/bin/docker-compose
  • 1

Überprüfen Sie, ob die Installation erfolgreich war

docker-compose --version
  • 1
  • deinstallieren

    sudo rm / usr/ local/ bin/docker-compose
    
    • 1

4. Verfassen Sie Kernkonzepte

  • Drei Schritte zur Verwendung von Compose

    Schreiben Sie eine Docker-Datei, um jede Microservice-Anwendung zu definieren und die entsprechende Image-Datei zu erstellen

    Verwenden Sie docker-compose.yml, um eine vollständige Geschäftseinheit zu definieren und verschiedene Containerdienste in der Gesamtanwendung anzuordnen.

    Führen Sie abschließend den Befehl docker-compose up aus, um die gesamte Anwendung zu starten und auszuführen, um die Bereitstellung mit einem Klick abzuschließen und online zu gehen.

  • Verfassen Sie allgemeine Befehle

    docker-compose -h # Hilfe anzeigen

    docker-compose up # Alle Docker-Compose-Dienste starten

    docker-compose up -d # Alle Docker-Compose-Dienste starten und im Hintergrund ausführen

    docker-compose down # Stoppen und löschen Sie Container, Netzwerke, Volumes und Bilder.

    Die Dienst-ID in docker-compose exec yml # Geben Sie in der Containerinstanz ein

    Docker-Compose Exec Docker-Compose.yml Datei geschriebene Dienst-ID /bin/bash

    docker-compose ps # Zeigt alle laufenden Container an, die derzeit von Docker-Compose orchestriert werden

    docker-compose top # Zeigt die aktuellen Containerprozesse an, die von Docker-Compose orchestriert werden

    Dienst-ID in Docker-Compose-Protokollen yml # Container-Ausgabeprotokoll anzeigen

    docker-compose config # Konfiguration prüfen

    docker-compose config -q # Überprüfen Sie die Konfiguration und Ausgabe nur, wenn es Probleme gibt

    docker-compose restart # Starten Sie den Dienst neu

    docker-compose start # Starten Sie den Dienst

    docker-compose stop # Stoppen Sie den Dienst

Docker-Machine-Befehlsinstallation

 base=https://get.daocloud.io/docker/machine/releases/download/v0.14.0 &&
  curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine &&
  sudo install /tmp/docker-machine /usr/local/bin/docker-machine
  • 1
  • 2
  • 3

5. Praktischer Kampf: DNS-Server unter Linux konfigurieren und Lemp-Umgebung erstellen (Nginx + MySQL (MariaDB) + PHP)

Erfordern

1) Konfigurieren Sie in der virtuellen Linux-Maschine die IP-Adresse auf 192.168.90.215 (x sind die letzten drei Ziffern Ihres Studentenausweises, y wird von Ihnen selbst angegeben), und die virtuelle Maschine kann normal auf das Internet zugreifen.

2) Konfigurieren Sie den DNS-Server. Die Domäne lautet cr.com (abc ist der Anfangsbuchstabe Ihres Namens). Verwenden Sie nach Abschluss der Konfiguration nslookup, um die Vorwärts- und Rückwärtsauflösung zu überprüfen.

3) Konfigurieren Sie LEMP (d. h. Nginx + MySQL (MariaDB) + PHP) und greifen Sie auf das erstellte LEMP zu, indem Sie über den echten Host auf www.cr.com (abc sind Ihre Initialen) zugreifen. (Sie können die Hosts-Datei nicht für die lokale Auflösung ändern, sondern müssen Ihr eigenes konfiguriertes DNS verwenden.)

6. Konfigurieren Sie die DNS-Auflösung

Konfigurieren Sie zunächst eine statische IP für Linux http://alleniverrui.top/archives/linux-pei-zhi-jing-tai-ip (wenn sie nicht geöffnet werden kann, ändern Sie die Adresse unten).

//machen

Bearbeiten Sie die Datei /etc/named.conf

vim /etc/named.conf
  • 1

Ändern Sie die Abhör- und Abfragewerte in „Beliebig“.

Konfigurieren Sie DNS, um cr.com in 192.168.90.215 aufzulösen

vim /etc/named.rfc1912.zones 
  • 1

Am Ende der Datei hinzufügen

zone "cr.com" IN {
   type master;
   file "cr.com.zone";
  allow-update { none; };
};
zone "215.90.168.192.in-addr.arpa" IN {
        type master;
        file "com.cr.loop";
        allow-update { none; };
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

:wq zum Speichern

Bearbeiten Sie die entsprechende Konfigurationsdatei vim /var/named/com.cr.loop

Fügen Sie Folgendes hinzu

$TTL 1D
@       IN SOA  cr.com. rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       127.0.0.1
        AAAA    ::1
        PTR     cr.com.
        NS      ns.cr.com.
ns      A       192.168.90.215
201     PTR     www.cr.com.
201     PTR     email.cr.com.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

Bearbeiten Sie vim /var/named/cr.com.zone

Fügen Sie Folgendes hinzu

$TTL 1D
@       IN SOA  cr.com. rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       192.168.90.215
        AAAA    ::1
        NS      ns.server.com.
ns      IN A    192.168.90.215
www     IN A    192.168.90.215
email   IN A    192.168.90.215
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

DNS neu starten

systemctl restart named
  • 1

DNS-Status anzeigen

systemctl status named
  • 1

Erfolgreich gestartet

Vorwärtsanalyse von nslookup cr.com

Umgekehrtes Parsen von nslookup 192.168.90.215

Lemp konfigurieren

Schreiben Sie die Datei docker-compose.yml nach /mydocker/lemp

vim /mydocker/lemp/docker-compose.yml Füllen Sie den folgenden Inhalt aus

nginx:
    build: ./nginx/
    ports:
        - 80:80
    links:
        - php
    volumes_from:
        - app

php:
    build: ./php/
    expose:
        - 9000
    links:
        - mysql
    volumes_from:
        - app

app:
    image: php:7.0-fpm
    volumes:
        - .:/var/www/html
    command: "true"

mysql:
    image: mysql:latest
    volumes_from:
        - data
    environment:
        MYSQL_ROOT_PASSWORD: secret
        MYSQL_DATABASE: bookmarks
        MYSQL_USER: cr
        MYSQL_PASSWORD: cr123

data:
    image: mysql:latest
    volumes:
        - /var/lib/mysql
    command: "true"

phpmyadmin:
    image: phpmyadmin/phpmyadmin
    ports:
        - 8080:80
    links:
        - mysql
    environment:
        PMA_HOST: mysql
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48

Erstellen Sie eine Nginx/Docker-Datei in /mydocker/lemp/

ausfüllen

FROM nginx:latest

COPY ./default.conf /etc/nginx/conf.d/default.conf
  • 1
  • 2
  • 3

Erstellen Sie die Datei default.conf

Füllen Sie den folgenden Inhalt aus

 

server {

  listen 80 default_server;

  root /var/www/html;

  index index.html index.php;

 

  charset utf-8;

 

  location / {

try_files $uri $uri/ /index.php?$query_string;

  }

 

  location = /favicon.ico { access_log off; log_not_found off; }

  location = /robots.txt  { access_log off; log_not_found off; }

 

  access_log off;

  error_log  /var/log/nginx/error.log error;

 

  sendfile off;

 

  client_max_body_size 100m;

 

  location ~ .php$ {

  fastcgi_split_path_info ^(.+.php)(/.+)$;

  fastcgi_pass php:9000;

 fastcgi_index index.php;

 include fastcgi_params;

 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

fastcgi_intercept_errors off;

fastcgi_buffer_size 16k;

 fastcgi_buffers 4 16k;

  }

 

  location ~ /.ht {

 deny all;

  }

}

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75

Erstellen Sie eine PHP/Docker-Datei in /mydocker/lemp/

ausfüllen

FROM php:7.0-fpm

RUN docker-php-ext-install mysqli

 
  • 1
  • 2
  • 3
  • 4
  • 5

Orchestrieren Sie Docker-Container

 docker-compose up -d 
  • 1

Docker ps zum Anzeigen des Container-Ausführungsstatus

Erfolgreich gestartet

Diese Maschine greift über IP auf die PHP-Umgebung und die Nginx-Umgebung zu

Zugriff erfolgreich

Konfigurieren Sie den lokalen DNS-Server als virtuelle Maschine, nämlich 192.168.90.215

Öffnen Sie das cmd-Fenster und führen Sie einen Ping-Test auf cr.com durch

Erfolgreich gepingt

Greifen Sie über den Domänennamen auf die erstellte PHP-Umgebung zu

Ändern Sie die Nginx-Konfigurationsdatei

Der endgültige Domainname greift direkt auf die Website zu