/ Serveur nginx, apache, php et mysql full docker

Créer un serveur Nginx + Apache + Php + MySql - avec Docker Partie 1

Pourquoi ?

Depuis peu, j’ai commencé à cumuler énormément d'applications et de services sur mon serveur. Le soucis qui s’est très rapidement posé est, la difficulté de maintenir tous mes services et apps sans les impacter à la première modification. Le moindre changement devenait de plus en plus difficile à gérer, me menant parfois même à détruire mon serveur et revenir à une sauvegarde fonctionnelle antérieure…
Ne mentez pas ! Je suis sûr que c’est du vécu pour vous aussi !?
Pour pallier ces inconvénients, j’ai décidé de “dockeriser” toutes mes applications, services et engine.

⚠️ Pré-requis

  • Une machine sous Windows, Linux ou Mac OS.
  • Docker installé sur la machine.
  • Docker-compose installé sur la machine.

Voici les tutoriels officiels d'installation : docker et docker-compose

Voici le projet terminé sur github pour une overview ou pour les plus pressés d'entre vous.

Rythme de publication

Je souhaiterai dans la mesure du possible vous partager une publication par semaine. Le projet avancerait pas à pas au rythme de ces publications.

Ok Docker, qu’est-ce que ça change ?

Docker permet une certaine flexibilité qui m’a séduite dès le départ, son principe est simple : isoler une application et ses dépendances au sein d’une grosse boite noire que l’on peut appeler un “Container”.
Mais du coup qu’est-ce que cela va nous apporter ? Beaucoup de modularité ! En effet nous allons être capable de construire nos architectures comme avec des legos !
Les containers peuvent fonctionner ensemble ou seul dans leurs coins. La principale force des containers, c’est de pouvoir être installé, désinstallé et mis à jour de façon très simple. Le service contenu dans le container n’étant plus lancé et installé sur la machine brut, il devient très simple de les gérer comme des blocs de lego.

Un petit exemple avant d’entrer dans le vif du sujet :
commande_docker_sosnoob.com
Avec simplement la commande docker ps, vous obtenez la liste de tous les containers qui tournent actuellement sur votre serveur. C’est pas beau ça ? Moi qui m’embêtait avec le sudo service service_name status😒.

Le DockerHub

Le dockerhub est un peu comme un github mais pour les dockers, vous avez accès à pleins d’images de service utilisable pour vos projets. C’est d’ailleurs depuis celui-ci que nous allons récupérer les images nécessaires à notre serveur full docker ! Evidemment vous pouvez aussi créer vos propres images, mais nous verront cela plus tard.
Avec docker vous pouvez avoir un environnement web en un claquement de doigts, une simple commande vous permet d’installer et lancer un container contenant un serveur web nécessaire à votre site internet (dans le cas présent “Apache”) :

$ docker run -dit --name my-apache-app -p 8080:80 httpd:2.4

Et hop ! Votre serveur web est téléchargé et lancé, essayé d’accéder à votre localhost:8080 et vous verrez s’afficher le message de bienvenu d’apache 😃.

Le dockerfile

Docker permet également de construire des images optimisées et complexe qui deviendront par la suite des containers grâce au “Dockerfile”.
Dockerfile est un fichier de configuration qui permet de construire une image précise en fonction de nos besoins. On pourra y spécifier :

  1. Les versions du service voulu.
  2. Les dossiers à partager avec l’instance du container une fois en route.
  3. Les fichiers à ajouter au container (par exemple un virtualhost apache pré-fait).

Sur votre serveur n’oubliez pas d’ajouter votre utilisateur au groupe “docker” pour ne pas avoir à faire de sudo devant chaque commande !

Docker-compose

Docker-compose va encore plus loin que l'utilisation du Dockerfile. Celui-ci permet en plus de construire une image optimisée, de construire un groupe de containers et de les faire interagir entre eux. Imaginez le nombre de stack que l'on pourrait construire, réutiliser et déployer en 3 commandes ! 😱

apache:
    image: php:apache
    volumes:
    - "src/:/var/www/html"
    links:
    - mysql
    ports:
    - "8080:80"
    privileged: true

mysql:
    image: mysql:latest
    environment:
        MYSQL_ROOT_PASSWORD: passroot

Voici un exemple de stack docker-compose, elle vous permet de lancer Apache, PHP et MySQL avec 1 commande. Vous pouvez même configurer dedans les mdp et pseudo de chaque application avant son lancement.

Conclusion

Voilà tout pour ce premier article d'introduction à docker et ses composantes, nous avons vu à quoi va nous servir docker dans ce projet et globalement comment il s'articulait.
Dans le prochain article, nous allons nous concentrer sur la partie architecture de notre futur serveur en full docker.

Si vous êtes toujours chaud bouillant c'est ici que ça se passe pour la suite

Zakaria Rachedi

Zakaria Rachedi

Apprendre sans oublier, c'est impossible. Alors, pourquoi ne pas immortaliser ses connaissances et en profiter pour les partager, tel a été mon souhait lors de la création de sosnoob.

Read More