Add Docker CE installer

This commit is contained in:
2026-05-22 13:46:19 +02:00
parent 6986bb6e15
commit 1e82b3c35c
2 changed files with 229 additions and 7 deletions
+44 -7
View File
@@ -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. Chaque partie est facultative. Il est donc possible de modifier uniquement le hostname, uniquement le reseau, ou les deux.
## 🧰 Fichier principal ## 🧰 Scripts disponibles
```text | Script | Role |
configure-debian-network.sh | --- | --- |
``` | `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` - 📄 `/etc/network/interfaces`
- ⚙️ le service `networking` - ⚙️ 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. Il ne vise pas les postes avec NetworkManager, interface graphique ou gestion reseau desktop.
## 🚀 Utilisation ## 🚀 Utilisation reseau
Configurer la base reseau :
```bash ```bash
sudo ./configure-debian-network.sh sudo ./configure-debian-network.sh
``` ```
Le script demande les informations une par une : Le script reseau demande les informations une par une :
```text ```text
Nom de la machine (laisser vide pour ne pas modifier): 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 | | 🛠️ Modifier hostname et reseau | Renseigner toutes les informations |
| 💤 Ne rien changer | Laisser hostname et IP vides | | 💤 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 ## 🛟 Sauvegardes
Avant modification, le script sauvegarde les fichiers concernes avec un suffixe date : Avant modification, le script sauvegarde les fichiers concernes avec un suffixe date :
@@ -73,6 +109,7 @@ Verification syntaxique :
```bash ```bash
bash -n configure-debian-network.sh bash -n configure-debian-network.sh
bash -n install-docker-ce.sh
``` ```
Verification manuelle recommandee apres execution : Verification manuelle recommandee apres execution :
+185
View File
@@ -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 <<EOF
Types: deb
URIs: https://download.docker.com/linux/debian
Suites: ${VERSION_CODENAME}
Components: stable
Architectures: ${architecture}
Signed-By: /etc/apt/keyrings/docker.asc
EOF
}
# Installe Docker CE, ses plugins officiels et containerd depuis le depot Docker.
install_docker_packages() {
info "Installation de Docker CE."
apt-get update
apt-get install -y \
docker-ce \
docker-ce-cli \
containerd.io \
docker-buildx-plugin \
docker-compose-plugin
}
# Active et demarre le service Docker.
enable_docker_service() {
info "Activation et demarrage du service Docker."
systemctl enable --now docker
}
# Ajoute un utilisateur au groupe docker si l'option est demandee.
add_user_to_docker_group() {
local target_user="$1"
if [[ -z "${target_user}" ]]; then
return 0
fi
if ! id "${target_user}" >/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 "$@"