Cet article explique comment créer un environnement Laravel à l'aide du conteneur de développement de VS Code. Vous pouvez créer un environnement à grande vitesse tant que vous disposez des outils à utiliser, et puisque vous utilisez Docker, vous pouvez l'utiliser comme environnement de développement unifié pour votre équipe. Si vous souhaitez le déplacer pour le moment, veuillez utiliser le lien du référentiel.
https://github.com/naoyayamamoto/laravel-docker-sample Comme il est préparé en tant que référentiel de modèles, il peut également être utilisé comme modèle.
Utilisez les outils ci-dessus.
Les détails d'installation sont omis pour Docker et Visual Studio Code.
Visual Studio Code Remote --Containers est un plug-in VS Code créé par Microsoft. Vous pouvez l'installer dans VS Code à partir du lien.
$ git clone https://github.com/naoyayamamoto/laravel-docker-sample
$ code laravel-docker-sample
#Si vous n'avez pas la commande code, ouvrez le référentiel avec VS Code
Remote-Containers: Reopen in Container pour commencer à préparer l'environnement.Allez sur http: // localhost: 8000 et vous devriez voir la page initiale de Laravel.

Lorsque vous ouvrez devcontainer, l'environnement Docker sera construit sur la base de .devcontainer / docker-compose.yml.
Nous utilisons les conteneurs suivants et nous vous expliquerons chacun d'eux.
nginx:alpine (web)
php artisan serve.devcontainer / docker / nginx / default.conf et envoyez le processus à php-fpmmysql:8 (db)
.devcontainer / docker / mysql / my.cnf est chargé (paramètres de base japonais)MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'`` MYSQL_DATABASE: laravel est définie, donc aucun mot de passe root, la table initiale laravel est créée.devcontainer / docker / php / Dockerfilecomposer ・ node ・ npm ・ yarn peut être utilisé.devcontainer / docker / php / php-fpm.d / zzz-www.conf pour exécuter php-fpm sur chaussetteDB_HOST: db est défini, il est prioritaire sur le paramètre dans .env et connecté au conteneur de base de données.Un Dockerfile qui construit pour la production a été ajouté au référentiel, veuillez donc l'utiliser comme source de personnalisation. Nous utilisons une construction en plusieurs étapes pour compiler js et installer composer à l'avance pour garder l'image finale aussi petite que possible. Je réussis uniquement les tests de construction avec les actions Github.
Pour référence, il s'agit d'un paramètre lors de l'utilisation avec kubernetes. On suppose que nginx et php sont exécutés en tant que 1POD.
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-conf
data:
  default.conf: |
    access_log /dev/stdout main;
    error_log /dev/stderr warn;
    server {
        server_tokens off;
        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        gzip on;
        gzip_http_version 1.0;
        gzip_disable "msie6";
        gzip_proxied any;
        gzip_min_length 1024;
        gzip_comp_level 6;
        gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
        open_file_cache max=100000 inactive=20s;
        open_file_cache_valid 30s;
        open_file_cache_min_uses 2;
        open_file_cache_errors on;
        listen 80;
        root /workspace/public;
        add_header X-Frame-Options "SAMEORIGIN";
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Content-Type-Options "nosniff";
        index index.html index.htm index.php;
        charset utf-8;
        location / {
            try_files $uri $uri/ /index.php?$query_string;
        }
        location = /favicon.ico { access_log off; log_not_found off; }
        location = /robots.txt  { access_log off; log_not_found off; }
        error_page 404 /index.php;
        location ~ \.php$ {
            fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
            include fastcgi_params;
        }
        location ~ /\.(?!well-known).* {
            deny all;
        }
    }
---
kind: Service
apiVersion: v1
metadata:
  name: laravel-service
spec:
  selector:
    app: laravel
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
      name: laravel-http
---
kind: Deployment
apiVersion: apps/v1
metadata:
  name: laravel
  labels:
    app: laravel
spec:
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: laravel
  template:
    metadata:
      labels:
        app: laravel
    spec:
      containers:
        - name: app
          image: myimage
          volumeMounts:
            - mountPath: /var/run/php-fpm
              name: php-fpm-socket
            - mountPath: /shared
              name: public-contents
          lifecycle:
            postStart:
              exec:
                command: ["/bin/sh", "-c", "cp -aT /workspace/public /shared"]
        - name: web
          image: nginx:alpine
          ports:
            - containerPort: 80
          volumeMounts:
            - mountPath: /var/run/php-fpm
              name: php-fpm-socket
            - mountPath: /etc/nginx/conf.d
              name: nginx-conf
            - mountPath: /workspace/public
              name: public-contents
      volumes:
        - name: php-fpm-socket
          emptyDir: {}
        - name: public-contents
          emptyDir: {}
        - name: nginx-conf
          configMap:
            name: nginx-conf
            items:
              - key: default.conf
                path: default.conf