docker pull praqma/network-multitool
Peux s'utiliser en contexte kube en étant lancé dans le même namespace que le pod à contacter.
Aller au contenu | Aller au menu | Aller à la recherche
lundi, juin 12 2023
Par pepin le lundi, juin 12 2023, 14:11
docker pull praqma/network-multitool
Peux s'utiliser en contexte kube en étant lancé dans le même namespace que le pod à contacter.
jeudi, octobre 28 2021
Par pepin le jeudi, octobre 28 2021, 08:53
Détruire tous les containers exited
docker rm $(docker ps -qa --filter "status=exited")
vendredi, octobre 22 2021
Par pepin le vendredi, octobre 22 2021, 14:50
docker network inspect $(docker network ls -q)| jq '.[]|(.Name + " " + ((.Containers | length)|tostring))' -r
mercredi, octobre 13 2021
Par pepin le mercredi, octobre 13 2021, 15:45
Docker est le plus connu des systèmes de container. mais Podman est une alternative poussée par Openshift, le système de clustering de Redhat. Quelques différences sont à connaitre.
Docker sait ou chercher des l'installation. Podman non.
Il faut éditer le fichier /etc/containers/registries.conf et y ajouter :
[registries.search] registries = ["registry.access.redhat.com", "quay.io"]
Si votre registry ne supporte pas https :
[registries.insecure] registries = ['localhost:5000']
vendredi, janvier 29 2021
Par pepin le vendredi, janvier 29 2021, 03:40
docker ps --filter status=exited | awk '{if (NR>1) print $1}' | xargs docker rm
jeudi, novembre 5 2020
Par pepin le jeudi, novembre 5 2020, 00:22
La césure des lignes dans un docker ps m'ennuie toujours. J'aime donc reformater l'output :
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Names}}\t{{.Ports}}"
Bien sur il existe d'autres formats de sorties (comme json) permettant de "verticaliser" l'output :
docker container ls --format='{{json .}}' | jq
Ce qui est bien pratique, car ca nous donne tous les champs utilisables dans format "table". Bien sur, tout cela est moins puissant que la syntaxe go, mais c'est une autre histoire...
mardi, octobre 13 2020
Par pepin le mardi, octobre 13 2020, 20:14
Pour mes travaux perso, publier sur mon docker hub perso est plutot contraignant. Il était largement temps de faire une simplissime docker registry pour ces besoins ponctuels.
Lancer la registry avec le container docker fourni par le docker hub est trivial :
docker run --restart always \ -p 5000:5000 \ --name registry \ registry:2
Puis pour uploader une image docker ubuntu sur notre registry :
docker pull ubuntu docker tag ubuntu localhost:5000/ubuntu docker push localhost:5000/ubuntu
mercredi, septembre 16 2020
Par pepin le mercredi, septembre 16 2020, 20:49
Après avoir joué avec gcloud, pour travaux kubernetes, il peut arriver qu'on ai le probleme suivant :
docker.credentials.errors.InitializationError: docker-credential-gcloud not installed or not available in PATH
En fait, il s'agit d'un reliquat de configuration présant dans .docker/config.json :
{ "credHelpers": { "gcr.io": "gcloud", "us.gcr.io": "gcloud", "eu.gcr.io": "gcloud", "asia.gcr.io": "gcloud", "staging-k8s.gcr.io": "gcloud", "marketplace.gcr.io": "gcloud" } }
Il suffit donc de supprimer les références à gcloud, ou plus simplement détruire le fichier si il n'y a rien d'autre.
samedi, septembre 5 2020
Par pepin le samedi, septembre 5 2020, 18:36
ctop permet devoir l'utilisation des containers en cpu, mem, etc.
il permet de ce faire de vérifier que vos limites positionnées sont respectées.
il peut s'installer avec apt, mais aussi tourner dans un container docker pour ne nécessiter aucune installation locale :
sudo apt install ctop
docker run --rm -ti \ --name=ctop \ --volume /var/run/docker.sock:/var/run/docker.sock:ro \ quay.io/vektorlab/ctop:latest
A vous de choisir !
dimanche, mai 10 2020
Par pepin le dimanche, mai 10 2020, 09:21
Ce jour, un docker qui prend 100% de cpu sur un front web, c'est très probablement lié aux logs …
Purger les logs de traefik avec la commande truncate :
truncate -s 0 $(docker inspect --format='{{.LogPath}}' traefik) %%%
Ca semble régler le problème. Il faudrait voir tout ce qui est loggué, car il y'a surement beaucoup d'inutile ....
Une solution de mitigation, est d"activer une rotation de logs avec docker :
Pour cela, il suffit de modifier le /etc/docker/daemon.json comme suit,
{ "live-restore": true, "log-driver": "json-file", "log-opts": {"mode": "non-blocking", "max-file": "7", "max-size": "2G"} }
Dans le cas présent, la rotation a lieu des que le fichier de log atteint 2 gigas, et seuls les 7 derniers fichiers seront gardé. Ce qui veut dire que pour nos services, chacun à un max de log possible de 14go.
Cette valeur arbitraire est ici assez importante, mais cela est du au fait que seul traefik est présent en container sur ce serveur.
Dans un cas de production, il vaudrait mieux avoir une valeur de base faible, et des options locales au container pour ceux nécessitant plus.
Cela peut se faire au niveau de l'orchestrateur (kubenertes, mesos, ...)
vendredi, mai 1 2020
Par pepin le vendredi, mai 1 2020, 23:31
Je dois avouer que même si j'aime beaucoup lxd pour certaines taches, docker dispose d'un écosystème plus riche.
Exemple : firefox dans un container en rattachant l'environnement X11 de l'hôte :
docker run -ti --rm \ -e DISPLAY=$DISPLAY \ -v /tmp/.X11-unix:/tmp/.X11-unix \ firefox
Dans la foulée, noté d'une vidéo de la super jolie et géniale Jessie Frazelle :
docker run -d -v /etc/machine-id:/etc/machine-id:ro -v /var/run/dbus:/var/run/dbus -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=unix$DISPLAY --device /dev/dri --device /dev/snd <CONTAINER>
mardi, avril 21 2020
Par pepin le mardi, avril 21 2020, 18:30
Pour firewaller des container dockerisés, mettre des règles sur le port mappé ne fonctionne pas. En effet, la règle de nat court-circuite la chaine INPUT et envoie le packer sur les chaines DOCKER-*
Pour firewaller, il faut donc utiliser la chaine DOCKER-USER, en réspectant :
C'est bien pensé, ca marche, mais c'est tout sauf évident. Enfin bon, c'est bien pensé et ca marche, mais si on peut s'en passer (par exemple en n'exposant pas le port, ou au moins pas 100% publiquement, on peut s'affranchir de complexifier l'iptables).
Par pepin le mardi, avril 21 2020, 17:57
Un outil qui m'a été conseillé et qui est véritablement utilie, c'est RUNLIKE. il s'installe avec pip :
pip install runlike
ou se lance directement dockérisé
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock assaflavie/runlike YOUR-CONTAINER
mercredi, avril 8 2020
Par pepin le mercredi, avril 8 2020, 16:24
Il existe beaucoup d'outils utilisant la socket de docker pour administrer docker et proposer des cui et gui très intéressantes
docker run --rm -it \ -v /var/run/docker.sock:/var/run/docker.sock \ wagoodman/dive:latest <dive arguments...>
docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock lazyteam/lazydocker
docker run --rm -ti \ --name=ctop \ --volume /var/run/docker.sock:/var/run/docker.sock:ro \ quay.io/vektorlab/ctop:latest
docker volume create portainer_data docker run -d -p 9000:9000 -p 8000:8000 \ --name portainer --restart always \ -v /var/run/docker.sock:/var/run/docker.sock \ -v portainer_data:/data portainer/portainer
mercredi, février 26 2020
Par pepin le mercredi, février 26 2020, 12:33
lister les containers et leurs PID (pour chercher un gros consommateur cpu)
docker ps -q | xargs docker inspect --format '{{.State.Pid}}, {{.ID}}'
lundi, août 26 2019
Par pepin le lundi, août 26 2019, 21:16
apt install docker.io docker-compose:w
docker pull jenkins/jenkins
Trouver l'emplacement des fichiers de docker:
docker info | grep Root
Docker Root Dir: /var/lib/docker
Création d'un docker-compose
vi docker-compose.yml
version: "3" services: jenkins: container_name: alfred image: jenkins/jenkins ports: - "8080:8080" volumes: - "/srv/jenkins:/var/jenkins" networks: - net networks: net:
Il est nécessaire créer le home de jenkins :
mkdir /srv/jenkins
Ainsi nous avons sur le serveur hébergeant les containers, un volume pour le container jenkins
mercredi, avril 10 2019
Par pepin le mercredi, avril 10 2019, 12:01
docker rename <container_name> <new_name>
docker inspect -f '
range .NetworkSettings.Networks.IPAddressend' <container_name_or_id>
vendredi, mars 1 2019
Par pepin le vendredi, mars 1 2019, 14:38
Dans un contexte d'ordonnanceur externe à docker, comme kubernetes, la vie d'un container n'est pas éternelle, et même pire, elle peut être très courte (selon le cycle de développement du service proposé).
Il n'est donc pas rare de voir sur les nodes des container qui sont en état "Exited since ...". Ces container peuvent correspondre à des suppression de pods et services, puis à la récréation de ceux-ci, ce qui peut nous donner de jolis semis doublons lors d'un :
docker ps -a
Kubernetes ne fait pas le ménage sur les nodes, ni meme sur le controlleur, exemple :
root@Krilin:~$ docker ps -a | grep weave 776a6b33278f 1f394ae9e226 "/home/weave/launch.…" 4 minutes ago Exited (1) 4 minutes ago k8s_weave_weave-net-vzv6m_kube-system_6d5bf007-31d6-11e9-8af5-e094673af96c_3348 a7714ac685e7 789b7f496034 "/usr/bin/weave-npc" 13 hours ago Up 13 hours k8s_weave-npc_weave-net-vzv6m_kube-system_6d5bf007-31d6-11e9-8af5-e094673af96c_3 b823cbb9669c k8s.gcr.io/pause:3.1 "/pause" 13 hours ago Up 13 hours k8s_POD_weave-net-vzv6m_kube-system_6d5bf007-31d6-11e9-8af5-e094673af96c_3 467b8f9b7802 789b7f496034 "/usr/bin/weave-npc" 14 hours ago Exited (1) 13 hours ago k8s_weave-npc_weave-net-vzv6m_kube-system_6d5bf007-31d6-11e9-8af5-e094673af96c_2 c8309215ce8b k8s.gcr.io/pause:3.1 "/pause" 14 hours ago Exited (0) 13 hours ago k8s_POD_weave-net-vzv6m_kube-system_6d5bf007-31d6-11e9-8af5-e094673af96c_2
Pour nettoyer tout cela, nous pouvons faire un script shell qui cherchera le mot Exited pour ensuite faire un docker rm sur l'id du container associé, mais il restera encore a faire des "prune" sur les volumes pour que le nettoyage soit complet.
Il existe une commande plus directe dans docker :
docker system prune
rootKrilin:~$ docker system prune WARNING! This will remove: - all stopped containers - all networks not used by at least one container - all dangling images - all dangling build cache Are you sure you want to continue? [y/N]
Si vous repondez "y" vous voyez alors les suppressions faites :
Deleted Containers: 118d43446820ee48fbc2448f458fd310da1a2fa8e9c4288eebc687f6ead02b40 7bd02c21bd056f2206deafb8d2c1f962e460726ea5baac382326315c0200fae6 2d13ae91cd9b2c2c0a0ef6deae378da973eb09a353778c386b946143cd5da611 5c01da141458bad077f8398d235cc29aa571816d9fc377a54663fe60a7b551fa 748087e020c6a012e25a8b78321c45c86471de22f0fbc5e4e14936fa88090382 8ad02c451417f9b4c6c016b330775082b64330284ba9e4eaa20e064fb9f6cf3f 1a8bc77db31831bd0ef177d7a70b0ddafd2f1d9a69a2d7f1f504da69a15f838e 624f19e5050ced840a31e17b857071f25c30afdb46719cb28429ecb7853c2090 c2430cafa2a988cecebffb16ce7a5c90f78dc18053003dd8d6f0cdea438b8473 1796f28b9dbc1c2c31724e91d031a12eae19b1b513c168dec236005e42036969 20fcbb1c937042ef86dccd03f60f59c168947cfc0440fbc20bd99052fdb5a789 Total reclaimed space: 0B
Le 0B correspond à l'espace récupéré sur les volumes. Mais le ménage a bien été fait question reliquats de containers et d'images inutiles.
On y voit un peu plus clair, non ?
samedi, juillet 28 2018
Par pepin le samedi, juillet 28 2018, 00:07
Depuis la verson 1.12, le mode swarm est directement disponible dans l'installation basique de docker.
Pour initialiser un essaim :
docker swarm init
il vous est alors donné la commande à exécuter sur les autres serveurs docker pour joindre l'essaim :
docker swarm join --token
tokenip:port
Pour voir lister les noeuds de l'essaim
docker node ls
Et en version un peu plus sommaire
docker node ls --format '
.ID.Hostname.Status.TLSStatus'
Creation d'un container dans l'essaim
docker service create
image_name
exemple :
docker service create --name lampadaire lamp
Lister les containers présents
docker service ls
ID NAME MODE REPLICAS IMAGE PORTS 121fg1dd9xq2 lampadaire replicated 1/1 lamp:latest
En lançant une deuxième fois un "create" sur l'essaim, on voit avec un "ls" que le container est placé sur l'autre noeud :
ID NAME MODE REPLICAS IMAGE PORTS 121fg1dd9xq2 lampadaire replicated 1/1 lamp:latest ycg88kgulcmd lamproie replicated 1/1 lamp:latest
mais on voit que les deux ne sont pas en situation de replicas entre eux.
Nous pouvons updater les ports publiés ou d'autres informations :
docker service update --publish-add 80 lampadaire
Chose interressante, le forwarding de port est disponible sur les deux noeuds a l'identique, quelque soit le noeud qui héberge.
Modifier le nombre de replicas
docker service scale eager_benz=REPLICAS_NUMBER
lundi, mars 12 2018
Par pepin le lundi, mars 12 2018, 12:00
samedi, octobre 28 2017
Par pepin le samedi, octobre 28 2017, 22:40
Voici le dockerfile :
FROM ubuntu:latest RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections RUN apt-get update && apt-get install -y apt-transport-https RUN apt-get install -y openssh-server RUN mkdir -p /var/run/sshd RUN chmod 755 /var/run/sshd COPY ssh/id_rsa.pub /root/.ssh/authorized_keys RUN apt-get install -y supervisor RUN mkdir -p /var/log/supervisor ENV PASS "maypoass" ENV DOMAIN "mapetiteentreprise.fr" ENV ORG "Ma Petite Entreprise" RUN echo "slapd slapd/internal/adminpw password $PASS" | debconf-set-selections run echo "slapd slapd/internal/generated_adminpw password $PASS" | debconf-set-selections run echo "slapd slapd/password2 password $PASS" | debconf-set-selections run echo "slapd slapd/password1 password $PASS" | debconf-set-selections run echo "slapd slapd/dump_database_destdir string /var/backups/slapd-VERSION" | debconf-set-selections run echo "slapd slapd/domain string $DOMAIN" | debconf-set-selections run echo "slapd shared/organization string $ORG" | debconf-set-selections run echo "slapd slapd/backend string HDB" | debconf-set-selections run echo "slapd slapd/purge_database boolean true" | debconf-set-selections run echo "slapd slapd/move_old_database boolean true" | debconf-set-selections run echo "slapd slapd/allow_ldap_v2 boolean false" | debconf-set-selections run echo "slapd slapd/no_configuration boolean false" | debconf-set-selections run echo "slapd slapd/dump_database string when needed" | debconf-set-selections RUN apt-get install -y slapd ldap-utils COPY entry-point.sh /entry-point.sh RUN chmod -R 755 /entry-point.sh EXPOSE 22 389 CMD ["/entry-point.sh"]
Les informations de mot de passe, domain et organisation sont passé par variables d'environnment docker, et le compte admin est cn=admin.
Aucun schéma additionnel n'est importé, ce sera pour ne prochaine fois. Il n'y a pas non plus de TLS activé. C'"est vraiment du openldap de base
mercredi, septembre 27 2017
Par pepin le mercredi, septembre 27 2017, 22:30
Supervisor est un service pour lancer automatiquement et surveiller d'autres services. Il est donc très utile pour les containers ne disposant pas d'un boot complet et donc de scripts de démarrage des services.
Nous allons donc faire une image qui utiliser supervisor comme point d'entrée du container.
Pour commencer, créons un container avec le Dockerfile suivant :
FROM ubuntu:latest RUN apt-get update && apt-get install -y supervisor RUN apt-get install -y apache2 RUN mkdir -p /var/log/supervisor COPY apache2.conf /etc/supervisor/conf.d/apache2.conf COPY entry-point.sh /entry-point.sh RUN chmod -R 755 /entry-point.sh CMD ["/entry-point.sh"]
Dans le fichier apache2.conf, nous avons mis la configuration de lancement d'apache suivante :
[program:apache2] command=/usr/sbin/apache2ctl -DFOREGROUND autostart=true autorestart=true startretries=3
Enfin le script entry-point.sh lance simplement supervisor en mode no-deamon :
#!/bin/sh /usr/bin/supervisord -n
Compilons l'image :
docker build -t pepiniere .
Créons notre container :
docker create --name testdrive pepiniere
Puis nous pouvons constater que le container testdrive (qui a ici l'ip 172.17.0.3) fait bien tourner apache !!
curl -I http://172.17.0.3
Voila, nous avons un container docker testdrive qui fait tourner un apache2 !
L'entry-point et supervisor étant fonctionnels, il reste maintenant à faire des container de bases, pour industrialiser les déploiements, par exemple :
Bien sur chacune de ses images aura un prérequis : le fonctionnement d'ansible et la mise en place des clefs ssh initiales nécessaires ! Ansible pourra se charger de la mise en place et révocation des clefs ssh des utilisateurs additionnels.
Par pepin le mercredi, septembre 27 2017, 00:10
Une problématique classique sur docker est le lancement des services au démarrage du container, qui nécessite l'écriture d'un script complet et avancé ....
Aujourd'hui j'ai réfléchi à une solution simple basée sur Ansible. Sur un container créé à partir d'une ubuntu/latest, j'ai exécuté (dans un docker exec -t -i <container> bash) les commandes suivantes :
apt update
apt install openssh-server python
cd /root
mkdir .ssh
cat > .ssh/authorized_keys
et j'ai copié la clef ssh du compte administrateur. Je démarre ensuite openssh comme suit :
docker exec <container> -t -i "bash" /etc/init.d/ssh start
Puis à l'aide du playbook suivant et du fichier hosts contenant l'ip du container :
- hosts: all
tasks: - name: ensure apache is running (and enable it at boot) service: name=apache2 state=started enabled=yes
Nous pouvons démarrer apache2 avec un simple
ansible-playbook ensure.yml -i hosts
Et voila !
Nous pouvons donc écrire un script de démarrage de hote qui lancerait ssh pour chaque container, et exécuterai le playbook dans la foulée.
Ce n'est qu'une idée de base artisanale. Il serait préférable que le serveur ssh soit lancé automatiquement, puis que le playbook soit lancé régulièrement pour s'assurer que le reste des services sont up ....
Pour des container de type apache + mysql, c'est une solution fonctionnelle et suffisante, mais bien sur inférieure à la véritable écriture d'un script de démarrage.
Elle à cependant l'avantage de faire en sorte que si le service interne au container meurt sans entrainer un restart du container, alors ansible pourras essayer de le relancer !
Du pour et du contre, donc ...
Cependant, la solution que tous les packagers de container utilisent c'est supervisor ! Un prochain post à venir donc
lundi, août 21 2017
Par pepin le lundi, août 21 2017, 08:56
Pour que le réseau des containers Docker fonctionne, il faut de la translation d'adresse. Docker fait donc le travail tout seul au lancement ... Cependant si vous avez déjà paramétré iptables sur votre poste, Docker va court-circuiter tout ça sans vous prévenir.
Il faut donc dire a docker de ne pas toucher au firewall.
Pour cela, ajouter dans le fichier /etc/default/docker la ligne :
DOCKER_OPTS="--iptables=false"
Docker ne placera plus de règles iptables lui même. Mais vos containers n'ont plus accès à internet ....
Pour rétablir leur accès, voici ce qu'il faut ajouter deux règles iptables :
la première fait une translation d'adresse sortante, en mappant votre réseau Docker sur votre ip sortante de votre hôte docker, exemple :
-A POSTROUTING -s 172.16.0.0/16 ! -o docker0 -j SNAT --to-source 10.0.0.1
la deuxième règle autorise votre interface docker0 à se connecter à votre réseau local :
-A INPUT -i docker0 -j ACCEPT
Attention au placement de ces règles dans votre firewall, car rappel : la première règle qui correspond est appliquée !
Voila c'est tout ce qu'il faut savoir pour avoir un docker fonctionnel, tout sage qui ne parasite pas son hôte. Bien sur, il faut adapter et étendre ce concept à votre plan ip de containers et même aux différents types de réseaux docker que vous utilisez.
lundi, juillet 24 2017
Par pepin le lundi, juillet 24 2017, 18:13
Docker utilise par defaut 172.17.0.0/16 comme range pour l'interface Docker0 et pour les container. Mais si ce range entre en collision avec votre réseau local, vous pouvez le changer comme suit :
Editer le fichier /etc/docker/daemon.json, et y mettre les lignes :
{
"bip": "172.26.0.1/16"
}
Puis relancer docker avec la commande :
service docker restart
Attention, cela relance les containers actifs qui changeront donc d'ip conformément au nouveau pool.
samedi, juillet 1 2017
Par pepin le samedi, juillet 1 2017, 23:51
Cacti est un bon outil de monitoring réseau, mais l'installation et le paramétrage lors de la reinstallation complète du pc est une épine dans le ....
Historiquement, j'aurai opté pour une machine virtuelle, mais maintenant, docker est bien plus séduisant, d'autant plus qu'il existe des images de cacti déjà faites pour docker !
docker pull quantumobject/docker-cacti
docker create -t -i --name cacti --dns=8.8.8.8 --restart unless-stopped quantumobject/docker-cacti
docker start cacti
L'ip du container cacti s'obtient ainsi :
echo "cat /etc/hosts" | docker exec -i cacti bash
127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet, par exemple figer l'ip et parametrer les dns avec les options suivantes ff00::0 ip6-mcastprefix, par exemple figer l'ip et parametrer les dns avec les options suivantes ff02::1 ip6-allnodes.1.3.6.1.4.1.2021.52 ff02::2 ip6-allroutersf5e91448b6d2 172.17.0.2 f5e91448b6d2castorama
ici, f5e91448b6d2 est l'identiant du container cacti. Nous pouvons donc nous connecter a http://172.17.0.2 et nous arrivons sur l'interface de cacti !
Une fois notre cacti paramétré, il reste à en faire une nouvelle image de container puis à faire un tar pour archivage !
docker stop cacti
docker commit cacti teknomage/cacti
docker save teknomage/cacti -o docker-cacti.tar
Nous pouvons alors, sur un autre serveur, reimporter l'image et recréer le container comme suit :
docker load -i teknomage.cacti.tar
docker create -t -i --name raster --restart unless-stopped teknomage/cacti
docker start raster
Une fois l'ip de raster determinée, une connection à http://{ip} nous montre bien notre cacti tout paramétré et meme avec l'état des graphes au moment du commit.
mercredi, juin 21 2017
Par pepin le mercredi, juin 21 2017, 10:25
Ce petit post pour conserver les commandes basiques de docker :
docker pull debian
docker create -t --name balthazar debian
"-t" permet de créer un pseudo-tty, sans quoi le process initial "bash" se termine tout de suite et le container s'arrête quelques secondes après avoir été lancé.
docker start balthazar
docker exec -t -i balthazar "bash"
Vous pouvez maintenant modifier le container, ex:
apt update
apt install ssh
apt install vim
apt install net-tools
password root
Une fois vos modifications faites, quittez avec ^D. Les modifications faites sont dans le container, et non pas dans l'image debian.
docker commit creche balthazar
docker create -t --name gaspard creche
docker start gaspard
La nouvelle image gaspard contient maintenant elle aussi le demon sshd (qui n'est pas lancé automatiquement), vim et les net-tools. La suite consiste ensuite a modifier le containter pour y créer un script de démarrage complet. Puis faire un "commit" et de la nouvelle image, générer de nouveaux container qui utiliseront ce script comme point d'ancrage.