Docker le mémo

Guide d'utilisation basique de Docker

Installation

Installer le paquet officiel

1sudo apt-get install docker.io

Ajouter son user au groupe docker (pour éviter les sudo)

1sudo usermod -aG docker $USER

/!\ fermer/ouvrir la session

Lancer le service + au démarrage

1sudo systemctl start docker
2sudo systemctl enable docker

Gérer les images et les conteneurs

Définitions:

  • Dockerfile: script décrivant les étapes pour construire une image (OS + provisionnement). Chaque instruction génère une image intermédiaire: un "layer"
  • Image: "Dockefile compilé", peut-être une composition de plusieurs images (les layers)
  • Conteneur: c'est une instance d'une image. On peut instancier plusieurs conteneurs à partir d'une image. On peut se connecter en SSH à un conteneur.

Lister les images installées localement

1docker images

Voir les conteneurs locaux actifs

1docker ps

Voir tous les conteneurs

1docker ps -a

Lister tous les IDs des conteneurs

1docker ps -aq

Arrêter tous les conteneurs actifs

1docker stop $(docker ps -aq)

Effacer tous les conteneurs

1docker rm $(docker ps -aq)

Effacer toutes les images

1docker rmi $(docker images -q)

Schéma Docker

Exemple pratique

On va lancer une mini app de chat en node.js + SQLite, le tout conteneurisé

récupérer le dépôt de test

1git clone https://github.com/aerogus/chat
2cd chat

construire l'image (compile, récupère les dépendances...) et la nommer "chat" avec le tag "1.0" "." signifie cherche un .Dockerfile dans le répertoire courant

1docker build --tag chat:1.0 .

Créer un conteneur à partir de l'image

1docker create --name chat chat:1.0

Lancer le conteneur, nommé "chat-container", à partir de l'image "chat", tag "1.0" le port 6667 du conteneur est mappé sur le port 80 de l'hôte

1docker run -p 80:6667 --name "chat-container" chat:1.0

Tester l'app avec un navigateur

1firefox http://localhost

Dans un contexte de production, on pourrait remplacer 80 par 1234, utiliser un nginx en reverse proxy pour qu'un virtualhost particulier soit mappé sur ce port, donc cette app.

comments powered by Disqus