Se rendre directement au contenu
Cover Image for Le monde du Docker

Le monde du Docker

Guillaume André
Guillaume André
3 min
AstucesDéveloppement

Avant Docker nous utilisions principalement des machines virtuelles pour développer, ou déployer nos applications. C’est en 2013 qu’il est venu chambouler l’éco-système DevOps. Docker est un outil efficient capable d’empaqueter une application et ses dépendances dans un conteneur isolé, et en plus, il peut être exécuté sur n’importe quel serveur ou machine. Alors découvrons le monde du Docker !

D’un point de vue technique, Docker est Platform as a Service (PaaS). À la base du projet, il reposait sur LXC (Linux container) pour gérer un environnement virtuel. C’est en 2014 que ses concepteurs ont tout réécrit de zéro en langage GO. C’est un projet Open Source. Parmis ces alternatives, nous comptons CoreOS rkt .

Ça sert à quoi ?

Docker est une plateforme qui permet d’exécuter du code à l’intérieur d’un conteneur indépendamment de la machine sur laquelle vous êtes.

Un conteneur ressemble à une machine virtuelle sauf qu’il n’embarque pas tout un système d’exploitation avec lui ce qui lui permet de s’exécuter en quelque secondes et d’être beaucoup plus léger.

Avec cet outil, vous n’avez plus besoin d’installer une machine virtuelle de zéro, son système d’exploitation et ses technologies. C’est particulièrement utile si vous travaillez à plusieurs développeurs, il en effet très facile d’uniformiser l’environnement de votre choix pour qu’il soit identique pour tout le monde. (version de PHP, MySQL, etc…). Que vous soyez sur MacOS, Linux ou Windows, vous pouvez avoir tous le même environnement de projet ! Cela évitera les mauvaises surprises… A noter que depuis quelques années, il peut d’ailleurs être utilisé directement en production.

J’ai besoin de quoi pour commencer ?

Comment créer mon environnement de développement PHP/MySQL ?

Pré-requis :

Pour créer votre propre environnement personnalisé, il faut commencer par installer Docker mais aussi docker-compose qui va vous permettre de lancer tout l’environnement via un fichier (XML / YML) unique docker-compose.yml

Vous trouverez le lien d’installation de docker-compose, ci-après : https://docs.docker.com/compose/install/

Exemple de docker-compose.yml pour un environnement PHP/MySQL/Nginx

version: “3”

services:

  #PHP Service

  app:

build:

   context: .

   dockerfile: Dockerfile ——————————-> Fichier Docker pour générer une image Docker

image: digitalocean.com/php

container_name: app_dashboard

restart: unless-stopped

tty: true

volumes:

   – ./:/var/www

   – ./docker/php/local.ini:/usr/local/etc/php/conf.d/local.ini

networks:

   – app-network-exemple

  #Nginx Service

  webserver:

image: nginx:alpine

container_name: webserver_exemple

restart: unless-stopped

tty: true

ports:

   – “8092:80”

   – “5440:443”

volumes:

   – ./:/var/www

   – ./docker/nginx/conf.d/:/etc/nginx/conf.d/

networks:

   – app-network-exemple

  #MySQL Service

  db:

image: mysql:8.0.17

container_name: db_exemple

restart: unless-stopped

tty: true

ports:

   – “3312:3306”

environment:

   MYSQL_DATABASE: exemple

   MYSQL_ROOT_PASSWORD: exemple

   MYSQL_ROOT_HOST: ‘%’

   MYSQL_PASSWORD: exemple

   MYSQL_USER: exemple

volumes:

   – dbdata_exemple/var/lib/mysql/

   – ./docker/mysql/my.cnf:/etc/mysql/my.cnf

networks:

   – app-network-exemple

  phpmyadmin:

image: phpmyadmin/phpmyadmin

container_name: phpmyadmin_exemple

ports:

   – “7012:80”

links:

   – db:db

environment:

   MYSQL_USER: exemple

   MYSQL_PASSWORD: exemple

   MYSQL_ROOT_PASSWORD: exemple

networks:

   – app-network-exemple

#Docker Networks

