tutorial: Reorder chapters for better grouping
This commit is contained in:
parent
c9a08c6125
commit
0093949c4d
@ -1,8 +1,11 @@
|
||||
include ../pandoc-opts.mk
|
||||
|
||||
SOURCES = tutorial.md \
|
||||
../docker-basis/installation.md ../docker-basis/what.md ../docker-basis/first.md ../docker-basis/cleaning.md ../docker-basis/ex-flask.md ../docker-basis/volumes.md ../docker-basis/linking.md \
|
||||
../docker-advanced/setup.md ../docker-advanced/what.md ../docker-advanced/manual.md ../docker-advanced/compose.md ../docker-advanced/security.md \
|
||||
../docker-basis/discover.md ../docker-basis/installation.md ../docker-basis/what.md ../docker-basis/first.md ../docker-basis/cleaning.md ../docker-basis/ex-flask.md \
|
||||
../docker-basis/volumes.md \
|
||||
../docker-basis/linking.md \
|
||||
../docker-advanced/what.md ../docker-advanced/setup.md ../docker-advanced/manual.md ../docker-advanced/compose.md \
|
||||
../docker-advanced/security.md \
|
||||
rendu.md
|
||||
|
||||
|
||||
|
@ -1,9 +1,9 @@
|
||||
\newpage
|
||||
|
||||
Composition de conteneurs
|
||||
=========================
|
||||
-------------------------
|
||||
|
||||
## Automatiser le lancement de conteneurs
|
||||
### Automatiser le lancement de conteneurs
|
||||
|
||||
Au lieu de faire un script pour construire et lancer tous vos conteneurs, nous
|
||||
allons définir à la racine de notre projet un fichier `docker-compose.yml` qui
|
||||
@ -30,7 +30,7 @@ services:
|
||||
Ce fichier est un condensé des options que nous passons habituellement au
|
||||
`docker container run`.
|
||||
|
||||
### `version`
|
||||
#### `version`
|
||||
|
||||
Notons toutefois la présence d'une ligne `version` ; il ne s'agit pas de la
|
||||
version de vos conteneurs, mais de la version du format de fichier
|
||||
@ -39,7 +39,7 @@ originale sera utilisée, ne vous permettant pas d'utiliser les dernières
|
||||
fonctionnalités de Docker.
|
||||
|
||||
|
||||
### `services`
|
||||
#### `services`
|
||||
|
||||
Cette section énumère la liste des services (ou conteneurs) qui seront gérés
|
||||
par `docker-compose`.
|
||||
@ -52,7 +52,7 @@ Les autres fils sont les paramètres classiques que l'on va passer à `docker
|
||||
run`.
|
||||
|
||||
|
||||
### `volumes`
|
||||
#### `volumes`
|
||||
|
||||
Cette section est le pendant de la commandes `docker volume`.
|
||||
|
||||
@ -81,7 +81,7 @@ l'emplacement à partager :
|
||||
</div>
|
||||
|
||||
|
||||
### `network`
|
||||
#### `network`
|
||||
|
||||
Cette section est le pendant de la commandes `docker network`.
|
||||
|
||||
@ -101,7 +101,7 @@ networks:
|
||||
</div>
|
||||
|
||||
|
||||
#### Driver `host`
|
||||
##### Driver `host`
|
||||
|
||||
Le driver `host` réutilise la pile réseau de la machine hôte. Le conteneur
|
||||
pourra donc directement accéder au réseau, sans NAT et sans redirection de
|
||||
@ -109,7 +109,7 @@ port. Les ports alloués par le conteneur ne devront pas entrer en conflit avec
|
||||
les ports ouverts par la machine hôte.
|
||||
|
||||
|
||||
#### Driver `null`
|
||||
##### Driver `null`
|
||||
|
||||
Avec le driver `null`, la pile réseau est recréée et aucune interface (autre
|
||||
que l'interface de loopback) n'est présente. Le conteneur ne peut donc pas
|
||||
@ -120,7 +120,7 @@ le driver à utiliser. Par exemple pour un conteneur dont le but est de vérifie
|
||||
un backup de base de données.
|
||||
|
||||
|
||||
#### Driver `bridge`
|
||||
##### Driver `bridge`
|
||||
|
||||
Le driver `bridge` crée un nouveau bridge qui sera partagé entre tous les
|
||||
conteneurs qui la référencent.
|
||||
@ -131,7 +131,7 @@ fonctionnalité de `link` au moment du `run`, il est possible de se retrouvé
|
||||
lié, même après que l'on ait démarré. La résolution se fera dynamiquement.
|
||||
|
||||
|
||||
### Utiliser le `docker-compose.yml`
|
||||
#### Utiliser le `docker-compose.yml`
|
||||
|
||||
Consultez
|
||||
[la documentation](https://docs.docker.com/compose/compose-file/) pour
|
||||
|
@ -1,15 +1,17 @@
|
||||
\newpage
|
||||
|
||||
Lier des conteneurs
|
||||
===================
|
||||
-------------------
|
||||
|
||||
Avant de voir des méthodes plus automatiques pour déployer toute notre pile
|
||||
logicielle TICK, nous allons commencer par mettre en place et lier les
|
||||
conteneurs manuellement, de la même manière que nous avons pu le faire avec
|
||||
l'interface d'administration du FIC et MySQL.
|
||||
l'interface d'administration du FIC et MySQL. Cela nous permettra de voir les
|
||||
subtilités de chaque image, ce qui nous fera gagner du temps pour ensuite
|
||||
en faire la description.
|
||||
|
||||
|
||||
## Conteneur central : la base de données
|
||||
### Conteneur central : la base de données
|
||||
|
||||
Le premier conteneur qui doit être lancé est la base de données orientée séries
|
||||
temporelles :
|
||||
@ -123,7 +125,7 @@ redémarrer le conteneur. Aidez-vous pour cela de la [documentation du
|
||||
conteneur](https://hub.docker.com/_/influxdb).
|
||||
|
||||
|
||||
## Collecter les données locales
|
||||
### Collecter les données locales
|
||||
|
||||
Tentons maintenant de remplir notre base de données avec les métriques du
|
||||
système. Pour cela, on commence par télécharger *Telegraf* :
|
||||
@ -186,7 +188,7 @@ La nouvelle base a donc bien été créée et tant que nous laissons *Telegraf*
|
||||
lancé, celui-ci va régulièrement envoyer des métriques de cette machine.
|
||||
|
||||
|
||||
## Afficher les données collectées
|
||||
### Afficher les données collectées
|
||||
|
||||
#### Exercice : {-}
|
||||
|
||||
|
@ -1,18 +1,21 @@
|
||||
\newpage
|
||||
|
||||
Limiter les ressources
|
||||
======================
|
||||
Contenir les applications pour éviter les fuites
|
||||
================================================
|
||||
|
||||
Lorsque l'on gère un environnement de production, on souhaite bien
|
||||
évidemment éviter tout déni de service autant que possible. Ou
|
||||
parfois, contenir un programme métier avec une fuite mémoire, dans
|
||||
certaines limites : il vaut parfois mieux le tuer et le relancer
|
||||
automatiquement, plutôt que d'attendre que potentiellement un autre
|
||||
processus se fasse tuer à sa place.
|
||||
évidemment éviter tout déni de service. Ou parfois, contenir un
|
||||
programme métier avec une fuite mémoire, dans certaines limites : il
|
||||
vaut parfois mieux le tuer et le relancer automatiquement, plutôt que
|
||||
d'attendre que potentiellement un autre processus se fasse tuer à sa
|
||||
place.
|
||||
|
||||
Pour cela, Docker expose tout un arsenal, reposant sur les cgroups du
|
||||
noyau Linux, que l'on verra plus en détail dans un prochain cours.
|
||||
|
||||
|
||||
## Limiter l'utilisaation des ressources
|
||||
|
||||
### Mémoire
|
||||
|
||||
Comme on peut s'y attendre, il est possible de limiter la mémoire que
|
||||
|
@ -1,7 +1,7 @@
|
||||
\newpage
|
||||
|
||||
Mise en place
|
||||
=============
|
||||
-------------
|
||||
|
||||
Dans la première partie du TP, nous avons installé l'environnement Docker
|
||||
principal, qui inclut le client, le daemon et toute sa machinerie. Mais le
|
||||
@ -10,7 +10,7 @@ trouvées dans les usages de la communauté, et parfois même appropriées par
|
||||
Docker.
|
||||
|
||||
|
||||
## `docker-compose`
|
||||
### `docker-compose`
|
||||
|
||||
Dans cette partie, nous allons avoir besoin de `docker-compose`.
|
||||
|
||||
@ -19,12 +19,12 @@ Ce projet ne bénéficie pas d'une intégration au sein du projet Docker et doit
|
||||
une équipe indépendante. Il constitue aujourd'hui une brique de l'écosystème
|
||||
Docker, presque indispensable !
|
||||
|
||||
### Par le gestionnaire de paquets
|
||||
#### Par le gestionnaire de paquets
|
||||
|
||||
Les distributions à jour vous proposeront un paquet `docker-compose` qui
|
||||
fonctionnera avec la version de Docker qu'ils fournissent.
|
||||
|
||||
### Par la distribution binaire
|
||||
#### Par la distribution binaire
|
||||
|
||||
L'équipe en charge de Docker compose met à disposition un exécutable contenant
|
||||
tous les scripts. Nous pouvons l'installer en suivant la procédure suivante :
|
||||
@ -37,14 +37,14 @@ chmod +x /usr/bin/docker-compose
|
||||
```
|
||||
</div>
|
||||
|
||||
### `pip`
|
||||
#### `pip`
|
||||
|
||||
Le projet étant écrit en Python, il est également disponible via `pip`, si vous
|
||||
préférez cette méthode. N'oubliez pas de préciser une version compatible avec
|
||||
votre version de Docker.
|
||||
|
||||
|
||||
### Vérification du fonctionnement
|
||||
#### Vérification du fonctionnement
|
||||
|
||||
Comme avec Docker, nous pouvons vérifier le bon fonctionnement de
|
||||
`docker-compose` en exécutant la commande :
|
||||
@ -60,7 +60,7 @@ Si vous obtenez une réponse similaire, c'est que vous êtes prêt à commencer
|
||||
TP ! Alors n'attendons pas, partons à l'aventure !
|
||||
|
||||
|
||||
## Play With Docker
|
||||
### Play With Docker
|
||||
|
||||
Tout comme pour la partie précédente, si vous avez des difficultés pour
|
||||
réaliser les exercices sur vos machines, vous pouvez utiliser le projet [Play
|
||||
|
@ -1,12 +1,31 @@
|
||||
\newpage
|
||||
|
||||
But du TP
|
||||
=========
|
||||
Orchestrer un groupe de conteneurs
|
||||
==================================
|
||||
|
||||
Nous allons réaliser un système de monitoring, prêt à être déployé
|
||||
chez un fournisseur de cloud.
|
||||
Maintenant que nous savons démarrer individuellement des conteneurs et les lier
|
||||
entre-eux, nous allons voir une première manière d'automatiser cela.
|
||||
|
||||
Le résultat attendu d'ici la fin du TP, est un groupe de conteneurs
|
||||
Plutôt que de lancer les commandes `docker` comme nous l'avons fait jusque là :
|
||||
soit directement dans un terminal, soit via un script, nous allons décrire
|
||||
l'état que nous souhaitons atteindre : quels images lancer, quels volumes
|
||||
créer, quels réseaux, etc. Cette description peut s'utiliser pour lancer un
|
||||
conteneur seul, mais elle prend tout son sens lorsqu'il faut démarrer tout un
|
||||
groupe de conteneurs qui fonctionnent de concert, parfois avec des dépendances
|
||||
(un serveur applicatif peut nécessiter d'avoir une base de données prête pour
|
||||
démarrer).
|
||||
|
||||
On parle d'orchestration, car nous allons utiliser Docker comme un chef
|
||||
d'orchestre : il va ordonner les créations des différents objets (volumes,
|
||||
réseaux, conteneurs, ...) afin d'arriver au résultat attendu, puis il va faire
|
||||
en sorte de maintenir ce résultat selon les événements qui pourront survenir.
|
||||
|
||||
---
|
||||
|
||||
Notre fil rouge dans cette partie sera la réalisation d'un système de
|
||||
monitoring, tel que nous pourrions le déployer chez un fournisseur de cloud.
|
||||
|
||||
Le résultat attendu d'ici la fin de l'exercice, est un groupe de conteneurs
|
||||
indépendants les uns des autres, réutilisables en fonction de besoins
|
||||
génériques et pouvant facilement être mis à l'échelle.
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
\newpage
|
||||
|
||||
Faire le ménage
|
||||
===============
|
||||
---------------
|
||||
|
||||
Au fur et à mesure de nos tests, la taille utilisée par les données de Docker
|
||||
peut devenir conséquente et son interface peut commencer à déborder
|
||||
@ -14,7 +14,7 @@ supprimera pas non plus les conteneurs qui n'auront pas été démarrés avec
|
||||
l'option `--rm`.
|
||||
|
||||
|
||||
## Conteneurs
|
||||
### Conteneurs
|
||||
|
||||
Nous pouvons afficher l'ensemble des conteneurs, quel que soit leur état (en
|
||||
cours d'exécution, arrêtés,\ ...) avec la commande suivante :
|
||||
@ -46,7 +46,7 @@ docker container rm cranky_jones dreamy_gates
|
||||
</div>
|
||||
|
||||
|
||||
## Images
|
||||
### Images
|
||||
|
||||
Les vieilles images qui n'ont plus de références sur elle (ni tag, ni conteneur
|
||||
lié) sont automatiquement supprimées. Vous n'avez généralement pas à vous
|
||||
@ -54,7 +54,7 @@ occuper de faire du nettoyage dans les images. Néanmoins, vous pouvez les gére
|
||||
de la même manière que les conteneurs, avec les sous-commandes `docker image`.
|
||||
|
||||
|
||||
## `prune`
|
||||
### `prune`
|
||||
|
||||
Dans la plupart des menus permettant de gérer les objets Docker, vous trouverez
|
||||
une commande `prune` qui supprimera les objets inutilisés :
|
||||
|
@ -1,7 +1,7 @@
|
||||
\newpage
|
||||
|
||||
Mon premier webservice
|
||||
======================
|
||||
----------------------
|
||||
|
||||
C'est parti, nous allons déployer notre premier service !
|
||||
|
||||
@ -30,7 +30,7 @@ Non ! Car le service est contenerisé ! Il s'exécute dans son coin, sans
|
||||
interférer avec son hôte.
|
||||
|
||||
|
||||
## Redirection de ports
|
||||
### Redirection de ports
|
||||
|
||||
Nous pouvons rediriger le port avec l'argument <span lang="en-US">`-p dst_host:src_cntr`</span> :
|
||||
|
||||
@ -63,7 +63,7 @@ done
|
||||
</div>
|
||||
|
||||
|
||||
## Prêt pour la production ?
|
||||
### Prêt pour la production ?
|
||||
|
||||
Avec l'option `-i`, nous pouvons encore transmettre les signaux de terminaison
|
||||
au conteneur. C'est pratique lorsque l'on développe, mais en production, notre
|
||||
@ -88,7 +88,7 @@ docker container logs 0123456789abcdef
|
||||
</div>
|
||||
|
||||
|
||||
## Une autre instance ?
|
||||
### Une autre instance ?
|
||||
|
||||
Maintenant que nous avons un clone de <https://you.p0m.fr/>, nous voulons
|
||||
absolument un clone de <https://food.p0m.fr/> !
|
||||
@ -111,7 +111,7 @@ voit bien que ceux-ci ne partagent pas leur système de fichiers : notre
|
||||
nouvelle instance est encore immaculée.
|
||||
|
||||
|
||||
## Paramètres de lancement
|
||||
### Paramètres de lancement
|
||||
|
||||
`youp0m` dispose d'une interface d'administration minimaliste, pour modérer les
|
||||
images soumises. Celle-ci est accessible par mot de passe (ou est désactivée si
|
||||
@ -146,7 +146,7 @@ Une fois lancé, ce conteneur exposera une interface d'administration à cette
|
||||
adresse : <http://localhost:8080/admin/>.
|
||||
|
||||
|
||||
## Arrêt des conteneurs et persistance des données
|
||||
### Arrêt des conteneurs et persistance des données
|
||||
|
||||
Lorsque l'on souhaite stopper un conteneur lancé en tâche de fond, on utilise
|
||||
son identifiant dans la commande suivante :
|
||||
|
@ -1,7 +1,7 @@
|
||||
\newpage
|
||||
|
||||
Mon premier conteneur
|
||||
=====================
|
||||
---------------------
|
||||
|
||||
Afin de tester la bonne marche de notre installation, lançons notre premier
|
||||
conteneur avec la commande\ :
|
||||
@ -41,7 +41,7 @@ docker image pull ubuntu
|
||||
</div>
|
||||
|
||||
|
||||
### Arguments de la ligne de commande
|
||||
#### Arguments de la ligne de commande
|
||||
|
||||
Remarquez comment on interagit avec chaque *objet Docker* : dans la ligne de
|
||||
commande, le premier mot clef est le type d'objet (`container`, `image`,
|
||||
@ -68,7 +68,7 @@ docker image ls
|
||||
</div>
|
||||
|
||||
|
||||
### *Image ID*, nom, tag
|
||||
#### *Image ID*, nom, tag
|
||||
|
||||
Chaque image est identifiable par son *Image ID* : il s'agit d'un long
|
||||
identifiant unique. Chaque modification qui est apportée à l'image
|
||||
@ -109,7 +109,7 @@ le tag qui est automatiquement recherché lorsque l'on ne le précise pas en
|
||||
lançant l'image.
|
||||
|
||||
|
||||
## Exécuter un programme dans un conteneur
|
||||
### Exécuter un programme dans un conteneur
|
||||
|
||||
Maintenant que nous avons à notre disposition l'image d'un conteneur Ubuntu,
|
||||
nous allons pouvoir jouer avec !
|
||||
@ -140,7 +140,7 @@ docker container run alpine /sbin/apk stats
|
||||
</div>
|
||||
|
||||
|
||||
### Images vs. conteneurs
|
||||
#### Images vs. conteneurs
|
||||
|
||||
À chaque fois que nous lançons un `run`, un nouveau conteneur est créé.
|
||||
L'image fournie comme argument est utilisée comme un modèle de base pour le
|
||||
@ -162,7 +162,7 @@ l'installation d'un paquet) s'applique à d'autres conteneurs, il va falloir
|
||||
créer une nouvelle image à partir de ce conteneur.
|
||||
|
||||
|
||||
### Programme par défaut
|
||||
#### Programme par défaut
|
||||
|
||||
Chaque image vient avec un certain nombre de métadonnées, notamment le
|
||||
programme à exécuter par défaut si l'on ne le précise pas dans la ligne de
|
||||
@ -248,7 +248,7 @@ Rassurez-vous, on peut les abbréger en `-i` et `-t` :
|
||||
</div>
|
||||
|
||||
|
||||
### Les paramètres
|
||||
#### Les paramètres
|
||||
|
||||
Vous avez remarqué le placement des options `--tty` et `--interactive` ? Avant
|
||||
le nom de l'image, elles sont utilisées par Docker pour modifier le comportement
|
||||
@ -276,7 +276,7 @@ simplement transmis au conteneur comme argument au premier `execve(2)` du
|
||||
conteneur.
|
||||
|
||||
|
||||
## Lister les conteneurs
|
||||
### Lister les conteneurs
|
||||
|
||||
Avant de quitter notre conteneur, regardons, à l'aide d'un autre terminal,
|
||||
l'état de notre conteneur. La commande suivante permet d'obtenir la liste des
|
||||
@ -291,7 +291,7 @@ CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAME
|
||||
</div>
|
||||
|
||||
|
||||
## Sortir d'un conteneur
|
||||
### Sortir d'un conteneur
|
||||
|
||||
Pour mettre fin à l'exécution d'un conteneur, il convient de terminer le
|
||||
premier processus lancé dans celui-ci.
|
||||
|
@ -1,12 +1,12 @@
|
||||
\newpage
|
||||
|
||||
Installation
|
||||
============
|
||||
------------
|
||||
|
||||
Avant de voir de quoi il s'agit, afin de gagner du temps, nous allons commencer
|
||||
par installer Docker.
|
||||
|
||||
## Prérequis
|
||||
### Prérequis
|
||||
|
||||
Docker repose sur plusieurs techniques implémentées dans les récents noyaux
|
||||
Linux (et plus marginalement, Windows). Nous consacrerons les prochains cours à
|
||||
@ -46,7 +46,7 @@ Rassurez-vous, même si vous n'avez pas compilé le dernier noyau disponible sur
|
||||
[`kernel.org`](https://www.kernel.org/), Docker s'utilise à partir de Linux 3.10.
|
||||
|
||||
|
||||
## Par le gestionnaire de paquets
|
||||
### Par le gestionnaire de paquets
|
||||
|
||||
En général, votre distribution mettra à votre disposition une version de Docker
|
||||
plus ou moins récente. Sous Debian et ses dérivés (Ubuntu, Mint, ...) le paquet
|
||||
@ -64,7 +64,7 @@ distribution :
|
||||
la procédure d'installation de cette distribution.
|
||||
|
||||
|
||||
## Windows et macOS
|
||||
### Windows et macOS
|
||||
|
||||
Bien que les fonctionnalités de contenerisation de Docker que nous utiliserons
|
||||
ne soient disponibles que sous Linux, il est possible d'utiliser Docker de
|
||||
@ -88,7 +88,7 @@ reste libre, mais seulement les applications Docker Desktop.
|
||||
|
||||
[^DockerSubscription]: <https://www.docker.com/blog/updating-product-subscriptions/>
|
||||
|
||||
## Évaluation en ligne
|
||||
### Évaluation en ligne
|
||||
|
||||
Si vous rencontrez des difficultés pour vous lancer, le projet
|
||||
[Play With Docker](https://labs.play-with-docker.com/) vous donne accès à
|
||||
@ -99,7 +99,7 @@ Docker](https://hub.docker.com/signup). Une fois identifié, vous pourrez créer
|
||||
une nouvelle instance, et vous connecter dessus via SSH.
|
||||
|
||||
|
||||
## Vérifier la bonne marche de l'installation
|
||||
### Vérifier la bonne marche de l'installation
|
||||
|
||||
Vous devriez maintenant être capable de lancer la commande suivante :
|
||||
|
||||
@ -145,7 +145,9 @@ Server:
|
||||
</div>
|
||||
|
||||
|
||||
### `no such file or directory`?
|
||||
### Problèmes courants
|
||||
|
||||
#### `no such file or directory`?
|
||||
|
||||
Si vous avez cette erreur : `dial unix /var/run/docker.sock: no such file or
|
||||
directory.`, le deamon n'est sans doute pas lancé. Lancez-le :
|
||||
@ -157,7 +159,7 @@ sudo service docker restart
|
||||
</div>
|
||||
|
||||
|
||||
### `permission denied`?
|
||||
#### `permission denied`?
|
||||
|
||||
Si vous avez cette erreur : `dial unix /var/run/docker.sock: permission
|
||||
denied.`, ajoutez votre utilisateur au groupe `docker` et **relancez votre
|
||||
|
@ -1,7 +1,7 @@
|
||||
\newpage
|
||||
|
||||
Composition de Docker
|
||||
=====================
|
||||
---------------------
|
||||
|
||||
Docker est un écosystème d'outils de haut niveau, permettant d'utiliser des
|
||||
*conteneurs*.
|
||||
@ -25,7 +25,7 @@ Commençons par planter le décor, en détaillant les principaux mécanismes de
|
||||
Docker.
|
||||
|
||||
|
||||
## Les images Docker
|
||||
### Les images Docker
|
||||
|
||||
Une image Docker est un système de fichiers en lecture seule. Elle est formée
|
||||
d'un ensemble de couches, agrégées selon le principe d'UnionFS.
|
||||
@ -44,7 +44,7 @@ Il y a deux méthodes pour obtenir des images Docker : soit les construire avec
|
||||
les outils fournis, soit les récupérer depuis un registre.
|
||||
|
||||
|
||||
## Les registres Docker (*Docker registries*)
|
||||
### Les registres Docker (*Docker registries*)
|
||||
|
||||
Les registres sont des plates-formes de stockage, publiques ou privées,
|
||||
contenant des images. Ils permettent de récupérer des images, mais également
|
||||
@ -62,7 +62,7 @@ et [GitLab](https://docs.gitlab.com/ee/user/packages/container_registry/) le
|
||||
proposent également.
|
||||
|
||||
|
||||
## Les conteneurs Docker
|
||||
### Les conteneurs Docker
|
||||
|
||||
Alors que les images constituent la partie immuable de Docker, les conteneurs
|
||||
sont sa partie vivante. Chaque conteneur est créé à partir d'une image : à
|
||||
|
@ -25,10 +25,18 @@ apt-get update
|
||||
</div>
|
||||
|
||||
Il peut arriver que des paquets présents dans l'image ne soient pas à
|
||||
jour. Afin de garder un environnement cohérent, il est recommandé de **ne pas**
|
||||
utiliser le gestionnaire de paquets pour mettre à jour les paquets présents de
|
||||
base, mais plutôt de contacter le mainteneur de l'image pour qu'il la mette à
|
||||
jour.
|
||||
jour. De manière générale, il n'est pas recommandé de faire de mises à
|
||||
jour automatiques et systématiques des éléments présents dans l'image,
|
||||
à l'exception des mises à jour de sécurité[^SECURITY_UPDATE]. En effet, une mise à jour
|
||||
qui apporte des changements peut altérer le comportement du conteneur,
|
||||
en fonction de la date à laquelle on le construit.
|
||||
|
||||
[^SECURITY_UPDATE]: Voir cet article :
|
||||
<https://pythonspeed.com/articles/security-updates-in-docker/>
|
||||
|
||||
Si vous souhaitez disposez d'une nouvelle version de l'image, il est
|
||||
plutôt recommandé de contacter le mainteneur de l'image pour qu'il la
|
||||
mette à jour, en utilisant un nouveau tag s'il le juge nécessaire.
|
||||
|
||||
Installons maintenant un programme :
|
||||
|
||||
@ -38,10 +46,10 @@ apt-get install nano
|
||||
```
|
||||
</div>
|
||||
|
||||
Lorsque l'installation de `nano` est terminée, quittez l'image en tapant
|
||||
Lorsque l'installation de `nano` est terminée, quittons l'image en tapant
|
||||
`exit`.
|
||||
|
||||
Sauvegardez vos modifications en tant que nouvelle image Docker, avec
|
||||
Sauvegardons nos modifications en tant que nouvelle image Docker, avec
|
||||
la commande `commit` :
|
||||
|
||||
<div lang="en-US">
|
||||
|
Loading…
Reference in New Issue
Block a user