Skip to content

Docker

Docker

Tip

L'écosystème Docker - Docker Hub : Le registre officiel pour trouver des images. - Hadolint : Un linter pour Dockerfiles qui vous aide à suivre les bonnes pratiques. - Composerize : Convertissez vos commandes docker run en docker-compose.yml.

Commande de base

Lister des dockers :

sudo docker container ls -a

supprime le cache

sudo docker system prune -a

Activer le redémarrage automatique d'un conteneur

sudo docker update --restart unless-stopped container_id

Exécuter des commande dans un conteneur

sudo docker exec -i -t NOMDUCONTENEUR /bin/bash

Docker-compose dans un dossier différent :

sudo docker-compose -f /tmp/myproject/docker-compose.yml up -d 

Stoper tout les contneurs en même temps

docker stop $(docker ps -aq)

Lancer un conteneur alpine avec le shell

docker run -it --rm alpine /bin/sh

Docker sans être admin

Il faut le rajouter dans le groupe docker (rien de plus simple)

sudo usermod -aG docker user
newgrp docker #Pour rechercher les groupe sans se déconnecter

GPU Nvidia

Installation du driver Nvidia sur une distribution Debian:

sudo apt update
sudo apt install nvidia-driver nvidia-smi nvidia-kernel-dkms

Installation du driver Nvidia sur une distribution Redhat:

sudo dnf update
sudo dnf install -y nvidia-driver nvidia-smi

La commande installera le driver, le module noyau, le runtime et l'outil de gestion.

Avec Nvidia container toolkit

Installer Nvidia container toolkit :

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo nvidia-ctk runtime configure --runtime=docker

Note

Bien utiliser la commande nvidia-ctk pour enrigistrer le runtime nvidia

En Gpu passtrought

Ajouter ça dans le docker compose :

        deploy:
            resources:
                reservations:
                    devices:
                    - driver: nvidia
                      capabilities: ["gpu"]
                      count: 1

Exemple de conteneur

Watchtower : Permet d'automatiquement mettre à jour les conteneurs :

sudo docker run -d \
    --name watchtower \
    -v /var/run/docker.sock:/var/run/docker.sock \
    --restart unless-stopped \
    containrrr/watchtower

Mise a jour Automatiques de contneurs

#!/bin/bash

# Variables
SEARCH_DIR="/home"

start_update_images() {
    docker run --rm \
        --name watchtower \
        -v /var/run/docker.sock:/var/run/docker.sock \
        containrrr/watchtower \
        --run-once \
        --monitor-only
}

start_all_docker_compose() {
    echo "Recherche des fichiers docker-compose dans $SEARCH_DIR..."

    # Trouver tous les fichiers au format compose de manière récursive, en ignorant les erreurs de permission
    find "$SEARCH_DIR" -type f \( -name "docker-compose.yml" -o -name "docker-compose.yaml" -o -name "compose.yaml" -o -name "compose.yml" \) 2>/dev/null | while read -r compose_file; do
        compose_dir=$(dirname "$compose_file")
        echo "Lancement de docker-compose up -d dans : $compose_dir"
        # Se déplacer dans le répertoire et exécuter docker-compose up -d
        (cd "$compose_dir" && docker-compose up -d)
    done
}

# Exécution des fonctions
start_update_images
start_all_docker_compose

Note

Cette méthode permet de mettre à jour globalement les conteneurs de manière cohérente. L'utilisation de --monitor-only avec Watchtower permet de détecter les nouvelles images sans modifier l'état des conteneurs. Si Watchtower effectuait la mise à jour lui-même, une exécution ultérieure de docker-compose up -d déclencherait une recréation des conteneurs car l'état local de Compose ne correspondrait plus à l'image déployée. En procédant ainsi, on s'assure que Docker Compose reste l'unique gestionnaire du cycle de vie des conteneurs.

Lien utile

Composerize permet de transformer les commandes docker run par docker-compose.

Source : Composerize

Executer sans êtres sudoers

Pour ajouter les permissions :

sudo usermod -aG docker $USER