Cela fait longtemps que l'utilité de Docker et l'utilité de SPA (Single Page Application) ont été soulignées, et je pense que Docker / SPA est devenu très populaire ces jours-ci. Docker crée un environnement virtuel pour exécuter des applications Web telles que Laravel, et cet environnement Docker peut également être déployé en production. Cette fois, créons un SPA PHP + Vue.js avec Laravel sur Docker.
Docker-comppse est un soi-disant outil d'orchestration qui crée et gère plusieurs images Docker.
Tout d'abord, installez Docker.
$ sudo apt-get remove docker docker-engine docker.io
Ensuite, installez à partir du référentiel officiel.
$ sudo apt-get update
# To enable https connection.
$ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
# To download GPG key.
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# Install the docker repository.
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
$ sudo apt-get update
# Install Docker.
$ sudo apt-get install docker-ce
Vérifions si Docker a été installé avec succès. Si vous tapez la commande suivante sur le terminal et que la version est affichée, cela réussit.
docker --version
#Docker version 19.03.5, build 633a0ea838
C'est OK si la version peut être affichée comme ça.
Docker-compose doit avoir été installé avec l'installation de Docker. Vérifiez avec la commande suivante. Si la version est affichée, elle réussit.
docker-compose -v
#docker-compose version 1.24.1, build 4667896b
Supprimez le fichier docker-compose de mon référentiel git et exécutez-le avec la commande suivante.
$ git clone https://github.com/lechatthecat/laravel-coreuivue-integration
$ cd laravel-coreuivue-integration
$ docker-compose up -d --build
$ docker-compose exec laravel ash
$ ash ./laravel_build.sh
Ensuite, vous pouvez voir que Core UI vue s'exécute localement. http://localhost:10080/
Cependant, comme c'était gênant, je n'ai fait que le tableau de bord et les pages de connexion correctement. Cliquez ici pour une page de démonstration appropriée. https://coreui.io/vue/demo/3.1.0/#/dashboard
Puisqu'il s'agit d'une licence MIT, elle peut être utilisée à des fins commerciales si les droits sont correctement affichés.
Le fichier docker-compose supprimé de Git a ces paramètres. Vous pouvez voir que vous utilisez correctement Nginx / Mysql / Redis.
version: "3.5"
#Utilisé lors du partage de volume entre conteneurs
x-services-volume:
&laravel-volume
type: bind
source: ./laravel-coreui
target: /laravel-coreui
services:
laravel:
container_name: laravel
depends_on:
- mydb
- myredis
build:
context: .
dockerfile: docker/laravel/Dockerfile
args:
- TZ=${TZ}
# bind mount
volumes:
- <<: *laravel-volume
- ./docker/laravel/laravel_build.sh:/laravel-coreui/laravel_build.sh
- ./logs:/var/log/php
- ./docker/laravel/php.ini:/usr/local/etc/php/php.ini
working_dir: /laravel-coreui
environment:
- DB_CONNECTION=mysql
- DB_HOST=db
- DB_DATABASE=${DB_NAME}
- DB_USERNAME=${DB_USER}
- DB_PASSWORD=${DB_PASSWORD}
- TZ=${TZ}
networks:
- app_net
# nginx 1.17
web:
container_name: my_nginx
image: nginx:1.17-alpine
depends_on:
- laravel
ports:
- 10080:80
volumes:
- *laravel-volume
- ./logs:/var/log/nginx
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:z
environment:
- TZ=${TZ}
networks:
- app_net
# MySQL 8.0
mydb:
container_name: mydb
image: mysql:8.0
volumes:
- db-store:/var/lib/mysql
- ./logs:/var/log/mysql:z
- ./docker/mysql/my.cnf:/etc/mysql/conf.d/my.cnf:z
ports:
- 13306:3306
environment:
- MYSQL_DATABASE=${DB_NAME}
- MYSQL_ROOT_PASSWORD=${DB_PASSWORD}
- MYSQL_USER=${DB_USER}
- MYSQL_PASSWORD=${DB_PASSWORD}
- TZ=${TZ}
networks:
- app_net
# redis 5.0.5
myredis:
container_name: myredis
image: redis:5.0.5-alpine
# bind mount
volumes:
- redis-store:/data
- ./logs:/var/log/redis.log:z
- ./docker/redis/my.conf:/etc/redis/my.conf:z
ports:
- 16379:6379
command: redis-server /etc/redis/my.conf
networks:
- app_net
networks:
# Containers in same network can access each other by using its container name as host name
app_net:
driver: "bridge"
volumes:
db-store:
redis-store:
Recommended Posts