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 :
- la référence sur les
Dockerfiles
: https://docs.docker.com/engine/reference/builder/ - les recommandations de l’article : https://www.projectatomic.io/docs/docker-image-author-guidance/
- le guide de bonnes pratiques : https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/
- Volumes avec podman : Quand utiliser les suffix
:z
ou:Z
: Podman volume mounts: When to use the :z or :Z suffix?