Installation de Docker CE sur RHEL 8 : Guide Complet

Problématique résolue par Docker

Docker résout le problème bien connu du "ça fonctionne sur ma machine, mais pas sur la tienne". Il assure une cohérence de l'environnement d'exécution. Un conteneur encapsule un environnement complet dans une image, permettant un déploiement prêt à l'emploi. Important : un conteneur n'est pas une machine virtuelle ; il partage le noyau avec le système hôte.

Procédure d'Installation

1. Désactivation du Pare-feu et de SELinux

# Arrêter et désactiver le pare-feu
systemctl disable --now firewalld

# Vider les règles iptables existantes
iptables -F

# Désactiver le service de messagerie postfix
systemctl disable --now postfix

# Désactiver SELinux de manière persistante
sed -ri 's#(SELINUX=).*#\1disabled#' /etc/selinux/config
# Désactiver SELinux immédiatement (temporaire)
setenforce 0

2. Activasion du Forwarding Réseau de l'Hôte

Chargement du module noyau br_netfilter

Le module br_netfilter active le filtrage réseau sur les ponts réseau (network bridges).

# Charger le module
modprobe br_netfilter

# Assurer le chargement automatique au démarrage
cat <<eof br_netfilter="" chargement="" eof="" le="" lsmod="" sudo="" tee="" v=""></eof>
# Vérifier les paramètres de pont
ls /proc/sys/net/bridge
bridge-nf-call-arptables bridge-nf-filter-pppoe-tagged
bridge-nf-call-ip6tables bridge-nf-filter-vlan-tagged
bridge-nf-call-iptables bridge-nf-pass-vlan-input-dev

Activation du Forwarding IP

vim /etc/sysctl.d/k8s.conf

# Activer le forwarding IPv4
net.ipv4.ip_forward = 1

# Activer le Proxy ARP pour toutes les interfaces
net.ipv4.conf.all.proxy_arp = 1

# Filtrer les paquets IPv6 via ip6tables
net.bridge.bridge-nf-call-ip6tables = 1
# Filtrer les paquets IPv4 via iptables
net.bridge.bridge-nf-call-iptables = 1
# Nombre maximal de connexions suivies par le noyau netfilter
net.netfilter.nf_conntrack_max=2310720

# Désactiver le swap
vm.swappiness = 0

# Désactiver IPv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

Appliquer la configuration :

sysctl -p

3. Suppression des Anciennes Versions de Docker (si nécessaire)

# Supprimer les anciens paquets
sudo yum -y remove docker \
            docker-client \
            docker-client-latest \
            docker-common \
            docker-latest \
            docker-latest-logrotate \
            docker-logrotate \
            docker-engine \
            podman \
            runc

# Pour les versions récentes
yum -y autoremove docker-ce docker-scan-plugin docker-compose-plugin docker-ce-cli docker-buildx-plugin

# Vérifier
rpm -qa |grep docker

4. Ajout du Dépôt Docker CE (miroir Aliyun)

# Installer yum-utils
yum install -y yum-utils

# Ajouter le dépôt officiel Docker (CentOS)
yum-config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

# Ajouter le miroir Aliyun
yum-config-manager --add-repo=https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# Vérifier
yum repolist

Alternative : Dépôt Officiel Docker pour RHEL

# Installer yum-plugins-core
yum -y install yum-plugins-core

# Ajouter le dépôt RHEL
yum-config-manager --add-repo=https://download.docker.com/linux/rhel/docker-ce.repo

5. Suppression du Conflit avec Podman (RHEL 8+)

# Supprimer podman
yum erase podman buildah -y

# Alternative : Utiliser --allowerasing lors de l'installation
# yum -y install docker-ce --allowerasing

6. Installation de Docker CE

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

7. Activation et Démarrage du Service Docker

# Activer au démarrage et démarrer
systemctl enable --now docker

# Vérifier la version
docker --version

Configuration de Docker

Le fichier de configuration principal est /etc/docker/daemon.json.

Paramètres Optionnels du daemon.json

Paramètre Description
"experimental": true Active les fonctionnalités expérimentales de Docker
"features": {"buildkit": true} Active BuildKit pour des builds plus rapides
"exec-opts": ["native.cgroupdriver=systemd"] Utilise systemd comme cgroup driver (recommandé par Kubernetes)
"data-root": "/data/docker" Change le répertoire de stockage par défaut (/var/lib/docker) pour éviter de saturer la partition /
"storage-driver": "overlay2" Utilise le driver overlay2 (nécessite noyau 4.0+)
"registry-mirrors": ["https://isdp30x2.mirror.aliyuncs.com"] Configure un miroir pour accélérer le téléchargement des images

Configuration du Miroir pour les Images

{
  "registry-mirrors": [
    "https://isdp30x2.mirror.aliyuncs.com"
  ]
}

Modification du Répertoire de Stockage

Pour éviter de saturer la partition système :

mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<eof eof=""></eof>

Configuration du Proxy via daemon.json (Méthode Recommandée)

{
    "proxies": {
        "http-proxy": "http://<user>:<password>@<domain>:<port>",
        "https-proxy": "http://<user>:<password>@<domain>:<port>",
        "no-proxy": "<registry.domain>"
    }
}

Vérification :

docker info| grep Proxy

Méthode Alternative pour le Proxy (Méthode systemd)

mkdir -p /etc/systemd/system/docker.service.d
vim /etc/systemd/system/docker.service.d/http-proxy.conf

[Service]
Environment="HTTP_PROXY=http://proxy.example.com:80"
Environment="HTTPS_PROXY=https://proxy.example.com:443"
Environment="NO_PROXY=your-registry.com,10.10.10.10,*.example.com"

Redémarrage du Service

# Recharger la configuration systemd (si modifiée)
systemctl daemon-reload

# Redémarrer Docker
systemctl restart docker

Vérification de la Configuration

docker info

# Exemple de sortie :
# Docker Root Dir: /data/docker

Autres Exemples de Configuration

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "experimental": true,
  "registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF

Test d'Installation

[rhel8 root ~]# docker pull hello-world
Using default tag: latest
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:37a0b92b08d4919615c3ee023f7ddb068d12b8387475d64c622ac30f45c29c51
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest

Exécution de Docker sans root

# Ajouter l'utilisateur courant au groupe docker
sudo usermod -aG docker $USER

# Alternative
sudo gpasswd -a $USER docker

# Passer au groupe docker
newgrp docker

# Test
docker run hello-world
docker run --rm hello-world

Étiquettes: Docker RHEL8 container overlay2 systemd

Publié le 27 juin à 18h14