Docker CE + Compose — Installation officielle

Installe Docker CE et le plugin Compose depuis le dépôt officiel Docker. Ajoute l'utilisateur courant au groupe docker et configure le daemon pour un usage optimal.

dockerdevopsconteneurscompose
$ curl scripts.ysavary.fr/docker | bash

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 :

Variable optionnelle :

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 ""