Maison >développement back-end >tutoriel php >Orchestrer les applications Laravel à l'aide de Docker Compose
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
. 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).
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.
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.
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
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: bridgevoici la méthode de connexion avec php-fpm : php:9000Dockerfile.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
./bin/php -v # Laravel artisan ./bin/php artisanLa 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!