A propos
Docker est une technologie qui permet de créer des environnements isolés appelés conteneurs pour exécuter des applications de manière portable sur des machines hétérogènes. La portabilité et l’utilisation efficace des ressources sont les avantages des conteneurs. Bien que les conteneurs ne soient pas conçus comme un mécanisme de confinement sécurisé, ils permettent un isolement efficace des ressources. Pour effectuer cette isolation, docker fait usage de fonctionnalités du noyau Linux : les cgroups et les namespaces.
Les cgroups, ou groupes de contrôle, sont une fonctionnalité de Linux qui permet de limiter et de répartir les ressources système entre les différents processus. Docker utilise les cgroups pour allouer les ressources du système, telles que la CPU, la mémoire, le disque, etc., aux conteneurs. En utilisant les cgroups, Docker peut garantir que les conteneurs ne monopolisent pas toutes les ressources du système et peuvent coexister avec d’autres applications et processus.
Les namespaces sont une autre fonctionnalité de Linux qui permet d’isoler les ressources système, tels que les processus, les utilisateurs, les fichiers, les réseaux, etc. Docker utilise les namespaces pour créer un environnement isolé pour chaque conteneur. Chaque conteneur dispose de son propre espace de noms, ce qui signifie qu’il a sa propre vision du système, distincte des autres conteneurs et du système hôte.
Docker permet d’empaqueter une application dans une image, distribuer cette image et lancer des conteneurs à partir de cette image. Les images sont constituées de couches (layers) qui permettent de réutiliser le travail déjà effectué, de transférer moins de données et d’économiser de la bande passante.
Cependant, les images créées par Docker peuvent être trop permissives et ne pas être correctes par défaut. L’orchestration de conteneurs, la sécurité et la création de bonnes images nécessitent de l’expérience. Dans certains cas, il peut être préférable de ne pas utiliser Docker même si cela est possible.
Initialisation
Pour créer le groupe docker et ajouter votre utilisateur
Créer le groupe docker :
sudo groupadd docker
Ajoutez votre utilisateur au groupe docker :
sudo usermod -aG docker $USER
Déconnectez-vous et reconnectez-vous pour que votre appartenance à un groupe soit réévaluée. Si vous exécutez Linux dans une machine virtuelle, il peut être nécessaire de redémarrer la machine virtuelle pour que les changements prennent effet. Vous pouvez également exécuter la commande suivante pour activer les modifications apportées aux groupes :
newgrp docker
Verify that you can run docker commands without sudo :
docker run hello-world
Le groupe docker accorde des privilèges root à l’utilisateur
Docker
Lancer un container en tant qu’utilisateur (non-root)
docker container run --user <uid>:<gid> <image>
Lister les containers
docker ps
docker ps -a
IP d’un container
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <container>
Session interactif
docker exec -it <container> <command>
docker exec -it <container> /bin/bash
Copier un fichier/dossier d’un container vers la machine hôte
docker cp <container>:/src/path/ /host/path
Créer une image depuis un container
docker commit <container> <image>
Docker Compose
Lancer un fichier docker-compose.yml
docker compose up
docker compose up -d
Container en tant qu’utilisateur (non-root) :
version: "3.8"
services:
app:
user: <uid>:<gid>
sysctls:
net.ipv4.ip_unprivileged_port_start: 0 # port binding issue
# /!\ the user will be $HOME-less and nameless
Users
Créer un groupe
sudo groupadd -g <gid> <group-name>
Créer un utilisateur
sudo useradd <username> -u <uid> -g <gid>
sudo useradd <username> -u <uid> -m -s /bin/bash # make home directory & set shell
Supprimer un utilisateur
sudo userdel <username>