samedi 11 janvier 2020

Laravel par Docker et Docker-compose

Ou utiliser Vagrant et Virtual Box?

C'est quoi Docker

C'est quoi Docker?
Docker est un logiciel libre permettant facilement de lancer des applications dans des conteneurs logiciels5.
-"Docker (logiciel)" de Wikipedia
Si nous utilisons "Docker", nous déployer le logiciel avec les conteneurs de Docker. Chaque conteneur est environnement virtuel different, alors si nous utilisons Docker, nous n'avons pas besoin de nous inquiéter la différence entre la production et le développement. Nous pouvons déployer le logiciel et son environnement virtuel (le conteneur) ensemble. Alors tout de monde aime Docker.

Installer Docker

Si on n'utilise pas Ubuntu/Linux
On a besoin d'installer Docker.
Si on utilise Ubuntu 18
Si on n'utilise pas Ubuntu, on n'a besoin de faire ce paragraphe. Mais si on utilise Ubuntu, pour l'installater Docker du dépôt officiel, un a besoin de faire le suivant.
Si on a besoin d'enlever vieux Docker.
$ sudo apt-get remove docker docker-engine docker.io
Et installer Docker du dépôt officiel comme ça.
$ sudo apt-get update
# Pour activer connexions avec https.
$ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
# Pour télécharger une clef GPG de docker
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# Installer le dépô de Docker
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu  $(lsb_release -cs)  stable" 
$ sudo apt-get update
# Installer Docker
$ sudo apt-get install docker-ce
Vérifier si Docker était installé
Vérifier si Docker était installé comme ça sur son terminal (terminal: cmd, l'invite de commandes, powershell, bash etc).
docker --version
#Docker version 19.03.5, build 633a0ea838

Docker-compose

Docker-compose est installé avec Docker ensemble selon la page de Docker-compose. Vérifier si Docker-compose était installé comme ça.
docker-compose -v
#docker-compose version 1.24.1, build 4667896b

Utiliser Docker et Docker-compose

On va utiliser un dépôt de docker-compose de laravel.
git clone https://github.com/lechatthecat/laravel-nginx-mysql-example.git
cd laravel-nginx-mysql-example
docker-compose up -d --build
docker-compose exec laravel ash
# dans le conteneur laravel
$ sh -x ../laravel_build.sh
Et voilà! On peut voir un page de laravel ici: http://localhost:10080/ 
C'est plus facile que Vagrant et Virtual Box.



L'explication

version: '3'
services:
    # mysql 8.0
    mydb:
        image: mysql:8.0
        # mot de passe et nom de utilisateur de mysql
        environment:
            MYSQL_ROOT_PASSWORD: 'root'
            MYSQL_USER: 'root'
            MYSQL_PASS: 'root'
        ports:
            - 13306:3306
        networks:
            - app_net
        container_name: mydb
        volumes:
            # Enregistrer les données dans "Volumes" de Docker
            - db-store:/var/lib/mysql
            # Ou dans dossiers local
            # - ./docker_db_data/mysql:/var/lib/mysql
            # Où enregistrer le journal.
            - ./logs:/var/log/mysql:z
            # Où charger le my.cnf.
            - ./docker/mysql/my.cnf:/etc/mysql/conf.d/my.cnf:z
    # le conteneur de Laravel
    laravel:
        build:
            # Où se trouve le fichier "Dockerfile".
            context: .
            dockerfile: docker/laravel/Dockerfile
        working_dir: /laravel
        volumes:
            # Où se trouve le code source de laravel
            - ./laravel:/laravel
            # Si on veut utiliser shell. 
            - ./docker/laravel/laravel_build.sh:/laravel_build.sh:z
            # pour les fichiers des logs.
            - ./logs:/var/log/php
            # Où charger le php.ini.
            - ./docker/laravel/php.ini:/usr/local/etc/php/php.ini
        # Atendre que le conteneur "mydb" soit prêt.
        depends_on:
            - mydb
        container_name: laravel
        networks:
            - app_net
    # nginx 1.17
    nginx:
        # nom d'image
        image: nginx:1.17-alpine
        # Atendre que le conteneur "laravel" soit prêt.
        depends_on:
        - laravel
        ports:
        - 10080:80
        volumes:
        # Où se trouve le code source de laravel
        - ./laravel:/laravel
        # pour les fichiers des logs.
        - ./logs:/var/log/nginx
        # Où charger le default.conf.
        - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
        container_name: nginx
        networks:
            - app_net
networks:
    # Les conteneurs d'un même réseau peuvent accéder les uns aux autres en utilisant son nom de conteneur (comme nom d'hôte).
    app_net:
        driver: "bridge"
volumes:
    db-store: