tutorial: Reorder chapters for better grouping
This commit is contained in:
parent
c9a08c6125
commit
0093949c4d
@ -1,8 +1,11 @@
|
|||||||
include ../pandoc-opts.mk
|
include ../pandoc-opts.mk
|
||||||
|
|
||||||
SOURCES = tutorial.md \
|
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-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-advanced/setup.md ../docker-advanced/what.md ../docker-advanced/manual.md ../docker-advanced/compose.md ../docker-advanced/security.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
|
rendu.md
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
\newpage
|
\newpage
|
||||||
|
|
||||||
Composition de conteneurs
|
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
|
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
|
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
|
Ce fichier est un condensé des options que nous passons habituellement au
|
||||||
`docker container run`.
|
`docker container run`.
|
||||||
|
|
||||||
### `version`
|
#### `version`
|
||||||
|
|
||||||
Notons toutefois la présence d'une ligne `version` ; il ne s'agit pas de la
|
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
|
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.
|
fonctionnalités de Docker.
|
||||||
|
|
||||||
|
|
||||||
### `services`
|
#### `services`
|
||||||
|
|
||||||
Cette section énumère la liste des services (ou conteneurs) qui seront gérés
|
Cette section énumère la liste des services (ou conteneurs) qui seront gérés
|
||||||
par `docker-compose`.
|
par `docker-compose`.
|
||||||
@ -52,7 +52,7 @@ Les autres fils sont les paramètres classiques que l'on va passer à `docker
|
|||||||
run`.
|
run`.
|
||||||
|
|
||||||
|
|
||||||
### `volumes`
|
#### `volumes`
|
||||||
|
|
||||||
Cette section est le pendant de la commandes `docker volume`.
|
Cette section est le pendant de la commandes `docker volume`.
|
||||||
|
|
||||||
@ -81,7 +81,7 @@ l'emplacement à partager :
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
### `network`
|
#### `network`
|
||||||
|
|
||||||
Cette section est le pendant de la commandes `docker network`.
|
Cette section est le pendant de la commandes `docker network`.
|
||||||
|
|
||||||
@ -101,7 +101,7 @@ networks:
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
#### Driver `host`
|
##### Driver `host`
|
||||||
|
|
||||||
Le driver `host` réutilise la pile réseau de la machine hôte. Le conteneur
|
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
|
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.
|
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
|
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
|
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.
|
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
|
Le driver `bridge` crée un nouveau bridge qui sera partagé entre tous les
|
||||||
conteneurs qui la référencent.
|
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.
|
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
|
Consultez
|
||||||
[la documentation](https://docs.docker.com/compose/compose-file/) pour
|
[la documentation](https://docs.docker.com/compose/compose-file/) pour
|
||||||
|
@ -1,15 +1,17 @@
|
|||||||
\newpage
|
\newpage
|
||||||
|
|
||||||
Lier des conteneurs
|
Lier des conteneurs
|
||||||
===================
|
-------------------
|
||||||
|
|
||||||
Avant de voir des méthodes plus automatiques pour déployer toute notre pile
|
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
|
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
|
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
|
Le premier conteneur qui doit être lancé est la base de données orientée séries
|
||||||
temporelles :
|
temporelles :
|
||||||
@ -123,7 +125,7 @@ redémarrer le conteneur. Aidez-vous pour cela de la [documentation du
|
|||||||
conteneur](https://hub.docker.com/_/influxdb).
|
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
|
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* :
|
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.
|
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 : {-}
|
#### Exercice : {-}
|
||||||
|
|
||||||
|
@ -1,18 +1,21 @@
|
|||||||
\newpage
|
\newpage
|
||||||
|
|
||||||
Limiter les ressources
|
Contenir les applications pour éviter les fuites
|
||||||
======================
|
================================================
|
||||||
|
|
||||||
Lorsque l'on gère un environnement de production, on souhaite bien
|
Lorsque l'on gère un environnement de production, on souhaite bien
|
||||||
évidemment éviter tout déni de service autant que possible. Ou
|
évidemment éviter tout déni de service. Ou parfois, contenir un
|
||||||
parfois, contenir un programme métier avec une fuite mémoire, dans
|
programme métier avec une fuite mémoire, dans certaines limites : il
|
||||||
certaines limites : il vaut parfois mieux le tuer et le relancer
|
vaut parfois mieux le tuer et le relancer automatiquement, plutôt que
|
||||||
automatiquement, plutôt que d'attendre que potentiellement un autre
|
d'attendre que potentiellement un autre processus se fasse tuer à sa
|
||||||
processus se fasse tuer à sa place.
|
place.
|
||||||
|
|
||||||
Pour cela, Docker expose tout un arsenal, reposant sur les cgroups du
|
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.
|
noyau Linux, que l'on verra plus en détail dans un prochain cours.
|
||||||
|
|
||||||
|
|
||||||
|
## Limiter l'utilisaation des ressources
|
||||||
|
|
||||||
### Mémoire
|
### Mémoire
|
||||||
|
|
||||||
Comme on peut s'y attendre, il est possible de limiter la mémoire que
|
Comme on peut s'y attendre, il est possible de limiter la mémoire que
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
\newpage
|
\newpage
|
||||||
|
|
||||||
Mise en place
|
Mise en place
|
||||||
=============
|
-------------
|
||||||
|
|
||||||
Dans la première partie du TP, nous avons installé l'environnement Docker
|
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
|
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.
|
||||||
|
|
||||||
|
|
||||||
## `docker-compose`
|
### `docker-compose`
|
||||||
|
|
||||||
Dans cette partie, nous allons avoir besoin de `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
|
une équipe indépendante. Il constitue aujourd'hui une brique de l'écosystème
|
||||||
Docker, presque indispensable !
|
Docker, presque indispensable !
|
||||||
|
|
||||||
### Par le gestionnaire de paquets
|
#### Par le gestionnaire de paquets
|
||||||
|
|
||||||
Les distributions à jour vous proposeront un paquet `docker-compose` qui
|
Les distributions à jour vous proposeront un paquet `docker-compose` qui
|
||||||
fonctionnera avec la version de Docker qu'ils fournissent.
|
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
|
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 :
|
tous les scripts. Nous pouvons l'installer en suivant la procédure suivante :
|
||||||
@ -37,14 +37,14 @@ chmod +x /usr/bin/docker-compose
|
|||||||
```
|
```
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
### `pip`
|
#### `pip`
|
||||||
|
|
||||||
Le projet étant écrit en Python, il est également disponible via `pip`, si vous
|
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
|
préférez cette méthode. N'oubliez pas de préciser une version compatible avec
|
||||||
votre version de Docker.
|
votre version de Docker.
|
||||||
|
|
||||||
|
|
||||||
### Vérification du fonctionnement
|
#### Vérification du fonctionnement
|
||||||
|
|
||||||
Comme avec Docker, nous pouvons vérifier le bon fonctionnement de
|
Comme avec Docker, nous pouvons vérifier le bon fonctionnement de
|
||||||
`docker-compose` en exécutant la commande :
|
`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 !
|
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
|
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
|
réaliser les exercices sur vos machines, vous pouvez utiliser le projet [Play
|
||||||
|
@ -1,12 +1,31 @@
|
|||||||
\newpage
|
\newpage
|
||||||
|
|
||||||
But du TP
|
Orchestrer un groupe de conteneurs
|
||||||
=========
|
==================================
|
||||||
|
|
||||||
Nous allons réaliser un système de monitoring, prêt à être déployé
|
Maintenant que nous savons démarrer individuellement des conteneurs et les lier
|
||||||
chez un fournisseur de cloud.
|
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
|
indépendants les uns des autres, réutilisables en fonction de besoins
|
||||||
génériques et pouvant facilement être mis à l'échelle.
|
génériques et pouvant facilement être mis à l'échelle.
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
\newpage
|
\newpage
|
||||||
|
|
||||||
Faire le ménage
|
Faire le ménage
|
||||||
===============
|
---------------
|
||||||
|
|
||||||
Au fur et à mesure de nos tests, la taille utilisée par les données de Docker
|
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
|
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`.
|
l'option `--rm`.
|
||||||
|
|
||||||
|
|
||||||
## Conteneurs
|
### Conteneurs
|
||||||
|
|
||||||
Nous pouvons afficher l'ensemble des conteneurs, quel que soit leur état (en
|
Nous pouvons afficher l'ensemble des conteneurs, quel que soit leur état (en
|
||||||
cours d'exécution, arrêtés,\ ...) avec la commande suivante :
|
cours d'exécution, arrêtés,\ ...) avec la commande suivante :
|
||||||
@ -46,7 +46,7 @@ docker container rm cranky_jones dreamy_gates
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
## Images
|
### Images
|
||||||
|
|
||||||
Les vieilles images qui n'ont plus de références sur elle (ni tag, ni conteneur
|
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
|
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`.
|
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
|
Dans la plupart des menus permettant de gérer les objets Docker, vous trouverez
|
||||||
une commande `prune` qui supprimera les objets inutilisés :
|
une commande `prune` qui supprimera les objets inutilisés :
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
\newpage
|
\newpage
|
||||||
|
|
||||||
Mon premier webservice
|
Mon premier webservice
|
||||||
======================
|
----------------------
|
||||||
|
|
||||||
C'est parti, nous allons déployer notre premier service !
|
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.
|
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> :
|
Nous pouvons rediriger le port avec l'argument <span lang="en-US">`-p dst_host:src_cntr`</span> :
|
||||||
|
|
||||||
@ -63,7 +63,7 @@ done
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
## Prêt pour la production ?
|
### Prêt pour la production ?
|
||||||
|
|
||||||
Avec l'option `-i`, nous pouvons encore transmettre les signaux de terminaison
|
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
|
au conteneur. C'est pratique lorsque l'on développe, mais en production, notre
|
||||||
@ -88,7 +88,7 @@ docker container logs 0123456789abcdef
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
## Une autre instance ?
|
### Une autre instance ?
|
||||||
|
|
||||||
Maintenant que nous avons un clone de <https://you.p0m.fr/>, nous voulons
|
Maintenant que nous avons un clone de <https://you.p0m.fr/>, nous voulons
|
||||||
absolument un clone de <https://food.p0m.fr/> !
|
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.
|
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
|
`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
|
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/>.
|
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
|
Lorsque l'on souhaite stopper un conteneur lancé en tâche de fond, on utilise
|
||||||
son identifiant dans la commande suivante :
|
son identifiant dans la commande suivante :
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
\newpage
|
\newpage
|
||||||
|
|
||||||
Mon premier conteneur
|
Mon premier conteneur
|
||||||
=====================
|
---------------------
|
||||||
|
|
||||||
Afin de tester la bonne marche de notre installation, lançons notre premier
|
Afin de tester la bonne marche de notre installation, lançons notre premier
|
||||||
conteneur avec la commande\ :
|
conteneur avec la commande\ :
|
||||||
@ -41,7 +41,7 @@ docker image pull ubuntu
|
|||||||
</div>
|
</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
|
Remarquez comment on interagit avec chaque *objet Docker* : dans la ligne de
|
||||||
commande, le premier mot clef est le type d'objet (`container`, `image`,
|
commande, le premier mot clef est le type d'objet (`container`, `image`,
|
||||||
@ -68,7 +68,7 @@ docker image ls
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
### *Image ID*, nom, tag
|
#### *Image ID*, nom, tag
|
||||||
|
|
||||||
Chaque image est identifiable par son *Image ID* : il s'agit d'un long
|
Chaque image est identifiable par son *Image ID* : il s'agit d'un long
|
||||||
identifiant unique. Chaque modification qui est apportée à l'image
|
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.
|
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,
|
Maintenant que nous avons à notre disposition l'image d'un conteneur Ubuntu,
|
||||||
nous allons pouvoir jouer avec !
|
nous allons pouvoir jouer avec !
|
||||||
@ -140,7 +140,7 @@ docker container run alpine /sbin/apk stats
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
### Images vs. conteneurs
|
#### Images vs. conteneurs
|
||||||
|
|
||||||
À chaque fois que nous lançons un `run`, un nouveau conteneur est créé.
|
À 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
|
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.
|
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
|
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
|
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>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
### Les paramètres
|
#### Les paramètres
|
||||||
|
|
||||||
Vous avez remarqué le placement des options `--tty` et `--interactive` ? Avant
|
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
|
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.
|
conteneur.
|
||||||
|
|
||||||
|
|
||||||
## Lister les conteneurs
|
### Lister les conteneurs
|
||||||
|
|
||||||
Avant de quitter notre conteneur, regardons, à l'aide d'un autre terminal,
|
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
|
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>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
## Sortir d'un conteneur
|
### Sortir d'un conteneur
|
||||||
|
|
||||||
Pour mettre fin à l'exécution d'un conteneur, il convient de terminer le
|
Pour mettre fin à l'exécution d'un conteneur, il convient de terminer le
|
||||||
premier processus lancé dans celui-ci.
|
premier processus lancé dans celui-ci.
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
\newpage
|
\newpage
|
||||||
|
|
||||||
Installation
|
Installation
|
||||||
============
|
------------
|
||||||
|
|
||||||
Avant de voir de quoi il s'agit, afin de gagner du temps, nous allons commencer
|
Avant de voir de quoi il s'agit, afin de gagner du temps, nous allons commencer
|
||||||
par installer Docker.
|
par installer Docker.
|
||||||
|
|
||||||
## Prérequis
|
### Prérequis
|
||||||
|
|
||||||
Docker repose sur plusieurs techniques implémentées dans les récents noyaux
|
Docker repose sur plusieurs techniques implémentées dans les récents noyaux
|
||||||
Linux (et plus marginalement, Windows). Nous consacrerons les prochains cours à
|
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.
|
[`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
|
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
|
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.
|
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
|
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
|
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/>
|
[^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
|
Si vous rencontrez des difficultés pour vous lancer, le projet
|
||||||
[Play With Docker](https://labs.play-with-docker.com/) vous donne accès à
|
[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.
|
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 :
|
Vous devriez maintenant être capable de lancer la commande suivante :
|
||||||
|
|
||||||
@ -145,7 +145,9 @@ Server:
|
|||||||
</div>
|
</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
|
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 :
|
directory.`, le deamon n'est sans doute pas lancé. Lancez-le :
|
||||||
@ -157,7 +159,7 @@ sudo service docker restart
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
### `permission denied`?
|
#### `permission denied`?
|
||||||
|
|
||||||
Si vous avez cette erreur : `dial unix /var/run/docker.sock: permission
|
Si vous avez cette erreur : `dial unix /var/run/docker.sock: permission
|
||||||
denied.`, ajoutez votre utilisateur au groupe `docker` et **relancez votre
|
denied.`, ajoutez votre utilisateur au groupe `docker` et **relancez votre
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
\newpage
|
\newpage
|
||||||
|
|
||||||
Composition de Docker
|
Composition de Docker
|
||||||
=====================
|
---------------------
|
||||||
|
|
||||||
Docker est un écosystème d'outils de haut niveau, permettant d'utiliser des
|
Docker est un écosystème d'outils de haut niveau, permettant d'utiliser des
|
||||||
*conteneurs*.
|
*conteneurs*.
|
||||||
@ -25,7 +25,7 @@ Commençons par planter le décor, en détaillant les principaux mécanismes de
|
|||||||
Docker.
|
Docker.
|
||||||
|
|
||||||
|
|
||||||
## Les images Docker
|
### Les images Docker
|
||||||
|
|
||||||
Une image Docker est un système de fichiers en lecture seule. Elle est formée
|
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.
|
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 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,
|
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
|
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.
|
proposent également.
|
||||||
|
|
||||||
|
|
||||||
## Les conteneurs Docker
|
### Les conteneurs Docker
|
||||||
|
|
||||||
Alors que les images constituent la partie immuable de Docker, les conteneurs
|
Alors que les images constituent la partie immuable de Docker, les conteneurs
|
||||||
sont sa partie vivante. Chaque conteneur est créé à partir d'une image : à
|
sont sa partie vivante. Chaque conteneur est créé à partir d'une image : à
|
||||||
|
@ -25,10 +25,18 @@ apt-get update
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
Il peut arriver que des paquets présents dans l'image ne soient pas à
|
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**
|
jour. De manière générale, il n'est pas recommandé de faire de mises à
|
||||||
utiliser le gestionnaire de paquets pour mettre à jour les paquets présents de
|
jour automatiques et systématiques des éléments présents dans l'image,
|
||||||
base, mais plutôt de contacter le mainteneur de l'image pour qu'il la mette à
|
à l'exception des mises à jour de sécurité[^SECURITY_UPDATE]. En effet, une mise à jour
|
||||||
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 :
|
Installons maintenant un programme :
|
||||||
|
|
||||||
@ -38,10 +46,10 @@ apt-get install nano
|
|||||||
```
|
```
|
||||||
</div>
|
</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`.
|
`exit`.
|
||||||
|
|
||||||
Sauvegardez vos modifications en tant que nouvelle image Docker, avec
|
Sauvegardons nos modifications en tant que nouvelle image Docker, avec
|
||||||
la commande `commit` :
|
la commande `commit` :
|
||||||
|
|
||||||
<div lang="en-US">
|
<div lang="en-US">
|
||||||
|
Loading…
Reference in New Issue
Block a user