BRE03

Introduction à Docker

Les contenus du cours BRE03 Web Dev Course © 2024 par Mari Doucet sont sous licence CC BY-NC-SA 4.0

Présentation de Docker

Un peu d’histoire

Docker est à la base un projet interne de l’entreprise française dotCloud, qui proposait une plateforme de mise en Cloud. La première version Open Source de Docker a été publiée en 2013.

Qu’est-ce que c’est ?

Docker est une plateforme qui permet d’exécuter des applications en les plaçant dans des conteneurs logiciels.

Et en langage compréhensible ?

En simplifié, plutôt que de devoir, à chaque fois, installer toute une stack technique sur chaque machine voulant travailler sur un projet, on utilise un container, qui va contenir cette stack technique préconfigurée et on lance le container plutôt que de faire de multiples installations.

Le problème que Docker aide à résoudre

Une des problématiques principales lorsqu’une équipe de développement n’a pas un matériel strictement identique, c’est d’uniformiser les configurations.

À plus forte raison lorsque cette équipe doit travailler pour différents projets dont les configurations ne sont pas nécessairement identiques.

Docker permet d’uniformiser tout ça.

Exemple

Mon projet doit pouvoir tourner sur un serveur RedHat, avec Nginx et la version 7.4 de PHP : c’est la configuration du serveur du client. Problème : aucun de mes devs n’est sur RedHat (J’ai 2 devs sous Debian, et 2 sous MacOS, et tout le monde est à la dernière version de PHP : la 8.3).

Je vais donc créer un container Docker qui contient cette stack : RedHat + Nginx + PHP 7.4. Et chacun-e de mes devs n’aura qu’à faire tourner ce container sur son poste.

Lors du prochain projet pour un autre client, qui lui a un serveur sous Ubuntu 14.04 avec Apache 2 et PHP 5.4, je referai une autre image pour ce serveur que je ferai tourner et tous les devs pourront bosser sur le projet quelque soit leur environnement local.

Installation de Docker

Windows

Installation pour Windows

MacOS

Intel

Installation Mac Intel

Apple Silicon

Installation Mac Apple Silicon

Linux

Debian

Installation Linux Debian

Fedora

Installation Linux Fedora

Quelques configurations Docker utiles

Dans chacun de ces cas, vous devrez lancer la commande

docker-compose up

dans le dossier concerné ou

docker-compose up -d 

Si vous voulez que la commande tourne en fond sans nécessairement voir tous les logs.

Stack LAMP (Linux, Apache, MySQL, PHP, PHPMyAdmin)

Un très bon repo GitHub pour une stack LAMP configurable est dispo ici

WordPress

docker-compose.yml

services:
  db:
    image: mysql:5.7
    volumes:
      - db_bre03_data:/var/lib/mysql
    restart: always
    platform: linux/x86_64
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: bre03_db
      MYSQL_USER: bre03
      MYSQL_PASSWORD: password

  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    volumes:
      - .:/var/www/html/wp-content/
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: bre03
      WORDPRESS_DB_PASSWORD: password
      WORDPRESS_DB_NAME: bre03_db
      WORDPRESS_PASSWD: WggZIYN33wkMeG&nq*

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    ports:
      - "8080:80"
    environment:
      - PMA_HOST=db

volumes:
  db_bre03_data: {}

Symfony avec MySQL

Par défaut Symfony propose de tourner avec un container PostgreSQL, si vous voulez utiliser MySQL voici la configuration à changer dans les fichiers fournis par Symfony et le contenu de votre .env.local.

compose.yaml

services:
  database:
    image: 'mysql:latest'
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: main
    ports:
      # To allow the host machine to access the ports below, modify the lines below.
      # For example, to allow the host to connect to port 3306 on the container, you would change
      # "3306" to "3306:3306". Where the first port is exposed to the host and the second is the container port.
      # See https://docs.docker.com/compose/compose-file/compose-file-v3/#ports for more information.
      - '3306:3306'
###< doctrine/doctrine-bundle ###

volumes:
  ###> doctrine/doctrine-bundle ###
  database_data:
###< doctrine/doctrine-bundle ###

compose.override.yaml

services:
  ###> doctrine/doctrine-bundle ###
  database:
    ports:
      - "3306"
###< doctrine/doctrine-bundle ###

.env.local

DATABASE_URL="mysql://root:password@127.0.0.1:3306/main?serverVersion=8.0.32&charset=utf8mb4"