Comment installer Docker CE sur RHEL 8/CentOS 8
La dernière version de RHEL 8/CentOS 8. Red Hat a construit ses propres outils, buildah et podman, qui visent à être compatibles avec les images docker existantes et à fonctionner sans dépendre d’un démon, permettant la création de conteneurs en tant qu’utilisateurs normaux, sans avoir besoin de permissions spéciales (avec quelques limitations : par exemple, au moment de la rédaction, il n’est toujours pas possible de mapper les ports hôtes au conteneur sans privilèges).
Certains outils spécifiques manquent cependant encore : un équivalent de docker-compose, par exemple, n’existe pas encore. Dans ce tutoriel, nous verrons comment installer et exécuter le Docker CE original sur Rhel8 en utilisant le référentiel Docker officiel pour CentOS7.
Dans ce tutoriel, vous allez apprendre :
- Comment activer le référentiel docker-ce sur RHEL 8/CentOS 8
- Comment installer docker et docker-compose sur RHEL 8/CentOS 8
Docker installé sur RHEL 8/CentOS 8
Configuration logicielle requise et conventions utilisées
Qu’est-ce que Docker ?
Docker est un projet open source qui permet la création et la distribution d’applications à l’intérieur de conteneurs, qui sont des environnements standardisés qui peuvent être facilement répliqués, indépendamment du système hôte. Alors que dans Red Hat Enterprise Linux 7, Docker était officiellement pris en charge, sur la nouvelle version de ce système d’exploitation open source, il a été remplacé par une série d’autres outils développés par Red Hat lui-même : buildah et podman.
Cependant, en utilisant un référentiel externe, il est toujours possible d’installer Docker CE (Community Edition). Dans ce tutoriel, nous allons voir comment installer ce dépôt ; notez cependant qu’il était à l’origine destiné à CentOS 7 (un clone de RHEL), et que la version communautaire de Docker n’a pas de support officiel pour Red Hat Enterprise Linux. Pour cette raison, des problèmes existent – nous les abordons ci-dessous.
Ajout du référentiel externe
Étant donné que Docker n’est pas disponible sur RHEL 8/CentOS 8, nous devons ajouter un dépôt externe pour obtenir le logiciel. Dans ce cas, nous utiliserons le dépôt officiel Docker CE CentOS : c’est, au moment de la rédaction, la seule façon d’installer Docker CE sur RHEL 8/CentOS 8.
L’utilitaire dnf config-manager nous permet, entre autres, d’activer ou de désactiver facilement un dépôt dans notre distribution. Par défaut, seuls les dépôts appstream et baseos sont activés sur Rhel8 ; Nous devons également ajouter et activer le dépôt docker-ce. Tout ce que nous avons à faire pour accomplir cette tâche est d’exécuter la commande suivante :
sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repoNous pouvons vérifier que le référentiel a été activé, en regardant le résultat de la commande suivante :
sudo dnf repolist -vLa commande ci-dessus renverra des informations détaillées sur tous les dépôts activés. Voici ce que vous devriez voir à ce stade :
Repo-id : docker-ce-stable
Repo-name : Docker CE Stable - x86_64
Repo-revision: 1549905809
Repo-updated : Mon 11 Feb 2019 06:23:29 PM CET
Repo-pkgs : 30
Repo-size : 618 M
Repo-baseurl : https://download.docker.com/linux/centos/7/x86_64/stable
Repo-expire : 172,800 second(s) (last: Mon 18 Feb 2019 10:23:54 AM CET)
Repo-filename: /etc/yum.repos.d/docker-ce.repo
Repo-id : rhel-8-for-x86_64-appstream-rpms
Repo-name : Red Hat Enterprise Linux 8 for x86_64 - AppStream Beta (RPMs)
Repo-revision: 1542158694
Repo-updated : Wed 14 Nov 2018 02:24:54 AM CET
Repo-pkgs : 4,594
Repo-size : 4.9 G
Repo-baseurl : https://cdn.redhat.com/content/beta/rhel8/8/x86_64/appstream/os
Repo-expire : 86,400 second(s) (last: Mon 18 Feb 2019 10:23:55 AM CET)
Repo-filename: /etc/yum.repos.d/redhat.repo
Repo-id : rhel-8-for-x86_64-baseos-rpms
Repo-name : Red Hat Enterprise Linux 8 for x86_64 - BaseOS Beta (RPMs)
Repo-revision: 1542158719
Repo-updated : Wed 14 Nov 2018 02:25:19 AM CET
Repo-pkgs : 1,686
Repo-size : 925 M
Repo-baseurl : https://cdn.redhat.com/content/beta/rhel8/8/x86_64/baseos/os
Repo-expire : 86,400 second(s) (last: Mon 18 Feb 2019 10:23:56 AM CET)
Repo-filename: /etc/yum.repos.d/redhat.repo
Total packages: 6,310
Installation de docker-ce
Le dépôt docker-ce-stable est maintenant activé sur notre système. Le dépôt contient plusieurs versions du paquet docker-ce, pour les afficher toutes, nous pouvons exécuter :
dnf list docker-ce --showduplicates | sort -r
docker-ce.x86_64 3:19.03.2-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.1-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.0-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.9-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.8-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.7-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.6-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.5-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.4-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.3-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.2-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.1-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.0-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.3.ce-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.2.ce-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.1.ce-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.0.ce-3.el7 docker-ce-stable
docker-ce.x86_64 18.03.1.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 18.03.0.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.12.1.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.12.0.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.09.1.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.09.0.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.06.2.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.06.1.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.06.0.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.03.3.ce-1.el7 docker-ce-stable
docker-ce.x86_64 17.03.2.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable
Quelle version installer ? Eh bien, Red Hat semble avoir bloqué l’installation de containerd.io > 1.2.0-3.el7, qui est une dépendance de docker-ce. Pour cette raison, l’exécution simple de la commande sudo dnf install docker-ce ne fonctionnera pas. Comme nous le verrons dans une minute, il est toujours possible de contourner ce problème ; Une fois docker-ce installé, cependant, un autre problème devient évident : tant que firewalld, le gestionnaire de pare-feu système est activé, la résolution DNS à l’intérieur des conteneurs docker ne fonctionne pas.
Il s’agit bien sûr d’un problème critique. Cependant, si vous souhaitez tout de même procéder à l’installation, voici les méthodes possibles qui peuvent être utilisées pour éviter les problèmes de dépendances :
- Installer une version spécifique de
docker-cequi nécessite une version installable du paquetcontainerd.io; - Forcer l’installation en fournissant l’option
--nobest - Installez manuellement le dernier
containerd.iotr/min disponible ;
Installer une version spécifique de docker-ce
Au moment de la rédaction, les versions de docker-ce qui sont installées sans problème sont :
- docker-ce-3:18.09.1-3.el7
- docker-ce-18.06.3.ce-3.el7 ;
- docker-ce-17.12.1.ce-1.el7.centos
Pour installer une version spécifique, il suffit de fournir le nom complet du paquet, par exemple :
sudo dnf install docker-ce-3:18.09.1-3.el7Forcer l’installation de docker-ce avec l’option –nobest
Normalement, lors de l’installation d’un paquet, le meilleur candidat disponible est sélectionné dans un dépôt. Dans ce cas, par exemple, l’installation de la dernière version de docker-ce est tentée (et échoue). En utilisant l’option --nobest, nous pouvons modifier ce comportement de sorte que la première version de docker-ce avec des dépendances satisfaisantes soit sélectionnée comme « fallback », dans ce cas 3:18.09.1-3.el7.
sudo dnf install --nobest docker-ce
Dependencies resolved.
Problem: package docker-ce-3:19.03.2-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed
- cannot install the best candidate for the job
- package containerd.io-1.2.2-3.3.el7.x86_64 is excluded
- package containerd.io-1.2.2-3.el7.x86_64 is excluded
- package containerd.io-1.2.4-3.1.el7.x86_64 is excluded
- package containerd.io-1.2.5-3.1.el7.x86_64 is excluded
- package containerd.io-1.2.6-3.3.el7.x86_64 is excluded
=======================================================================================================================================================
Package Arch Version Repository Size
=======================================================================================================================================================
Installing:
docker-ce x86_64 3:18.09.1-3.el7 docker-ce-stable 19 M
Installing dependencies:
containerd.io x86_64 1.2.0-3.el7 docker-ce-stable 22 M
docker-ce-cli x86_64 1:19.03.2-3.el7 docker-ce-stable 39 M
container-selinux noarch 2:2.94-1.git1e99f1d.module+el8.0.0+4017+bbba319f rhel-8-for-x86_64-appstream-rpms 43 k
tar x86_64 2:1.30-4.el8 rhel-8-for-x86_64-baseos-rpms 838 k
libcgroup x86_64 0.41-19.el8 rhel-8-for-x86_64-baseos-rpms 70 k
python3-policycoreutils noarch 2.8-16.1.el8 rhel-8-for-x86_64-baseos-rpms 2.2 M
python3-libsemanage x86_64 2.8-5.el8 rhel-8-for-x86_64-baseos-rpms 127 k
python3-setools x86_64 4.2.0-2.el8 rhel-8-for-x86_64-baseos-rpms 598 k
checkpolicy x86_64 2.8-2.el8 rhel-8-for-x86_64-baseos-rpms 338 k
python3-audit x86_64 3.0-0.10.20180831git0047a6c.el8 rhel-8-for-x86_64-baseos-rpms 85 k
policycoreutils-python-utils noarch 2.8-16.1.el8 rhel-8-for-x86_64-baseos-rpms 228 k
Skipping packages with broken dependencies:
docker-ce x86_64 3:19.03.2-3.el7 docker-ce-stable 24 M
Transaction Summary
=======================================================================================================================================================
Install 12 Packages
Skip 1 Package
Total download size: 85 M
Installed size: 351 M
Is this ok [y/N]:Installez manuellement le dernier package containerd.io disponible
Si nous avons besoin d’installer la dernière version de docker-ce, nous pouvons installer la version requise de containerd.io manuellement, en exécutant :
sudo dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpmUne fois le paquet installé, nous pouvons simplement installer la dernière version de docker-ce :
sudo dnf install docker-ce
Dependencies resolved.
=======================================================================================================================================================
Package Arch Version Repository Size
=======================================================================================================================================================
Installing:
docker-ce x86_64 3:19.03.2-3.el7 docker-ce-stable 24 M
Installing dependencies:
docker-ce-cli x86_64 1:19.03.2-3.el7 docker-ce-stable 39 M
tar x86_64 2:1.30-4.el8 rhel-8-for-x86_64-baseos-rpms 838 k
libcgroup x86_64 0.41-19.el8 rhel-8-for-x86_64-baseos-rpms 70 k
Transaction Summary
=======================================================================================================================================================
Install 4 Packages
Total download size: 65 M
Installed size: 275 M
Is this ok [y/N]:
Cette option est moins pratique car le paquet containerd.io n’est pas installé en tant que dépendance de docker-ce, il ne sera donc pas supprimé automatiquement lorsque ce dernier sera désinstallé du système.
Quelle que soit la méthode que nous utilisons pour installer docker-ce, comme dit précédemment, afin de faire fonctionner la résolution DNS à l’intérieur des conteneurs Docker, nous devons désactiver firewalld (un redémarrage du système peut également être nécessaire) :
sudo systemctl disable firewalldDémarrer et activer le démon docker
Une fois docker-ce installé, nous devons démarrer et activer le démon docker, afin qu’il soit également lancé automatiquement au démarrage. La commande que nous devons exécuter est la suivante :
sudo systemctl enable --now dockerÀ ce stade, nous pouvons confirmer que le démon est actif en exécutant :
systemctl is-active docker
active
De même, on peut vérifier qu’il est activé au démarrage, en exécutant :
systemctl is-enabled docker
enabled
Installation de docker-compose
Docker compose est un paquet très utile qui nous permet de gérer des applications multi-conteneurs, comme par exemple celles basées sur la pile LAMP, où chaque partie de l’environnement (PHP, Apache, MariaDB) est fournie par un conteneur dédié (si le sujet vous intéresse, jetez un coup d’œil à notre tutoriel sur la création d’une pile de lampes basée sur docker). Le package n’est pas disponible sur Rhel8, et il n’existe pas d’équivalent pour être utilisé avec les outils Rhel. Il est cependant possible de l’installer de plusieurs façons : il suffit de continuer à lire et de décider ce qui vous convient le mieux.
Installation mondiale
La façon dont nous devons installer docker-compose varie selon que nous voulons l’installer globalement ou juste pour un seul utilisateur. Au moment de la rédaction de cet article, la seule façon de l’installer globalement est de télécharger le binaire depuis la page github du projet :
curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o docker-composeUne fois le binaire téléchargé, nous le déplaçons dans /usr/local/bin et nous le rendons exécutable :
sudo mv docker-compose /usr/local/bin && sudo chmod +x /usr/local/bin/docker-composeLa hiérarchie /usr/local n’est pas choisie au hasard. Cette structure de répertoires est faite pour être utilisée pour les fichiers installés manuellement par l’administrateur local (pour les logiciels compilés à partir des sources, par exemple), afin d’assurer la séparation des logiciels installés avec le gestionnaire de paquets système.
Bien qu’il soit possible pour un utilisateur normal d’exécuter des commandes liées à docker s’il fait partie du groupe docker (le groupe est automatiquement créé lorsque nous installons docker-ce), par défaut, elles doivent être exécutées avec les privilèges root pour des raisons de sécurité. Lorsque nous devons faire ce dernier, puisque le répertoire /usr/local/bin n’est pas dans le PATH de l’utilisateur racine, nous devons soit appeler le binaire en spécifiant son emplacement, soit ajouter /usr/local/bin au PATH lui-même. La première option est celle que je recommande dans ce cas.
Installation par utilisateur
Si notre utilisateur fait partie du groupe docker, et qu’il est donc autorisé à exécuter des commandes docker, et puisque docker-compose est disponible en tant que paquet python, nous pouvons également l’installer en utilisant pip, le gestionnaire de paquets python. Tout d’abord, assurez-vous que pip lui-même est installé :
sudo dnf install python3-pipPour obtenir docker-compose, nous exécutons :
pip3.6 install docker-compose --userVeuillez noter que même s’il est possible d’exécuter pip en tant que root pour installer un paquet globalement, ce n’est pas recommandé et fortement déconseillé.
Test de docker
Nous avons installé docker et docker-compose, maintenant pour vérifier que tout fonctionne comme prévu, nous pouvons essayer de construire une image et exécuter un conteneur : dans ce cas, nous utiliserons le httpd officiel. Tout ce que nous avons à faire est de lancer la commande suivante :
sudo docker run --rm --name=linuxconfig-test -p 80:80 httpdComme l’image httpd n’existe pas localement, elle sera automatiquement récupérée et construite. Enfin, un conteneur basé sur celui-ci sera lancé au premier plan (il sera automatiquement retiré à l’arrêt). Nous devrions être en mesure de voir le message Ça marche ! lorsque nous atteignons l’adresse IP de notre machine via le navigateur.
Conclusions
Red Hat Enterprise Linux 8 ne supporte pas Docker : sur cette distribution, il a été remplacé par des outils propres à Red Hat comme buildah et podman, qui sont compatibles avec Docker mais n’ont pas besoin d’une architecture serveur/client pour fonctionner. L’utilisation d’outils natifs, dans la mesure du possible, est toujours la méthode recommandée, mais pour une raison ou une autre, vous pouvez toujours vouloir installer le Docker d’origine. Dans ce tutoriel, nous avons vu comment il est possible d’installer Docker CE sur Rhel8, en utilisant le dépôt officiel Docker pour CentOS7, qui est un clone 100 % compatible.
Ce n’est pas une solution idéale, et comme nous l’avons vu, à l’heure actuelle, certaines solutions de contournement sont nécessaires pour faire fonctionner Docker sur RHEL8. Si de nouveaux problèmes surgissent ou si de meilleures solutions aux problèmes mentionnés ci-dessus sont trouvées, cet article sera mis à jour en conséquence. Restez à l’écoute.