From 1e82b3c35c4f23a406d674269cf4fb5ab2699671 Mon Sep 17 00:00:00 2001 From: Olivier Date: Fri, 22 May 2026 13:46:19 +0200 Subject: [PATCH] Add Docker CE installer --- README.md | 51 ++++++++++-- install-docker-ce.sh | 185 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 229 insertions(+), 7 deletions(-) create mode 100755 install-docker-ce.sh diff --git a/README.md b/README.md index 019aa83..b7692d5 100644 --- a/README.md +++ b/README.md @@ -18,13 +18,14 @@ Ce depot contient un script interactif permettant de configurer les premiers par Chaque partie est facultative. Il est donc possible de modifier uniquement le hostname, uniquement le reseau, ou les deux. -## ๐Ÿงฐ Fichier principal +## ๐Ÿงฐ Scripts disponibles -```text -configure-debian-network.sh -``` +| Script | Role | +| --- | --- | +| `configure-debian-network.sh` | Configurer le hostname, l'IP statique, la gateway et les DNS | +| `install-docker-ce.sh` | Installer Docker CE depuis le depot officiel Docker | -Le script cible une installation serveur Debian classique utilisant : +Le script reseau cible une installation serveur Debian classique utilisant : - ๐Ÿ“„ `/etc/network/interfaces` - โš™๏ธ le service `networking` @@ -32,13 +33,15 @@ Le script cible une installation serveur Debian classique utilisant : Il ne vise pas les postes avec NetworkManager, interface graphique ou gestion reseau desktop. -## ๐Ÿš€ Utilisation +## ๐Ÿš€ Utilisation reseau + +Configurer la base reseau : ```bash sudo ./configure-debian-network.sh ``` -Le script demande les informations une par une : +Le script reseau demande les informations une par une : ```text Nom de la machine (laisser vide pour ne pas modifier): @@ -54,6 +57,39 @@ Exemples de cas d'usage : | ๐Ÿ› ๏ธ Modifier hostname et reseau | Renseigner toutes les informations | | ๐Ÿ’ค Ne rien changer | Laisser hostname et IP vides | +## ๐Ÿณ Installation Docker CE + +Installer Docker CE depuis le depot officiel Docker : + +```bash +sudo ./install-docker-ce.sh +``` + +Installer Docker CE et ajouter un utilisateur au groupe `docker` : + +```bash +sudo ./install-docker-ce.sh olivier +``` + +Le script Docker effectue les actions suivantes : + +- ๐Ÿงน suppression des anciens paquets Docker conflictuels si presents ; +- ๐Ÿ”‘ ajout de la cle GPG officielle Docker dans `/etc/apt/keyrings/docker.asc` ; +- ๐Ÿ“ฆ ajout du depot APT officiel via `/etc/apt/sources.list.d/docker.sources` ; +- ๐Ÿณ installation de `docker-ce`, `docker-ce-cli` et `containerd.io` ; +- ๐Ÿงฉ installation des plugins `docker-buildx-plugin` et `docker-compose-plugin` ; +- โš™๏ธ activation et demarrage du service `docker`. + +Verification apres installation : + +```bash +docker --version +docker compose version +systemctl status docker +``` + +Si un utilisateur est ajoute au groupe `docker`, il doit ouvrir une nouvelle session avant de pouvoir utiliser Docker sans `sudo`. + ## ๐Ÿ›Ÿ Sauvegardes Avant modification, le script sauvegarde les fichiers concernes avec un suffixe date : @@ -73,6 +109,7 @@ Verification syntaxique : ```bash bash -n configure-debian-network.sh +bash -n install-docker-ce.sh ``` Verification manuelle recommandee apres execution : diff --git a/install-docker-ce.sh b/install-docker-ce.sh new file mode 100755 index 0000000..c017aaf --- /dev/null +++ b/install-docker-ce.sh @@ -0,0 +1,185 @@ +#!/usr/bin/env bash +# SPDX-License-Identifier: AGPL-3.0-only +set -euo pipefail + +if [[ "${EUID}" -ne 0 ]]; then + echo "Ce script doit etre lance en root." + echo "Exemple: sudo $0" + exit 1 +fi + +# Affiche un message d'information standardise. +info() { + printf '[INFO] %s\n' "$*" +} + +# Affiche un message d'erreur standardise sur stderr. +error() { + printf '[ERREUR] %s\n' "$*" >&2 +} + +# Demande une confirmation explicite avant d'installer ou modifier des paquets. +confirm() { + local answer + + read -r -p "Installer Docker CE depuis le depot officiel Docker ? [y/N]: " answer + [[ "${answer}" =~ ^[yY]$ ]] +} + +# Verifie qu'une commande requise est disponible. +require_command() { + local command_name="$1" + + if ! command -v "${command_name}" >/dev/null 2>&1; then + error "Commande introuvable: ${command_name}" + exit 1 + fi +} + +# Charge les informations de version Debian depuis /etc/os-release. +load_os_release() { + if [[ ! -r /etc/os-release ]]; then + error "Impossible de lire /etc/os-release." + exit 1 + fi + + # shellcheck disable=SC1091 + . /etc/os-release + + if [[ "${ID:-}" != "debian" ]]; then + error "Systeme non supporte: ${PRETTY_NAME:-inconnu}. Ce script cible Debian." + exit 1 + fi + + if [[ -z "${VERSION_CODENAME:-}" ]]; then + error "VERSION_CODENAME est introuvable dans /etc/os-release." + exit 1 + fi +} + +# Supprime les anciens paquets Docker non officiels qui peuvent entrer en conflit. +remove_conflicting_packages() { + local packages=( + docker.io + docker-compose + docker-doc + podman-docker + containerd + runc + ) + + info "Suppression des anciens paquets Docker potentiellement conflictuels." + apt-get remove -y "${packages[@]}" +} + +# Installe les pre-requis necessaires au depot APT officiel Docker. +install_prerequisites() { + info "Installation des pre-requis APT." + apt-get update + apt-get install -y ca-certificates curl +} + +# Ajoute la cle GPG officielle Docker et le fichier docker.sources. +configure_docker_repository() { + local architecture + + architecture="$(dpkg --print-architecture)" + + info "Configuration du depot officiel Docker pour Debian ${VERSION_CODENAME} (${architecture})." + install -m 0755 -d /etc/apt/keyrings + curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc + chmod a+r /etc/apt/keyrings/docker.asc + + cat > /etc/apt/sources.list.d/docker.sources </dev/null 2>&1; then + error "Utilisateur introuvable: ${target_user}" + exit 1 + fi + + info "Ajout de ${target_user} au groupe docker." + usermod -aG docker "${target_user}" + info "L'utilisateur devra ouvrir une nouvelle session pour utiliser Docker sans sudo." +} + +# Affiche les versions installees pour confirmer l'installation. +show_versions() { + info "Versions installees:" + docker --version + docker compose version +} + +# Orchestre l'installation complete de Docker CE. +main() { + local target_user="${1:-}" + + require_command apt-get + require_command curl + require_command dpkg + require_command systemctl + load_os_release + + echo "Installation Docker CE pour Debian ${VERSION_CODENAME}" + echo + echo "Ce script va:" + echo " - supprimer les anciens paquets Docker conflictuels si presents" + echo " - ajouter le depot officiel Docker" + echo " - installer docker-ce, docker-ce-cli, containerd.io, buildx et compose" + echo " - activer et demarrer le service docker" + if [[ -n "${target_user}" ]]; then + echo " - ajouter l'utilisateur ${target_user} au groupe docker" + fi + echo + + if ! confirm; then + echo "Annule." + exit 0 + fi + + remove_conflicting_packages + install_prerequisites + configure_docker_repository + install_docker_packages + enable_docker_service + add_user_to_docker_group "${target_user}" + show_versions + + echo + info "Installation terminee." +} + +main "$@"