Construire un environnement pour Laravel + MySQL + phpMyadmin avec Docker

Dans cet article, un nouvel ingénieur diplômé inexpérimenté expliquera comment créer un environnement pour Laravel. Il y a certains points qui ne peuvent être atteints, mais merci. Faites-le sans utiliser git. Il explique également les fichiers de configuration tels que Dockerfile et docker-compose.yml. Il s'adresse aux personnes qui souhaitent comprendre les paramètres et créer un environnement. Aussi pour les débutants de Laravel! ..

Environnement d'exploitation Mac(Catallina 10.15.7) Docker 19.03.13 docker-compose 1.27.4

Veuillez installer docker et docker-compose à l'avance. Article de référence Installation de docker et docker-compose (édition Mac)

Structure du répertoire

├── Docker/
│   ├── App/
│   │   ├ 000-default.conf  
│   │   ├ Dockerfile
│   │   └ php.ini 
│   └── DB/
│        ├ my.cnf  
│        └ volume/ 
│
├── src/ 
└── docker-compose.yml

J'ai un article ici sur la commande tree pour ce type d'affichage. Affichage facile de la structure des répertoires! Commande d'arborescence (Mac) Présentation des options fréquemment utilisées

Description de chaque répertoire de fichiers

000-default.conf
fichier de configuration Apache
Dockerfile
fichier de configuration Docker
php.ini
fichier de configuration PHP
my.conf
fichier de configuration MySQL
répertoire de volume
Les données de la base de données sont enregistrées (persistantes)
répertoire src
Répertoire contenant le code source Laravel
docker-compose.yml
fichier de configuration docker-compose

Chaque fichier de réglage

000-default.conf Ce sera le réglage d'Apache. Veuillez décrire le contenu suivant.

000-default.conf


<VirtualHost *:80>
       ServerAdmin laravel@localhost
       DocumentRoot /var/www/html/laravelapp/public
       ErrorLog ${APACHE_LOG_DIR}/error.log
       CustomLog ${APACHE_LOG_DIR}/access.log combined
       <Directory /var/www/html/laravelapp/public>
           AllowOverride All
       </Directory>
</VirtualHost>

Article de référence Hôte virtuel basé sur le nom Comment publier des sites avec plusieurs domaines sur un serveur Apache Remarque: Vérifiez le fichier de configuration Apache (http.conf) (1)

Dockerfile C'est le paramètre du conteneur php (laravel). Veuillez décrire le contenu suivant.

Dockerfile


FROM php:7.4-apache

ADD php.ini /usr/local/etc/php/
ADD 000-default.conf /etc/apache2/sites-enabled/

RUN cd /usr/bin && curl -s http://getcomposer.org/installer | php && ln -s /usr/bin/composer.phar /usr/bin/composer

RUN apt-get update \
&& apt-get install -y \
git \
zip \
unzip \
vim \
libpng-dev \
libpq-dev \
&& docker-php-ext-install pdo_mysql

RUN mv /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled
RUN /bin/sh -c a2enmod rewrite

7.4-apache


 Je tire une image appelée php: 7.4-apache de Docker Hub.

`ADD php.ini /usr/local/etc/php/
ADD 000-default.conf /etc/apache2/sites-enabled/`
 Il est copié dans le répertoire spécifié dans le conteneur qui crée php.ini expliqué plus tard et 000-default.conf expliqué ci-dessus.

`RUN cd /usr/bin && curl -s http://getcomposer.org/installer | php && ln -s /usr/bin/composer.phar /usr/bin/composer`
 À l'intérieur du conteneur, j'ai installé le composeur requis pour installer laravel.


`RUN apt-get update \
&& apt-get install -y \
git \
zip \
unzip \
vim \
libpng-dev \
libpq-dev \
&& docker-php-ext-install pdo_mysql`
 J'installe un middleware dans un conteneur. Git, zip, unzip, vim, libpng-dev, libpq-dev peuvent être utilisés dans le conteneur.

