Création d’un conteneur durci

Ce TD est à réaliser dans une machine virtuelle Fedora. Avec les machines vagrant :

$ vagrant up containers
$ vagrant ssh containers

Objectifs

  • Créer une image de conteneur durcie en terme de sécurité

Création d’une image de conteneur durcie à l’aide d’un Containerfile/Dockerfile

Récupérez l’exemple de Containerfile/Dockerfile suivant dans un nouveau dossier :

$ mkdir conteneur
$ cd conteneur

Dockerfile (télécharger):

FROM registry.fedoraproject.org/fedora:38

# Installation de nginx
RUN dnf -y install nginx && dnf clean all

# Expose le port 80 par défaut
EXPOSE 80

# Lance nginx
CMD ["nginx", "-g", "daemon off;"]

Construisez un conteneur à partir de ce Dockerfile :

$ sudo podman build --tag nginx .

Lancez intéractivement le conteneur créé :

$ sudo podman run --rm -it --publish 80 localhost/nginx
...

Une fois que le conteneur fonctionne, vous pouvez alors le lancer en tache de fond :

$ sudo podman run --detach=true --publish 80 localhost/nginx
19f063bfff5aa37655a...

Vérifiez que l’on a bien accés au serveur nginx :

$ sudo podman inspect -f '{{.NetworkSettings.IPAddress}}' 19f063bfff5aa37655a...
10.88.0.8
$ curl 10.88.0.8:80

# Ou avec Docker
$ sudo docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 19f063bfff5aa37655a...
172.17.0.2
$ curl 172.17.0.2:80

Modifiez le Dockerfile pour obtenir une image conteneur qui :

  • est basée sur la dernière version stable de Fedora
  • a été mise à jour
  • lance le serveur nginx sur le port 8080
  • ne tourne pas sous l’utilisateur root

Le conteneur exécute la commande nginx par défaut, mais vous pouvez forcer le lancement d’un shell dans le conteneur avec la commande :

$ sudo podman run --rm -ti localhost/nginx bash

Précisez ensuite lorsque vous lancer le conteneur que :

  • l’image du conteneur est en lecture seule (RO)
  • et les données (logs, etc.) sont stockées dans des volumes persistents

Aidez vous des guides suivants :

Références