Heim > Backend-Entwicklung > PHP-Tutorial > Orchestrieren Sie Laravel-Anwendungen mit Docker Compose

Orchestrieren Sie Laravel-Anwendungen mit Docker Compose

不言
Freigeben: 2023-04-02 16:34:01
Original
1597 Leute haben es durchsucht

Dieser Artikel stellt hauptsächlich die Verwendung von Docker Compose zur Orchestrierung von Laravel-Anwendungen vor. Jetzt kann ich ihn mit allen teilen, die ihn benötigen

Vorwort

Laravel offiziell Die empfohlene Entwicklungsumgebung ist Homestead (eigentlich eine verpackte Vagrant-Box), daher habe ich Docker Compose verwendet, um eine Entwicklungsumgebung zu organisieren und sie hier zu teilen.

Umgebungsanforderungen

Docker und Docker Compose müssen zuerst installiert werden. Am besten ersetzen Sie das Docker-Warehouse-Image durch ein inländisches. Im Allgemeinen führe ich Vagrant auf meinem Entwicklungscomputer aus und führe dann Docker und andere Anwendungen darauf aus.

Die Hauptidee

Docker empfiehlt offiziell, dass ein Container einen Dienst ausführt, sodass es eine Compose-Orchestrierung gibt und jeder Dienst über die Container-Verbindungstechnologie kommuniziert, wenn beispielsweise ein PHP-Dienst eine Verbindung zu MySQL herstellt , Sie müssen nur den Hostnamen als Containernamen schreiben, dieser wird intern direkt in eine bestimmte IP umgewandelt. Das Codeverzeichnis wird mithilfe von Datenvolumes vom Container auf den Host abgebildet, und die Konfigurationsdateien (Nginx usw.) werden ebenfalls über Datenvolumes dem Container zugeordnet.

Üben

Ich habe diesen Satz von Diensten gekapselt, einfach klonen und direkt verwenden. Ich werde hier hauptsächlich über die Implementierungsideen sprechen.

Projektadresse: https://github.com/rootrl/php...

Meine Projektverzeichnisstruktur:

php-environment-with-docker/
├── bin
│ ├── Composer
│ ├── getContainerIp
│ └── php
├── conf
│ ├──. nginx
│ │ └ ── conf.d
│ │ └── nginx.conf
│ └── redis
│ └── redis.conf
├── docker-compose.yaml
├ ─ ─ Dockerfile.php
├── LICENSE
├── README.MD
└── start

  • bin Dies sind alles gekapselte Befehlszeilentools, tatsächlich Docker-Containerdienste, aber es sind alles sofort einsatzbereite Dienste.

  • conf Dieses Verzeichnis ist das Konfigurationsverzeichnis der Anwendung und wird mithilfe von Volume der Orchestrierungsdatei von docker-composer.yaml im Container zugeordnet. Im Folgenden wird darauf eingegangen Bildkonstruktion von

  • Dockerfile.php PHP (es wird einige Anpassungen geben, wie z. B. das Ändern von DNS und die Installation spezieller Erweiterungen)

  • Starten Sie Run . /start, um alle Dienste zu starten. Sie können diesen Befehl auch nach dem Neustart ausführen

  • docekr-compose.yaml

  • Diese Datei ist die Orchestrierungsdatei von compose
version: '2'

services:
nginx:
  depends_on:
   - "php"

  image: "nginx"

  volumes:
   - "$PWD/conf/nginx/conf.d:/etc/nginx/conf.d"
   - "$PWD/www:/usr/share/nginx/html"
  ports:
   - "8888:80"
  networks:
   - oa-network
  container_name: "oa-nginx"
  command: /bin/bash -c "mkdir -p /var/www && ln -s /usr/share/nginx/html /var/www && nginx -g 'daemon off;'"
php:
  image: "oa-php-fpm"
  build:  
   context: .
   dockerfile: "Dockerfile.php"
  networks:
   - oa-network
  container_name: "oa-php-fpm"
  volumes:
   - "$PWD/www:/var/www/html"

mysql:
  image: mysql:5.7
  volumes:
   - "$PWD/db_data:/var/lib/mysql"
  environment:
   MYSQL_ROOT_PASSWORD: root123
   MYSQL_DATABASE: oa
   MYSQL_USER: oa
   MYSQL_PASSWORD: oa123
  ports:
   - "3306:3306"
  networks:
   - oa-network
  container_name: "oa-mysql"

redis:
  image: "redis"
  ports:
   - "6379:6379"
  networks:
   - oa-network
  volumes:
   - "$PWD/conf/redis/redis.conf:/usr/local/etc/redis/redis.conf"
  container_name: "oa-redis"

networks:
oa-network:
  driver: bridge
Nach dem Login kopieren

Hier sind die vier Dienste PHP-FPM, NIGNX, MySQL und Redis definiert (wenn Sie weitere Dienste benötigen, fügen Sie diese selbst hinzu). Anschließend werden öffentliche Netzwerke definiert, damit alle Container problemlos kommunizieren können.

Zum Beispiel in nginx.conf

server {
    listen       80;
    server_name  localhost;
    root /usr/share/nginx/html/public;
    index index.php index.html;
    location / {
    try_files $uri $uri/ /index.php?$query_string;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
    location ~ \.php$ {
        fastcgi_pass   php:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/html/public/$fastcgi_script_name;
        include        fastcgi_params;
    }
}
Nach dem Login kopieren

Hier ist die Verbindungsmethode mit php-fpm: php:9000

Dockerfile.php

FROM php:7.2-fpm
    Run echo "nameserver 223.5.5.5" >> /etc/resolv.conf \
    && echo "nameserver 223.6.6.6" >> /etc/resolve.conf \
    && apt-get update \
    && apt-get install -y \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libpng-dev \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install -j$(nproc) gd \
    && docker-php-ext-install mysqli pdo_mysql \
    && pecl install swoole \
    && pecl install redis \
    && docker-php-ext-enable swoole redis
Nach dem Login kopieren

Dies Ist das PHP-Image Build, ändern Sie hier den DNS-Server und installieren Sie mehrere PHP-Erweiterungen.

Verwenden Sie

Start

./start, um alle Dienste zu starten.

Befehlszeile

./bin/php -v

# Laravel artisan
./bin/php artisan
Nach dem Login kopieren

Das Obige ist der gesamte Inhalt davon Artikel, ich hoffe, er wird hilfreich sein. Für weitere verwandte Inhalte achten Sie bitte auf die chinesische PHP-Website!

Verwandte Empfehlungen:

Die Lösung für das Problem, dass die Tabelle leer ist, wenn der Tabellenmigrationsbefehl in Laravel 5.5 ausgeführt wird

Das obige ist der detaillierte Inhalt vonOrchestrieren Sie Laravel-Anwendungen mit Docker Compose. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage