Skip to content
Snippets Groups Projects
Verified Commit 89a357f1 authored by Quentin Duchemin's avatar Quentin Duchemin
Browse files

[Doc] Add good practice about init system

parent fe5d61f8
No related branches found
No related tags found
No related merge requests found
...@@ -124,6 +124,24 @@ services: ...@@ -124,6 +124,24 @@ services:
- docker_default - docker_default
``` ```
## Système init
Tous les systèmes Linux ont un système dit `init`, correspondant au processus avec le premier PID (1). Ce processus est le parent de tous les autres, et doit transmettre les signaux qu'il reçoit à ses enfants (par exemple, un signal de terminaison).
Quand vous lancez un conteneur avec un script Shell ou Bash comme entrypoint, ce script a le PID 1.
S'il démarre ensuite l'application, il ne transmettra pas le signal de terminaison à ses enfants.
Le souci, c'est qu'un `docker stop` enverra un signal `SIGTERM` au script d'entrypoint, mais il ne sera pas transmis au service en lui-même, qui se terminera brutalement par un `SIGKILL` après expiration du timeout.
Docker Compose, depuis la version 3.7, adresse ce problème avec une directive très simple :
```
services:
exemple:
init: true
```
[Plus d'informations sur ce lien](https://hynek.me/articles/docker-signals/) et [sur la documentation de Compose](https://docs.docker.com/compose/compose-file/#init)
## Réseaux ## Réseaux
L'idée est de mettre dans des réseaux séparés les services n'ayant pas besoin de communiquer entre eux, pour améliorer la sécurité de l'infrastructure. L'idée est de mettre dans des réseaux séparés les services n'ayant pas besoin de communiquer entre eux, pour améliorer la sécurité de l'infrastructure.
......
...@@ -36,6 +36,11 @@ services: ...@@ -36,6 +36,11 @@ services:
# Use a comprehensive name for easy # Use a comprehensive name for easy
# understanding of `docker ps` output # understanding of `docker ps` output
container_name: app container_name: app
# Add a init-like process in the container to
# forward signals to the child process.
# Use this line if you are using an Bash script
# entrypoint, for exemple.
init: true
# If the container has to be reached from # If the container has to be reached from
# the Internet, put in docker_default # the Internet, put in docker_default
# Otherwise, just in its own network # Otherwise, just in its own network
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment