Containers

Nous utilisons des containers d'image OCI (Open Container Initiative), orchestré par Docker.

Les containers sont tous les même, mais le système qui les fait fonctionner, Docker, pourrait être remplacer par des projets comme Podman, Nerdctl ou Lilipod, par exemple.

Important

Nous penchons pour Podman, notamment pour les containers rootless.

Installation

Repository d'images

Caution

Attention au fautes de frappes1.

Maintenance

Zombies

Regularly check that containers whose services have either moved or been removed, are not still running

# List containers running.
docker compose ls
# Kill a container that should not still be running.
# The <id> is found in the list above.
docker kill <id>

Pruning

Docker takes a conservative approach to cleaning up unused objects (often referred to as "garbage collection"), such as images, containers, volumes, and networks. These objects are generally not removed unless you explicitly ask Docker to do so. This can cause Docker to use extra disk space. For each type of object, Docker provides a prune command. In addition, you can use docker system prune to clean up multiple types of objects at once.

Mise à Jours

Commandes

# arrête et enlève le container
docker compose down


# récupère la dernière image comme indiqué dans le docker-compose. yml
# Souvent `latest`
docker compose pull


# recrée le container d'après la dernière image locale (qu'on a avec pull) 
# -d/--detach permet de lancer le service en arrière plan. 
docker compose up -d

Procéssus

Nous avons pour l'instant identifier deux façons de mettre à jours un container docker:

  1. down > pull > up -d
  2. pull > up -d

La différence notable entre les deux approches est que la deuxième version permet d'éviter de recréer les contenaires pas mis à jour tandis que la première approche retire tout et repart de zéro, guardant bien sur les data qui étaient dans les volumes.

Nous utilisons la deuxième méthode.

Détails sur up

Cette commande recréer le container sous plusieurs conditions :

  1. Une versions plus récente de l'image
  2. Des changements au fichiers de configurations (image/tag, networks, entrypoints, env variables, port mappings, volume mounts, restart policies et labels)

Troubleshooting

Network

Connecté un container à un autre via URL

Utilisez nom_du_container:port.

internal=true

Si un network est internal=true, le container qui n'a que ce network n'aura pas accès à internet.


  1. Apparament, ghrc.io est malicieux. Attention au fautes de frappes → ghrc.io Appears to be Malicious Brandon Mitchell