🐳 A la découverte de Docker !

Laïla Atrmouh

📆 Le planning du jour :
  • Docker: A quoi ça sert ?
  • Revenir sur les concepts de base
  • REX #1 : Une application PHP avec sa petite base MySQL
  • Exercice 1 : Utiliser une application déjà dockerisée
  • Exercice 2 : Une application Node.js
  • Etapes pour dockeriser son projet RNCP
  • Conseils et ressources utiles

❓ Questions: en levant la main ou via le chat selon votre convenance

⚡ Je parle parfois vite ... N'hésitez pas à me questionner au fur et à mesure !

🤔 Vie de dev en reconversion
A quoi ressemble votre ordinateur après ces quelques mois de reconversion ?

A plus grand chose: j'ai dû changer mon ordinateur!

Plein de langages testés / tools installés: c'est le bazar

Moi ça va nickel, merci

🤔 Problème de dev
J'ai une application avec une base de données.
Un·e camarade veut contribuer à ce projet.
Comment cette personne peut récupérer le projet sur sa machine et le faire démarrer ?
Option 1: On installe tout à la main !

							# Installer un serveur de requêtes - Apache / Nginx
							apt-get install apache2

							# Installer un serveur applicatif (PHP/Node...)
							apt-get install php8.1-fpm

							# Installer composer
							php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
							php -r "if (hash_file('sha384', 'composer-setup.php') === 'dac665fdc30fdd8ec78b38b9800061b4150413ff2e3b6f88543c636f7cd84f6db9189d43a81e5503cda447da73c7e5b6') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
							php composer-setup.php
							php -r "unlink('composer-setup.php');"

							composer install wordpress
						
Option 2: Docker

						# installation de docker sur Mac - https://docs.docker.com/desktop/install/mac-install/
						sudo hdiutil attach Docker.dmg
						sudo /Volumes/Docker/Docker.app/Contents/MacOS/install
						sudo hdiutil detach /Volumes/Docker

						# On se place sur son projet dockerisé
						cd MonProjet/

						# Tada 🎉
						docker-compose up
						

Devops

Faciliter la création d'un environnement


Eviter les comportements différents d'un environnement à l'autre

Un peu de terminologie

  • Image: Paquet qui contient tout ce qui est nécessaire à une application (code, dépendances...)
  • Dockerfile: La "recette de cuisine" pour fabriquer une image
docker image ls

Un peu de terminologie

  • Registry: Serveur distant où sont stockées toutes les images (ex: DockerHub)(Dockerhub est à Docker, ce que Github est à Git)
docker push

Un peu de terminologie

  • Container: Une image en cours d'exécution
docker container ls

REX: Exemple d'une application PHP/MySQL


Application Wordpress avec PHPMyAdmin
Docker-Compose pour synchroniser le lancement des images !

							version: '3.1'

							services:

								wordpress:
									image: wordpress
									restart: always
									ports:
										- "8080:80"
									environment:
										WORDPRESS_DB_HOST: db
										WORDPRESS_DB_USER: exampleuser
										WORDPRESS_DB_PASSWORD: examplepass
										WORDPRESS_DB_NAME: exampledb
									volumes:
										- ./wordpress:/var/www/html
								db:
									image: mysql:5.7
									restart: always
									environment:
										MYSQL_DATABASE: exampledb
										MYSQL_USER: exampleuser
										MYSQL_PASSWORD: examplepass
										MYSQL_RANDOM_ROOT_PASSWORD: '1'
									volumes:
										- ./db:/var/lib/mysql
										- ./schema/:/docker-entrypoint-initdb.d

								phpmyadmin:
									image: phpmyadmin
									container_name: phpmyadmin
									restart: always
									ports:
										- 8081:80
							volumes:
								wordpress:
								db:
								schema:
								
🤹‍♀️ Démonstration !

Exercice 1: Utiliser des images Docker existantes

Tester pgAdmin et PostgreSQL, sans rien installer en local autre que Docker.

Repository

Exercice 2: Dockeriser une application Node.js

Correction - Exercice 2 : Dockerfile

🛟 Retrouver ce que chaque instruction signifie

							FROM node:lts-buster-slim

							ADD . /workdir

							WORKDIR /workdir

							EXPOSE 8888

							RUN yarn install


							CMD [ "yarn", "start" ]
						

Correction - Exercice 2 : Dockerfile

  1. Je me mets à la racine du projet (où se trouve le dockerfile)
  2. Je build l'image avec la commande
    docker build -t node-api-sample .
  3. Je run l'image dans un container
    docker run -dp 127.0.0.1:8888:8888 node-api-sample
🤹‍♀️ Démonstration !

Merci! 🙏

Vos feedbacks seront appréciés :)