Es ist lange her, dass die Nützlichkeit von Docker und die Nützlichkeit von SPA (Single Page Application) hervorgehoben wurden, und ich denke, dass Docker / SPA heutzutage sehr beliebt geworden ist. Docker erstellt eine virtuelle Umgebung zum Ausführen von Webanwendungen wie Laravel. Diese Docker-Umgebung kann auch in der Produktion bereitgestellt werden. Dieses Mal erstellen wir ein PHP + Vue.js SPA mit Laravel auf Docker.
Docker-comppse ist ein sogenanntes Orchestrierungswerkzeug, das mehrere Docker-Images erstellt und verwaltet.
Installieren Sie zuerst Docker.
$ sudo apt-get remove docker docker-engine docker.io
Dann installieren Sie aus dem offiziellen Repository.
$ 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
Lassen Sie uns überprüfen, ob Docker erfolgreich installiert wurde. Wenn Sie den folgenden Befehl auf dem Terminal eingeben und die Version angezeigt wird, ist dies erfolgreich.
docker --version
#Docker version 19.03.5, build 633a0ea838
Es ist in Ordnung, wenn die Version so angezeigt werden kann.
Docker-compose sollte zusammen mit der Docker-Installation installiert worden sein. Überprüfen Sie mit dem folgenden Befehl. Wenn die Version angezeigt wird, ist sie erfolgreich.
docker-compose -v
#docker-compose version 1.24.1, build 4667896b
Löschen Sie die Docker-Compose-Datei aus meinem Git-Repository und führen Sie sie mit dem folgenden Befehl aus.
$ 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
Dann können Sie sehen, dass Core UI vue lokal ausgeführt wird. http://localhost:10080/
Da es jedoch problematisch war, habe ich nur das Dashboard und die Anmeldeseiten ordnungsgemäß erstellt. Klicken Sie hier für eine richtige Demoseite. https://coreui.io/vue/demo/3.1.0/#/dashboard
Da es sich um eine MIT-Lizenz handelt, kann sie für kommerzielle Zwecke verwendet werden, wenn die Rechte ordnungsgemäß angezeigt werden.
Die von Git abgelegte Docker-Compose-Datei hat diese Einstellungen. Sie können sehen, dass Sie Nginx / Mysql / Redis richtig verwenden.
version: "3.5"
#Wird verwendet, wenn das Volumen zwischen Containern geteilt wird
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: