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