Comment installer Podman et configurer des conteneurs sans racine sur une instance EC2 fonctionnant sous Amazon Linux 2 x86 ?

Date de la dernière mise à jour : 20/08/2020

J'utilise une instance Amazon Elastic Compute Cloud (Amazon EC2) qui fonctionne sous Amazon Linux 2 x86. Comment dois-je faire pour installer et configurer Podman afin de gérer mes conteneurs à la place de l'outil Docker ?

Brève description

Podman est un outil open source conçu pour gérer les conteneurs sous Linux. Il remplace l'outil Docker. Il n'est pas nécessaire d'exécuter un démon pour utiliser Podman et celui-ci prend en charge la fonctionnalité cgroup V2. Pour en savoir plus, rendez-vous sur le site podman.IO.

La syntaxe des commandes est similaire à celle de l'outil Docker. Par exemple, le lancement du conteneur hello-world standard s'effectue avec la commande suivante :

$ podman run --rm -it hello-world

Solution

1.    Connectez-vous à votre instance Linux EC2 à l'aide de SSH.

2.    Désactiver Docker :

$ sudo amazon-linux-extras disable docker

3.    Installez un noyau plus récent à partir de la rubrique kernel-ng à l'aide de l'outil amazon-linux-extras :

$ sudo amazon-linux-extras install kernel-ng

4.    Installez les plugins yum et ajoutez le référentiel Kubic Project pour permettre l'accès au package Podman mis à jour et aux dépendances. Pour obtenir la liste des packages du projet Kubic, consultez la page Stable releases of upstream github/com/containers packages (en anglais) du site web Build.Opensuse.org.

$ sudo yum check-update

$ sudo yum install -y yum-utils yum-plugin-copr

$ sudo yum-config-manager --add-repo \
   https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable/CentOS_7/devel:kubic:libcontainers:stable.repo
$ sudo yum copr enable -y lsm5/container-selinux

5.    Installez le package Podman et ses dépendances :

$ sudo yum check-update

$ sudo yum install -y podman

6.    À l'aide de l'outil grubby, ajoutez des arguments de noyau à la configuration grub. Les arguments activent la fonctionnalité cgroup V2 et les namespaces de l'utilisateur :

$ sudo grubby --update-kernel=ALL \
   --args="systemd.unified_cgroup_hierarchy=1 namespace.unpriv_enable=1 user_namespace.enable=1"

7.    Activez une plage de namespaces. Les namespaces mappent la racine du conteneur à un utilisateur ne disposant pas de privilèges en dehors du conteneur.

$ echo "user.max_user_namespaces=10000" | sudo tee /etc/sysctl.d/98-userns.conf

8.    Ajoutez des entrées pour votre utilisateur dans les fichiers /etc/subuid et /etc/subgid. Ces entrées donnent à un utilisateur ne disposant pas de privilèges un éventail d'UID à utiliser dans vos conteneurs. Pour la suite, nous utiliserons le nom d'utilisateur ec2-user.

$ echo "$(id -un):100000:65536" | sudo tee -a /etc/subuid
$ echo "$(id -un):100000:65536" | sudo tee -a /etc/subgid

9.    Redémarrez l'instance pour utiliser le nouveau noyau.

$ sudo systemctl reboot

10.    Connexion à votre instance Linux à l'aide de SSH.

11.    Vérifiez que Podman fonctionne comme prévu :

$ podman version
Version:      2.0.2
API Version:  1
Go Version:   go1.13.11
Built:        Thu Jan  1 00:00:00 1970
OS/Arch:      linux/amd64

$ podman run --rm -it hello-world
Trying to pull registry.fedoraproject.org/hello-world...
  manifest unknown: manifest unknown
Trying to pull registry.access.redhat.com/hello-world...
  name unknown: Repo not found
Trying to pull registry.centos.org/hello-world...
  manifest unknown: manifest unknown
Trying to pull docker.io/library/hello-world...
Getting image source signatures
Copying blob 0e03bdcc26d7 done
Copying config bf756fb1ae done
Writing manifest to image destination
Storing signatures

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

L'exemple de sortie précédent vérifie que l'installation de Podman s'est bien déroulée et que l' utilisateur ec2 sans privilèges peut lancer des conteneurs.

13.    (Facultatif) Configurez un alias bash local pour que Docker soit remplacé par Podman :

$ echo "alias docker=podman" >> $HOME/.bashrc
$ source $HOME/.bashrc
$ docker version
Version:      2.0.2
API Version:  1
Go Version:   go1.13.11
Built:        Thu Jan  1 00:00:00 1970
OS/Arch:      linux/amd64

14.    (Facultatif) Installez l'outil podman-compose. L'outil podman-compose est un script permettant d'exécuter des fichiers docker-compose.yml à l'aide de Podman au lieu de Docker. Pour en savoir plus, rendez-vous sur la page podman-composer (en anglais) du site web de GitHub.

Pour installer l'outil podman-compose :

Vérifiez que le package Python3 est installé sur votre instance :

$ sudo yum install -y python3 python3-pip

Installez l'outil podman-compose localement à l'aide de l'outil pip de Python :

$ pip3 install --user --upgrade PyYAML 
$ pip3 install --user --upgrade podman-compose

Vous pouvez maintenant exécuter des fichiers docker-compose.yml avec Podman :

$ echo "alias docker-compose=podman-compose" >> $HOME/.bashrc
$ source $HOME/.bashrc

Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?