`RUN mv /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled
RUN /bin/sh -c a2enmod rewrite`
 Dans le conteneur, j'exécute la commande mv pour déplacer rewrite.load vers le répertoire spécifié.
 Après cela, j'exécute une commande qui active rewrite.load. Veuillez consulter le deuxième matériel de référence pour plus de détails.

 Matériel de référence
 [Comprendre le répertoire Apache](https://kana-linux.info/linux/apache%E3%81%AE%E3%83%87%E3%82%A3%E3%83%AC%E3%82 % AF% E3% 83% 88% E3% 83% AA% E3% 82% 92% E7% 90% 86% E8% A7% A3% E3% 81% 97% E3% 82% 88% E3% 81% 86 )
 [Activer les modules Apache sur Ubuntu](https://www.t3a.jp/blog/infrastructure/apache2-mod-add/)
 [Création d'un environnement de développement pour Laravel + Apache + MySQL avec Docker](https://note.com/pocke_techblog/n/n8af813848fa0)


php.ini
 Ce sera le paramètre de php.
 Veuillez copier et coller ce qui suit.


#### **`php.ini`**
```ruby

[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
default_charset = "UTF-8"
mbstring.language = "Japanese"

date.timezone = "Asia/Tokyo" Vous définissez littéralement le fuseau horaire. default_charset Spécifiez le code de caractère par défaut à afficher dans l'en-tête HTTP. mbstring.language = "Japanese" Définissez la langue par défaut.

Matériel de référence Liste des directives php.ini Éléments qui peuvent être définis dans les paramètres php.ini Modifier php.ini

my.cnf Il s'agit du fichier de configuration du serveur MySQL. Les paramètres détaillés sont décrits dans docker-compose.yml décrit plus tard, ils sont donc réduits au minimum.

my.cnf


[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
[client]
default-character-set=utf8mb4

[mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci Le code de caractère est défini sur utf8mb4. [client] default-character-set=utf8mb4 Paramètres du code de caractère du client

Article de référence Notes actuelles sur la définition de charset sur utf8mb4 dans MySQL (InnoDB) Définir le code de caractère Basic MySQL ~ Part 2 ~ my.cnf (fichier de configuration)

docker-compose.yml fichier de paramètres docker-compose (paramètre de chaque conteneur)

docker-compose.yml



# docker-Définit la version utilisée par compose.
version: '3'
#Chaque élément qui exécute l'application. Dans les services, app, db et phpmyadmin sont définis comme des éléments enfants.
services:
 #Les conteneurs qui exécutent laravel sont répertoriés ci-dessous à partir d'ici.
 app:
   #Décidez ici du nom du conteneur.
   container_name: laravel_app
   #C'est un paramètre du port à connecter. Il connecte le port 8080 de l'hôte et le port 80 du conteneur. L'hôte virtuel sur le port 80 est 000-default.Il a déjà été défini dans conf.
   ports:
     - "8000:80"
   #Spécifie l'emplacement des paramètres Dockerfile. Construisez en fonction du contenu du Dockerfile.
   build: ./Docker/App
   #L'emplacement où le conteneur et les répertoires côté hôte sont synchronisés est spécifié ici. Voici la source du laravel.
   volumes:
     - ./src:/var/www/html
 #Le conteneur qui exécute MySQL est défini à partir d'ici.
 db:
   #MySQL 5 depuis Docker Hub.C'est un paramètre qui tire l'image officielle de 7.
   image: mysql:5.7
   #Le nom du conteneur est spécifié.
   container_name: laravel_db
   #La variable d'environnement dans le conteneur de MySQL est spécifiée. Veuillez en définir un.
   environment:
     MYSQL_ROOT_PASSWORD: root
     MYSQL_DATABASE: laraveldb
     MYSQL_USER: dbuser
     MYSQL_PASSWORD: dbpass
     TZ: 'Asia/Tokyo'
   #C'est la commande au démarrage.
   command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
   #Les répertoires sont synchronisés. Veuillez noter que si vous n'écrivez pas ici, la base de données perdra des données lorsque vous fermerez le conteneur. Pour plus d'informations, vous pouvez vérifier la persistance du docker.
   volumes:
     - ./Docker/DB/volume:/var/lib/mysql
     - ./Docker/DB/my.cnf:/etc/mysql/conf.d/my.cnf
   #C'est un paramètre pour se connecter au port 13306 de l'hôte et au port 3306 dans le conteneur.
   ports:
     - 13306:3306
 #Les paramètres de phpmyadmin sont décrits dans l'écriture.
 phpmyadmin:
   #Le nom du conteneur est décidé.
   container_name: phpmyadmin
   #C'est un paramètre qui extrait l'image de phpmyadmin de Docker Hub.
   image: phpmyadmin/phpmyadmin
   #C'est le réglage de la variable d'environnement de phpmyadmin. Veuillez consulter et décrire les paramètres MySQL. PMA_La base de données des services est spécifiée pour HOSTS.
   environment:
    - PMA_ARBITRARY=1
    - PMA_HOSTS=db
    - PMA_USER=root
    - PMA_PASSWORD=root
   ports:
    - 3000:80

Article de référence J'ai expliqué comment écrire docker-compose.yml Créer un environnement d'essai MySQL avec Docker (également phpMyAdmin) Comment créer un environnement LAMP + phpMyAdmin pour PHP 7.4 et MariaDB 10.5 avec Docker

Lancer le conteneur

Construire. (Allez dans le répertoire où se trouve le fichier docker-compose.yml)

[Mac]$ docker-compose build
      :
      :
     Successfully built c1c2970ecb4b
     Successfully tagged docker_laravel_app:latest

S'il se termine sans problème, démarrez le conteneur avec la commande suivante.

[Mac]$ docker-compose up -d

-d est attaché lors du lancement d'un conteneur en arrière-plan. Si vous n'en avez pas besoin, supprimez-le.

Assurez-vous que le conteneur est en place.

[Mac]$ docker ps
CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS                                NAMES
e2164a5c2371        docker_laravel_app      "docker-php-entrypoi…"   3 minutes ago       Up 2 minutes        0.0.0.0:8000->80/tcp                 laravel_app
5d80cab0e266        mysql:5.7               "docker-entrypoint.s…"   3 minutes ago       Up 2 minutes        33060/tcp, 0.0.0.0:13306->3306/tcp   laravel_db
ad4786c13249        phpmyadmin/phpmyadmin   "/docker-entrypoint.…"   3 minutes ago       Up 2 minutes        0.0.0.0:3000->80/tcp                 phpmyadmin

Il n'y a aucun problème si les informations sur le conteneur sont sorties.

Installation de Laravel

Entrez dans le conteneur et installez le projet laravel.

Entrez dans le conteneur avec docker exec.

[Mac]$ docker exec -it laravel_app bash
root@e2164a5c2371:/var/www/html# //S'il est affiché comme illustré à gauche, il se trouve dans le conteneur.

Installez laravel à l'aide de composer. Puisque composer est déjà installé tel que défini dans le Dockerfile, il peut être installé avec la commande suivante. Cette fois, installez la série 6 laravel. [Livre technique] J'ai (https://www.amazon.co.jp/PHP-E3-83-95-E3-83-AC-E3-83-BC-E3-83-A0-E3- 83-AF-E3-83-BC-E3-82-AFLaravel-E5-85-A5-E9-96-80-E7-AC / dp / 4798060992 / ref = dp_ob_image_bk) utilise la série 6 de laravel. Installez avec 6 séries. (Cela prendra du temps.)

[Dans le container]# composer create-project "laravel/laravel=~6.0" --prefer-dist laravelapp

Pour installer la dernière version, exécutez la commande suivante

[Dans le container]# composer create-project laravel/laravel --prefer-dist laravelapp

Assurez-vous que le répertoire laravelapp est installé dans le répertoire / var / www / html à l'intérieur du conteneur et dans le répertoire src côté hôte. Lors du développement, il n'y a aucun problème si vous modifiez le code source dans le répertoire src / laravelapp du côté du système d'exploitation hôte.

Puisque le port 8000 du système d'exploitation hôte est connecté au port 80 dans le conteneur comme défini dans docker-compose.yml http://localhost:8000 Si vous accédez et que la page TOP de laravel est sortie, il n'y a pas de problème. スクリーンショット 2020-11-07 1.04.45.png

Définissez la base de données et connectez-vous.

Les conteneurs créés avec Docker-compose résolvent les noms par nom de conteneur. (Vous pouvez communiquer par nom de conteneur.) Pour vous connecter à un conteneur MySQL depuis un conteneur laravel, vous pouvez accéder à MySQL en accédant au port 3306 avec le nom d'hôte (nom du conteneur) laravel_db. Tout en faisant référence aux paramètres définis dans docker-compose.yml, il existe un paramètre MySQL dans le fichier .env qui ne se trouve pas dans le répertoire src / laravel, alors décrivez-le comme suit. Si vous avez modifié les paramètres de docker-compose.yml, veuillez les ajuster en conséquence.

DB_CONNECTION=mysql
DB_HOST=laravel_db
DB_PORT=3306
DB_DATABASE=laraveldb
DB_USERNAME=dbuser
DB_PASSWORD=dbpass

Je vais vraiment me connecter.

[Mac]$ docker exec -it laravel_app bash
[Dans le container]# cd laravel_app
[Dans le container]# php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table (0.2 seconds)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table (0.18 seconds)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated:  2019_08_19_000000_create_failed_jobs_table (0.08 seconds)

S'il est émis comme ci-dessus, il n'y a pas de problème.

Connectez-vous à phpmyadmin

phpmyadmin est un outil qui vous permet de visualiser et de gérer facilement le contenu de la base de données sur le navigateur. Veuillez consulter les documents de référence pour plus de détails. Utile pour gérer SQL! Comment utiliser phpMyAdmin [pour les débutants] Comment utiliser phpMyAdmin

Accédez à l'URL ci-dessous et vérifiez que phpmyadmin est affiché. (Il a déjà été défini sur le port 3000 dans docker-compose.yml) http://localhost:3000/

image.png

Entrez le serveur MySQL.

Entrez dans le conteneur MySQL et essayez d'entrer dans le serveur MySQL. Essayez d'exécuter les commandes dans l'ordre suivant.

[Mac]$ docker exec -it laravel_db bash
[Dans le container]root@5d80cab0e266:/# mysql -uroot -p 
Enter password:(docker-compose.Mot de passe de l'utilisateur root déterminé par yml)
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 17
Server version: 5.7.32 MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| laraveldb          |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.02 sec)

mysql> use laraveldb;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+---------------------+
| Tables_in_laraveldb |
+---------------------+
| failed_jobs         |
| migrations          |
| password_resets     |
| users               |
+---------------------+
4 rows in set (0.00 sec)

mysql>

mysql -uroot -p Spécifiez l'utilisateur avec -u. Cette fois, entrez en tant qu'utilisateur root. -p est une option pour entrer le mot de passe.

show databases; Sort toutes les bases de données.

use laraveldb; La commande consiste à utiliser la base de données laraveldb.

show tables; Cette commande génère toutes les tables de la base de données (laraveldb) en cours d'utilisation.

finalement

Ceci termine la construction de l'environnement laravel, et il ne nous reste plus qu'à procéder aux travaux de développement! !! Merci d'avoir lu jusqu'au bout.

Résumé de l'article de référence Hôte virtuel basé sur le nom Comment publier des sites avec plusieurs domaines sur un serveur Apache Remarque: Vérifiez le fichier de configuration Apache (http.conf) (1) [Comprendre le répertoire Apache](https://kana-linux.info/linux/apache%E3%81%AE%E3%83%87%E3%82%A3%E3%83%AC%E3%82 % AF% E3% 83% 88% E3% 83% AA% E3% 82% 92% E7% 90% 86% E8% A7% A3% E3% 81% 97% E3% 82% 88% E3% 81% 86 ) Activer les modules Apache sur Ubuntu Création d'un environnement de développement pour Laravel + Apache + MySQL avec Docker ↑ J'y ai surtout fait référence. Liste des directives php.ini Éléments qui peuvent être définis dans les paramètres php.ini Modifier php.ini Notes actuelles sur la définition de charset sur utf8mb4 dans MySQL (InnoDB) Définir le code de caractère Basic MySQL ~ Part 2 ~ my.cnf (fichier de configuration) J'ai expliqué comment écrire docker-compose.yml Créer un environnement d'essai MySQL avec Docker (également phpMyAdmin) Comment créer un environnement LAMP + phpMyAdmin pour PHP 7.4 et MariaDB 10.5 avec Docker Utile pour gérer SQL! Comment utiliser phpMyAdmin [pour les débutants] Comment utiliser phpMyAdmin

Recommended Posts

Construire un environnement pour Laravel + MySQL + phpMyadmin avec Docker
[Construction de l'environnement avec Docker] Rails 6 et MySQL 8
Construction de l'environnement de développement Laravel avec Docker (Mac)
Mémo de construction de l'environnement MySQL 5.7 (Docker)
[Docker] Construction de l'environnement Rails 5.2 avec docker
Créer un environnement Node.js avec Docker Compose
Construction d'environnement avec Docker pour les débutants
Construction de l'environnement d'utilisation Laravel + Docker Laradock
Créez un environnement Docker + Laravel avec Laradock
Créez un environnement de développement d'applications Rails avec Docker [Docker, Rails, Puma, Nginx, MySQL]
Apprentissage des instructions SQL ~ Construction de l'environnement ~ Docker + MySQL
Construction de l'environnement GPU avec Docker [version d'octobre 2020]
Construire un environnement Rails 6 + MySQL avec Docker compose
Modifier Mysql avec des commandes dans l'environnement Docker
[Docker] Construction de l'environnement de développement Rails6 / Ruby2.7 / MySQL8
Procédure de construction de l'environnement Docker "Rails 6 x MySQL 8" à partager avec les équipes
Construction de l'environnement Rails Docker
Créer un environnement Laravel / Docker avec VSCode devcontainer
Procédure de construction et de développement de l'environnement local Wordpress avec Docker
Mémo de construction de l'environnement Redmine (Docker)
Créer un environnement Docker avec WSL
Construction de l'environnement Docker × Spring Boot
Environnement Build Rails (API) x MySQL x Nuxt.js avec Docker
[Rails / MySQL] Construction de l'environnement Mac
[Docker] postgres, construction de l'environnement pgadmin4
Construction de l'environnement Laravel (Ubuntu 18.04 LTS)
Création d'un environnement de base de données avec Docker dans Spring Boot (IntellJ)
Comment créer un environnement [TypeScript + Vue + Express + MySQL] avec Docker ~ Express ~
Créez un environnement Vue3 avec Docker!
Créer un environnement local Couchbase avec Docker
Créer un environnement Node.js avec Docker
Lire le fichier de vidage avec MySQL de Docker
Rails sur la procédure de construction de l'environnement Docker
Mettre à jour MySQL de 5.7 à 8.0 avec Docker
Construire un SPA pour Laravel 6.2 / Vue.js / Nginx / Mysql / Redis avec Docker
Création d'un environnement de développement pour Ruby on Rails à l'aide de Docker + VSCode (Remote Container)
Procédure de création d'un environnement de développement d'applications Rails avec Docker [Rails, MySQL, Docker]
Comment créer un environnement [TypeScript + Vue + Express + MySQL] avec Docker ~ MySQL ~