Blame
|
1 | {{InfoBox |
||||||
| 2 | |caption=Ressources |
|||||||
| 3 | |Docker docs= [docs.docker.com](https://docs.docker.com/) |
|||||||
| 4 | }} |
|||||||
| 5 | ||||||||
|
6 | # Containers |
||||||
| 7 | ||||||||
|
8 | Nous utilisons des containers d'image [OCI](https://opencontainers.org/) (Open Container Initiative), orchestré par [Docker](https://www.docker.com/). |
||||||
| 9 | ||||||||
| 10 | Les containers sont tous les même, mais le système qui les fait fonctionner, Docker, pourrait être remplacer par des projets comme [Podman](https://podman.io/), [Nerdctl](https://github.com/containerd/nerdctl) ou [Lilipod](https://github.com/89luca89/lilipod), par exemple. |
|||||||
| 11 | ||||||||
| 12 | > [!IMPORTANT] |
|||||||
| 13 | > Nous penchons pour Podman, notamment pour les containers rootless. |
|||||||
| 14 | ||||||||
| 15 | ## Installation |
|||||||
|
16 | |||||||
|
17 | ## Repository d'images |
||||||
| 18 | ||||||||
| 19 | - [Docker Hub](https://hub.docker.com/) |
|||||||
| 20 | - [quay.io](https://quay.io/) |
|||||||
| 21 | - [ghcr.io](https://ghcr.io) |
|||||||
| 22 | ||||||||
| 23 | ||||||||
| 24 | > [!CAUTION] |
|||||||
|
25 | > Attention au fautes de frappes[^A]. Certains variants de nom de domains sont malveillants. |
||||||
|
26 | |||||||
|
27 | ## Création d'un nouveau service |
||||||
| 28 | ||||||||
|
29 | ### .env |
||||||
| 30 | ||||||||
| 31 | ||||||||
| 32 | ||||||||
|
33 | The --env-file command-line argument and the env_file docker-compose.yml variable specify the env file to use for the container: |
||||||
| 34 | ||||||||
| 35 | ```yaml |
|||||||
| 36 | env_file: |
|||||||
| 37 | - my_service.env |
|||||||
| 38 | ``` |
|||||||
| 39 | ||||||||
|
40 | **Aller plus loins:** |
||||||
| 41 | ||||||||
| 42 | - [Set environment variables Docker Docs](https://docs.docker.com/compose/how-tos/environment-variables/set-environment-variables/) |
|||||||
| 43 | - [Specify the env file docker compose uses](https://stackoverflow.com/questions/40525230/specify-the-env-file-docker-compose-uses) |
|||||||
| 44 | - [Interpolation Docker Docs](https://docs.docker.com/compose/how-tos/environment-variables/variable-interpolation/) |
|||||||
|
45 | |||||||
|
46 | ## Maintenance |
||||||
| 47 | ||||||||
| 48 | ### Zombies |
|||||||
| 49 | Regularly check that containers whose services have either moved or been removed, are not still running |
|||||||
| 50 | ||||||||
| 51 | ```bash |
|||||||
| 52 | # List containers running. |
|||||||
| 53 | docker compose ls |
|||||||
|
54 | |||||||
|
55 | # Kill a container that should not still be running. |
||||||
| 56 | # The <id> is found in the list above. |
|||||||
| 57 | docker kill <id> |
|||||||
| 58 | ``` |
|||||||
| 59 | ||||||||
| 60 | ### Pruning |
|||||||
| 61 | ||||||||
| 62 | > 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. |
|||||||
| 63 | ||||||||
| 64 | - [Prune unused Docker objects Docker Docs](https://docs.docker.com/engine/manage-resources/pruning/) |
|||||||
| 65 | ||||||||
|
66 | **TLDR;** |
||||||
| 67 | ||||||||
| 68 | ```bash |
|||||||
| 69 | # cleans up dangling images. A dangling image is one that isn't tagged, and isn't referenced by any container. |
|||||||
| 70 | docker image prune |
|||||||
| 71 | ||||||||
| 72 | # To remove all images which aren't used by existing containers |
|||||||
| 73 | docker image prune -a |
|||||||
| 74 | ``` |
|||||||
|
75 | |||||||
|
76 | ## Mise à Jours |
||||||
| 77 | ### Commandes |
|||||||
| 78 | ||||||||
| 79 | ```bash |
|||||||
| 80 | # arrête et enlève le container |
|||||||
| 81 | docker compose down |
|||||||
| 82 | ||||||||
| 83 | # récupère la dernière image comme indiqué dans le docker-compose. yml |
|||||||
| 84 | # Souvent `latest` |
|||||||
| 85 | docker compose pull |
|||||||
| 86 | ||||||||
| 87 | # recrée le container d'après la dernière image locale (qu'on a avec pull) |
|||||||
| 88 | # -d/--detach permet de lancer le service en arrière plan. |
|||||||
| 89 | docker compose up -d |
|||||||
| 90 | ``` |
|||||||
| 91 | ### Procéssus |
|||||||
| 92 | ||||||||
| 93 | Nous avons pour l'instant identifier deux façons de mettre à jours un container docker: |
|||||||
| 94 | ||||||||
| 95 | 1. `down` > `pull` > `up -d` |
|||||||
| 96 | 2. `pull` > `up -d` |
|||||||
| 97 | ||||||||
| 98 | 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. |
|||||||
| 99 | ||||||||
| 100 | **Nous utilisons la deuxième méthode.** |
|||||||
| 101 | ||||||||
| 102 | #### Détails sur `up` |
|||||||
| 103 | ||||||||
| 104 | Cette commande recréer le container sous plusieurs conditions : |
|||||||
| 105 | ||||||||
| 106 | 1. Une versions plus récente de l'image |
|||||||
| 107 | 2. Des changements au fichiers de configurations (image/tag, networks, entrypoints, env variables, port mappings, volume mounts, restart policies et labels) |
|||||||
|
108 | |||||||
| 109 | ## Troubleshooting |
|||||||
| 110 | ||||||||
| 111 | ### Network |
|||||||
| 112 | ||||||||
|
113 | #### Connecté un container à un autre via URL |
||||||
| 114 | ||||||||
|
115 | Utilisez `nom_du_container:port`, sinon créer un network partagé par les deux. |
||||||
|
116 | |||||||
|
117 | #### `internal=true` |
||||||
| 118 | ||||||||
| 119 | Si un network est `internal=true`, le container qui n'a que ce network n'aura pas accès à internet. |
|||||||
|
120 | |||||||
| 121 | ||||||||
| 122 | [^A]: Apparament, `ghrc.io` est malicieux. Attention au fautes de frappes → [ghrc.io Appears to be Malicious Brandon Mitchell](https://bmitch.net/blog/2025-08-22-ghrc-appears-malicious/) |
|||||||