Maison >développement back-end >tutoriel php >Orchestrer les applications Laravel à l'aide de Docker Compose

Orchestrer les applications Laravel à l'aide de Docker Compose

不言
不言original
2018-07-06 11:15:211595parcourir

Cet article présente principalement l'utilisation de Docker Compose pour orchestrer les applications Laravel. Il a maintenant une certaine valeur de référence. Maintenant, je le partage avec tout le monde. Les amis dans le besoin peuvent s'y référer

Avant-propos

. Laravel officiel L'environnement de développement recommandé est Homestead (en fait une boîte Vagrant packagée. Je pense que c'est relativement lourd, j'ai donc utilisé Docker Compose pour organiser un environnement de développement et le partager ici).

Exigences environnementales

Docker et Docker composer doivent être installés en premier, et il est préférable de remplacer l'image de l'entrepôt Docker par une image domestique. Généralement, j'exécute Vagrant sur mon ordinateur de développement, puis j'y exécute Docker et d'autres applications.

L'idée principale

Docker recommande officiellement qu'un conteneur exécute un service, il y aura donc une orchestration Compose et chaque service communique via la technologie d'interconnexion des conteneurs. Par exemple, lorsque le service Php se connecte à Mysql. , il vous suffit de mettre le Nom d'hôte écrit comme nom de conteneur, il sera directement converti en IP spécifique en interne. Le répertoire de code est mappé du conteneur à l'hôte à l'aide de volumes de données, et les fichiers de configuration (Nginx, etc.) sont également mappés au conteneur via des volumes de données.

Pratique

J'ai encapsulé cet ensemble de services pour un usage quotidien, il suffit de le cloner et de l'utiliser directement. Je parlerai principalement ici des idées de mise en œuvre.

Adresse du projet : https://github.com/rootrl/php...

Structure du répertoire de mon projet :

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 Ce sont tous des outils de ligne de commande encapsulés, en fait Services de conteneur Docker, mais ce sont tous des services prêts à l'emploi.

  • conf Ce répertoire est le répertoire de configuration de l'application et sera mappé au fichier d'orchestration de docker-composer.yaml compose dans le conteneur en utilisant Volume , ce qui suit parlera du. construction de l'image de

  • Dockerfile.php php (il y aura une certaine personnalisation, comme la modification du DNS et l'installation d'extensions spéciales)

  • démarrez Run . /start pour démarrer tous les services. Vous pouvez également exécuter cette commande après le redémarrage

  • docekr-compose.yaml

  • Ce fichier est le fichier d'orchestration de compose

Quatre services php-fpm, nignx, mysql et redis sont définis ici (si vous avez besoin d'autres services, ajoutez-les vous-même). Ensuite, des réseaux publics sont définis afin que tous les conteneurs puissent communiquer facilement.

Par exemple, dans nginx.conf
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

voici la méthode de connexion avec php-fpm : php:9000

Dockerfile.php
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;
    }
}

Il s'agit d'une version d'image Php, où le serveur DNS a été modifié et plusieurs extensions php ont été installées.

Utilisez
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

Démarrer

./start pour démarrer tous les services

Ligne de commande

Ce qui précède est l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'apprentissage de chacun. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois !

Recommandations associées :
./bin/php -v

# Laravel artisan
./bin/php artisan

La solution au problème selon lequel la table est vide lors de l'exécution de la commande de migration de table dans Laravel 5.5

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:Code de tri rapide PHPArticle suivant:Code de tri rapide PHP