Docker CE + Compose
Installe Docker CE depuis le dépôt officiel (pas la version Debian qui est souvent obsolète) + le plugin docker compose.
Ce que fait le script :
- Supprime les éventuelles vieilles versions (
docker.io,docker-compose) - Ajoute le dépôt officiel Docker pour Debian/Ubuntu
- Installe
docker-ce,docker-ce-cli,containerd.io,docker-compose-plugin - Configure le daemon (
/etc/docker/daemon.json) : log rotation, driver overlay2 - Ajoute l'utilisateur courant (ou
DOCKER_USER) au groupedocker - Vérifie l'install avec
docker run hello-world
Variable optionnelle :
DOCKER_USER— utilisateur à ajouter au groupe docker (défaut : utilisateur qui a lancé sudo)
bash
#!/bin/bash
set -euo pipefail
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; NC='\033[0m'
info() { echo -e "${GREEN}[INFO]${NC} $*"; }
warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
error() { echo -e "${RED}[ERR]${NC} $*"; exit 1; }
[[ $EUID -ne 0 ]] && error "Ce script doit être exécuté en root."
DOCKER_USER="${DOCKER_USER:-${SUDO_USER:-}}"
OS=$(grep -oP '(?<=^ID=).+' /etc/os-release | tr -d '"')
CODENAME=$(grep -oP '(?<=^VERSION_CODENAME=).+' /etc/os-release)
[[ "$OS" =~ ^(debian|ubuntu|raspbian)$ ]] || error "OS non supporté : $OS"
# ── Suppression des anciennes versions ────────────────────────────────────────
info "=== Étape 1/5 — Suppression des anciennes versions ==="
for pkg in docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc; do
apt-get remove -y "$pkg" 2>/dev/null || true
done
# ── Dépôt officiel Docker ─────────────────────────────────────────────────────
info "=== Étape 2/5 — Ajout du dépôt Docker ==="
apt-get update -qq
apt-get install -y ca-certificates curl gnupg
install -m 0755 -d /etc/apt/keyrings
curl -fsSL "https://download.docker.com/linux/${OS}/gpg" \
| gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/${OS} ${CODENAME} stable" \
> /etc/apt/sources.list.d/docker.list
apt-get update -qq
# ── Installation ──────────────────────────────────────────────────────────────
info "=== Étape 3/5 — Installation de Docker CE ==="
apt-get install -y \
docker-ce \
docker-ce-cli \
containerd.io \
docker-buildx-plugin \
docker-compose-plugin
# ── Configuration du daemon ───────────────────────────────────────────────────
info "=== Étape 4/5 — Configuration du daemon ==="
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<'EOF'
{
"storage-driver": "overlay2",
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"default-ulimits": {
"nofile": {
"name": "nofile",
"soft": 65536,
"hard": 65536
}
}
}
EOF
systemctl enable --now docker
systemctl restart docker
# ── Groupe docker ─────────────────────────────────────────────────────────────
info "=== Étape 5/5 — Groupe et vérification ==="
if [[ -n "$DOCKER_USER" ]]; then
usermod -aG docker "$DOCKER_USER"
info "Utilisateur '$DOCKER_USER' ajouté au groupe docker."
warn "Reconnecte-toi ou lance : newgrp docker"
else
warn "Aucun utilisateur détecté (DOCKER_USER vide). Ajouter manuellement : usermod -aG docker <user>"
fi
docker run --rm hello-world 2>&1 | grep -E '(Hello|error)' || true
echo ""
info "=== Docker installé ==="
echo ""
printf " %-20s %s\n" "Docker Engine :" "$(docker version --format '{{.Server.Version}}' 2>/dev/null || echo 'N/A')"
printf " %-20s %s\n" "Docker Compose :" "$(docker compose version 2>/dev/null || echo 'N/A')"
echo ""
echo " Commandes utiles :"
echo " docker ps -a — liste des conteneurs"
echo " docker compose up -d — démarrer un compose"
echo " docker system prune -af — nettoyer tout"
echo " systemctl status docker — état du service"
echo ""