networks:

  app-network-exemple:

driver: bridge

#Volumes

volumes:

  dbdata_exemple:

driver: local

Et le Dockerfile associé :

FROM php:7.2-fpm

# Copy composer.lock and composer.json

COPY composer.lock composer.json /var/www/

# Set working directory

WORKDIR /var/www

# Install dependencies

RUN apt-get update && apt-get install -y \

build-essential \

libpng-dev \

libjpeg62-turbo-dev \

libfreetype6-dev \

locales \

zip \

jpegoptim optipng pngquant gifsicle \

vim \

unzip \

git \

curl \

libgmp-dev

# Clear cache

RUN apt-get clean && rm -rf /var/lib/apt/lists/*

RUN ln -s /usr/include/x86_64-linux-gnu/gmp.h /usr/include/gmp.h

# Install extensions

RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl bcmath gmp

RUN docker-php-ext-configure gd –with-gd –with-freetype-dir=/usr/include/ –with-jpeg-dir=/usr/include/ –with-png-dir=/usr/include/

RUN docker-php-ext-install gd

# Install composer

RUN curl -sS https://getcomposer.org/installer | php — –install-dir=/usr/local/bin –filename=composer

# Add user for laravel application

RUN groupadd -g 1000 www

RUN useradd -u 1000 -ms /bin/bash -g www www

# Copy existing application directory contents

COPY . /var/www

# Copy existing application directory permissions

COPY –chown=www:www . /var/www

# Change current user to www

USER www

# Expose port 9000 and start php-fpm server

EXPOSE 9000

CMD [“php-fpm”]

A partir de là, c’est simple, la commande magique : docker-compose up -d

Cette commande va télécharger les images dans le dockerHub et générer une image via le fichier DockerFile.

Une fois l’installation terminée et le Docker lancé, exécuter la commande docker ps pour visualiser la liste des dockers en cours d’exécution.

Vous trouverez ci-après une liste des commandes docker et docker-compose à connaître : https://www.padok.fr/blog/docker-docker-compose-commandes-connaitre

Je n’aime pas la ligne de commande ?

Si vous n’êtes pas fan de la ligne de commande, il y a des outils pour vous aider à gérer vos dockers en local. Vous pouvez installer Kitematic ou Portainer.

Pour les plus aguerris du mode console :

Pour terminer…

L’évolution du monde Docker est grandissante, support de VMware, support de Microsoft Azure mais aussi support de Amazon AWS. Cette mouvance a permit l’émergence de nouveaux outils orientés infrastructures tels que Rancher (Orchestration de Docker), Kubernetes, etc.

Il est devenu assez facile de mettre en place des solutions en haute disponibilité. Cela est aussi facilité par les Cloud Provider, AWS, GCP, DigitalOcean, etc…  qui proposent des offres Kubernetes managées voir même l’approche Cloud Native Application Bundle ou CNAB. Mais cela fera l’objet d’un prochain article !

Partager sur :

Vous serez peut-être aussi intéressé par :

Cover Image for Rejoignez WEX IT en tant que Développeur Fullstack !

Rejoignez WEX IT en tant que Développeur Fullstack !

Vous êtes passionné(e) par le développement et vous cherchez un défi excitant dans le domaine du e-commerce ? Vous êtes au bon endroit ! WEX IT, une agence spécialisée dans les solutions front, headless et e-commerce à fort engagement, recherche activement un(e) développeur(se) Fullstack pour rejoindre son équipe expérimentée. Qui sommes-nous ? Nous sommes une […]

Guillaume André
Guillaume André
Cover Image for Livre blanc gratuit : Tendances du commerce électronique B2B 2024

Livre blanc gratuit : Tendances du commerce électronique B2B 2024

Intershop, notre partenaire ecommerce B2B, vient enfin de publier ses tendances technologiques pour le ecommerce en 2025. Sans surprise, l’intégration des technologies d’IA y prend une part importante, mais pas que… C’est pourquoi nous ne pouvons que vous recommander de vous atteler à la lecture de ce livre blanc indispensable. Les 7 tendances du ecommerce […]

Olivier Sauvage
Olivier Sauvage