Skip to main content

📦 Containers

Docker est un logiciel qui est pas mal utilisé pour installer des services sur un serveur.

L'avantage c'est que Docker va virtualiser les services dans des genres de "mini-machine virtuelles". Ce qui permet :

  • D'avoir un environement isolĂ© et constant. Permetant de eployer quelque chose quel que soit l'Ă©tat de la machine hĂ´te.
  • Deployer des services rapidement et facilement
  • Permet une plus grande extensibilitĂ©
  • Plus sĂ©curisĂ© grace Ă  l'isolation
  • Il est aussi possible de revenir dans des Ă©tats prĂ©cĂ©dents d'un pod

C'est nottament ce qui est utilisé quand on a utilisé Gitlab-CI pour l'automatisation.

Et c'est ce que l'on va de nouveau utiliser quand on va utiliser Kubernetes pour avoir une plus grande extensibilité.

Pourquoi j'aime Docker

Il y a beaucoup d'avantages que je trouve Ă  Docker.

  • La capacitĂ© de compiler un programme sans ĂŞtre parasitĂ© par d'autres choses installĂ©es sur l'ordi (exemple versions plus rĂ©centes de certaines librairies)
  • La capacitĂ© d'avoir une vue sur toute l'infrastructure (environement, ports, domaines, images, dossiers de configuration, commandes d'installation, versions, lien avec d'autres services, etc)
  • La capacitĂ© de tester des choses sans avoir Ă  se soucier d'annuler les changements ou de brick son système.
  • Pouvoir crĂ©er des images qui fonctionne sur n'importe quel serveur tournant n'importe quel OS avec n'importe quel infrastructure (portabilitĂ©)
  • Pouvoir facilement orchestrer les diffĂ©rents services Ă  l'aide d'un simple fichier. Et mĂŞme pouvoir gĂ©rer plusieurs serveurs en mĂŞme temps.
  • Pouvoir faire facilement des backups de tout, en ayant tout dans une image sans dĂ©pendre de dĂ©pendences etc

Quelques concepts Ă  comprendre

Un volume est un moyen de rendre certaines donnĂ©es persistantes. Car quand vous re-crĂ©ez un conteneur, tout le reste sera rĂ©nitialisĂ©. Le volume lie un dossier sur la machine hĂ´te Ă  un dossier dans le conteneur. Et il y a deux types de volumes:

  • Soit le volume est dĂ©fini et gĂ©rĂ© par Docker (et se trouve donc dans /var/lib/docker/volumes) ou dans quel cas le contenu initial qui Ă©tait dans le dossier sur le conteneur prends le dessus
  • Soit le volume est un bind, c'est Ă  dire un lien direct Ă  un dossier de la machine cible. Dans quel cas le contenu initial sur la machine hĂ´te prends le dessus. Donc si le dossier/fichiers sur la machine hĂ´te n'existe pas, ils se feront aussi supprimer au moment du lancement du conteneur.

Pour utiliser un bind et quand mĂŞme faire en sorte de garder les donnĂ©es du cĂ´tĂ© conteneur, il vaut mieux alors dĂ©finir la mise en place des donnĂ©es dans le dossier au moment du entrypoint.sh (on va voir ça quand on vera la dockerization)

Un rĂ©seau est un lien entre plusieurs conteneurs qui leur permet de communiquer sans avoir besoin d'exposer les ports de ces derniers. On va en savoir plus sur le chapitre sur traefik (reverse-proxy)

Une conteneur est ce qui tourne sur Docker, un conteneur peut ĂŞtre liĂ© Ă  un volume, Ă  des rĂ©seaux, etc. Un conteneur fait tourner une image qui aura Ă©tĂ© prĂ©alablement crĂ©e.

Une image est en quelque sorte l'Ă©tat "de base" d'un conteneur. Elle contient toutes les informations initiales nĂ©cessaires, le script qui a permi de la configurer, la commande de lancement du conteneur et tous les fichiers qui y ont Ă©tĂ© ajoutĂ©. C'est une genre d'"archive" de machine virtuelle si on veut.

Un registery est un rĂ©pertoire pour y envoyer ou tĂ©lĂ©charger des images. Le plus connus de tous est le Docker Hub

Installation

Pour l'installer vous pouvez suivre les instructions suivantes (Ă©vitez Docker Desktop si possible)