# 🐳 Installer Docker dans un conteneur LXC Proxmox

Cette procédure décrit l'installation complète de Docker Engine dans un conteneur LXC hébergé sur Proxmox VE.

Elle est destinée aux services de la plateforme tels que Bitwarden, Docker Registry, Harbor, AdGuard Home ou tout autre service reposant sur Docker Compose.

---

## 🎯 Objectif

À l'issue de cette procédure, le conteneur disposera :

- de Docker Engine ;
- du plugin Docker Compose ;
- du service Docker démarré automatiquement ;
- d'un environnement prêt à héberger des applications Docker.

---

## 📋 Prérequis

- Cluster Proxmox opérationnel
- Conteneur Ubuntu créé
- Accès root au nœud Proxmox
- Accès root au conteneur
- Connexion Internet fonctionnelle

---

## 🧱 Étape 1 - Préparer le conteneur LXC

Docker nécessite des permissions supplémentaires pour fonctionner correctement dans un conteneur LXC.

### Modifier la configuration du conteneur

Depuis l'hôte Proxmox :

```bash
nano /etc/pve/lxc/<ID>.conf

```

Ajouter les paramètres suivants :

```
features: nesting=1
lxc.apparmor.profile: unconfined
lxc.cgroup2.devices.allow: a
lxc.cap.drop:

```

Remplacer `<ID>` par l'identifiant du conteneur.

---

## 🔄 Étape 2 - Redémarrer le conteneur

```bash
pct restart <ID>

```

---

## 🔐 Étape 3 - Se connecter au conteneur

```bash
pct exec <ID> -- bash

```

---

## 📦 Étape 4 - Installer les dépendances

```bash
apt update
apt upgrade -y

apt install -y \
ca-certificates \
curl \
gnupg

```

---

## 🔑 Étape 5 - Ajouter la clé GPG Docker

```bash
install -m 0755 -d /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
| gpg --dearmor -o /etc/apt/keyrings/docker.gpg

chmod a+r /etc/apt/keyrings/docker.gpg

```

---

## 📚 Étape 6 - Ajouter le dépôt Docker

```bash
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo $VERSION_CODENAME) stable" \
| tee /etc/apt/sources.list.d/docker.list > /dev/null

```

---

## ⬇️ Étape 7 - Installer Docker

```bash
apt update

apt install -y \
docker-ce \
docker-ce-cli \
containerd.io \
docker-buildx-plugin \
docker-compose-plugin

```

---

## ▶️ Étape 8 - Activer le service Docker

```bash
systemctl enable docker
systemctl start docker

```

---

## ✅ Étape 9 - Vérifier l'installation

```bash
docker run hello-world

```

Si le conteneur `hello-world` s'exécute correctement, Docker est opérationnel.

---

## 👤 Étape 10 - Utiliser Docker sans sudo (optionnel)

```bash
usermod -aG docker $USER

```

Fermer puis rouvrir la session utilisateur.

---

## 🔍 Vérifications

### Version de Docker

```bash
docker version

```

### Informations système

```bash
docker info

```

### Version de Docker Compose

```bash
docker compose version

```

---

## 🚨 Dépannage

<table id="bkmrk-probl%C3%A8me-solution-do"><thead><tr><th>Problème</th><th>Solution</th></tr></thead><tbody><tr><td>Docker ne démarre pas</td><td>Vérifier les paramètres LXC puis redémarrer le conteneur.</td></tr><tr><td>Erreur AppArmor</td><td>Contrôler `lxc.apparmor.profile: unconfined`.</td></tr><tr><td>Erreur cgroups</td><td>Contrôler `features: nesting=1`.</td></tr><tr><td>Problème réseau</td><td>Vérifier la configuration réseau du LXC.</td></tr><tr><td>Diagnostic système</td><td>`journalctl -u docker`</td></tr></tbody></table>

---

## ⚠️ Limitations des conteneurs LXC

- Les conteneurs non privilégiés peuvent rencontrer des limitations avec Docker.
- Certaines fonctionnalités liées aux cgroups ou à OverlayFS peuvent ne pas être disponibles.
- Pour les charges de travail importantes, une machine virtuelle reste la solution recommandée.

---

## 💡 Bonnes pratiques

- Utiliser Docker Compose pour tous les services.
- Stocker les stacks dans `/opt/docker-<service>`.
- Versionner tous les fichiers `docker-compose.yml`.
- Utiliser le registre privé de la plateforme.
- Installer Node Exporter sur les hôtes Docker afin de superviser les ressources.
- Prévoir les sauvegardes des volumes persistants.

---

## 📚 Voir également

- Docker Cheat Sheet
- Docker Registry
- Harbor
- Monitoring des hôtes Docker
- Sauvegarde des volumes Docker

```