Spell
This commit is contained in:
parent
aaeb15334a
commit
7c93dc0e08
@ -7,7 +7,7 @@ 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
|
||||||
d'informations dépréciées.
|
d'informations dépréciées.
|
||||||
|
|
||||||
Dans la mesure du possible, Docker essai de ne pas encombrer inutilement votre
|
Dans la mesure du possible, Docker essaie de ne pas encombrer inutilement votre
|
||||||
disque dur avec les vieilles images qui ne sont plus utilisées. Il ne va
|
disque dur avec les vieilles images qui ne sont plus utilisées. Il ne va
|
||||||
cependant jamais supprimer une image encore liée à un conteneur ; il ne
|
cependant jamais supprimer une image encore liée à un conteneur ; il ne
|
||||||
supprimera pas non plus les conteneurs qui n'auront pas été démarrés avec
|
supprimera pas non plus les conteneurs qui n'auront pas été démarrés avec
|
||||||
@ -42,11 +42,10 @@ docker container rm cranky_jones dreamy_gates
|
|||||||
|
|
||||||
## Images
|
## Images
|
||||||
|
|
||||||
Les vieilles images qui n'ont plus de références sur elles (ni tag, ni
|
Les vieilles images qui n'ont plus de références sur elle (ni tag, ni conteneur
|
||||||
conteneur lié) sont automatiques supprimées. Vous n'avez généralement pas à
|
lié) sont automatiquement supprimées. Vous n'avez généralement pas à vous
|
||||||
vous occuper de faire du nettoyage dans les images. Néanmoins, vous pouvez les
|
occuper de faire du nettoyage dans les images. Néanmoins, vous pouvez les gérer
|
||||||
gérer de la même manière que les conteneurs, avec les sous-commandes `docker
|
de la même manière que les conteneurs, avec les sous-commandes `docker image`.
|
||||||
image`.
|
|
||||||
|
|
||||||
|
|
||||||
## `prune`
|
## `prune`
|
||||||
|
@ -21,7 +21,7 @@ prêts à l'emploi : le serveur web nginx, la base de données MySQL, un serveur
|
|||||||
node.js, etc.
|
node.js, etc.
|
||||||
|
|
||||||
Nous pouvons directement utiliser le client pour rechercher une image sur le
|
Nous pouvons directement utiliser le client pour rechercher une image sur le
|
||||||
Store, en utilisant la commande `search` :
|
*Store*, en utilisant la commande `search` :
|
||||||
|
|
||||||
```
|
```
|
||||||
docker search mariadb
|
docker search mariadb
|
||||||
@ -57,7 +57,7 @@ docker image ls
|
|||||||
```
|
```
|
||||||
|
|
||||||
Vous devriez constater la présence de plusieurs images « Ubuntu », mais chacune
|
Vous devriez constater la présence de plusieurs images « Ubuntu », mais chacune
|
||||||
a un *TAG* différent. En effet, souven, il existe plusieurs versions d'une même
|
a un *TAG* différent. En effet, souvent, il existe plusieurs versions d'une même
|
||||||
image. Pour Ubuntu par exemple, nous avons la possibilité de lancer la version
|
image. Pour Ubuntu par exemple, nous avons la possibilité de lancer la version
|
||||||
`trusty`, `xenial`, `zesty` ou `artful`.
|
`trusty`, `xenial`, `zesty` ou `artful`.
|
||||||
|
|
||||||
@ -66,7 +66,7 @@ ainsi que leurs tags sont, comme les tags Git, une manière humainement plus
|
|||||||
simple de faire référence aux identifiants.
|
simple de faire référence aux identifiants.
|
||||||
|
|
||||||
Chaque nom d'image possède au moins un tag associé par défaut : *latest*. C'est
|
Chaque nom d'image possède au moins un tag associé par défaut : *latest*. C'est
|
||||||
le tag qui est automatiquement recherché lorsque l'on ne le précisez pas en
|
le tag qui est automatiquement recherché lorsque l'on ne le précise pas en
|
||||||
lançant l'image.
|
lançant l'image.
|
||||||
|
|
||||||
|
|
||||||
@ -147,7 +147,7 @@ docker -H unix:///var/run/docker.sock container run -it alpine /bin/ash -c "echo
|
|||||||
Ici, l'option `-H` sera traitée par le client Docker (pour définir
|
Ici, l'option `-H` sera traitée par le client Docker (pour définir
|
||||||
l'emplacement du point de communication avec le daemon), tandis que les options
|
l'emplacement du point de communication avec le daemon), tandis que les options
|
||||||
`-it` seront utilisées lors du traitement du `run`. Quant au `-c`, il sera
|
`-it` seront utilisées lors du traitement du `run`. Quant au `-c`, il sera
|
||||||
simplement tranmis au conteneur comme argument au premier `execve(2)` du
|
simplement transmis au conteneur comme argument au premier `execve(2)` du
|
||||||
conteneur.
|
conteneur.
|
||||||
|
|
||||||
Avec l'option `--interactive`, on s'assure que l'entrée standard ne sera pas
|
Avec l'option `--interactive`, on s'assure que l'entrée standard ne sera pas
|
||||||
@ -166,3 +166,8 @@ sans quoi `bash` ne se lancera pas en mode interractif[^bashnointer].
|
|||||||
|
|
||||||
L'option `-i` reste néanmoins nécessaire pour que l'entrée standard soit
|
L'option `-i` reste néanmoins nécessaire pour que l'entrée standard soit
|
||||||
transmise au conteneur.
|
transmise au conteneur.
|
||||||
|
|
||||||
|
|
||||||
|
### TODO
|
||||||
|
|
||||||
|
TODO Nouvelle partie sur `docker container ls`
|
||||||
|
@ -5,8 +5,8 @@ Installation
|
|||||||
|
|
||||||
## Prérequis
|
## Prérequis
|
||||||
|
|
||||||
Docker repose sur plusieurs techniques implémentés dans les récents noyaux
|
Docker repose sur plusieurs techniques implémentées dans les récents noyaux
|
||||||
Linux. Nous consacrerons les prochains cours à comprendre leurs
|
Linux. Nous consacrerons les prochains cours à comprendre leur
|
||||||
fonctionnement. Ces techniques ne sont pas limitées à une architecture de
|
fonctionnement. Ces techniques ne sont pas limitées à une architecture de
|
||||||
microprocesseur spécifique (comme peuvent l'être les instructions de
|
microprocesseur spécifique (comme peuvent l'être les instructions de
|
||||||
virtualisation nécessaire pour rendre les hyperviseurs attractifs) ; cependant
|
virtualisation nécessaire pour rendre les hyperviseurs attractifs) ; cependant
|
||||||
@ -49,7 +49,7 @@ Historiquement, Docker est un projet open-source. Depuis peu, le business-model
|
|||||||
de la société a évolué et ils proposent désormais deux éditions : *Community
|
de la société a évolué et ils proposent désormais deux éditions : *Community
|
||||||
Edition* et *Enterprise Edition*. La seconde est payante et possède un certain
|
Edition* et *Enterprise Edition*. La seconde est payante et possède un certain
|
||||||
nombre d'atouts pour faciliter son adoption en entreprise (notamment pas mal
|
nombre d'atouts pour faciliter son adoption en entreprise (notamment pas mal
|
||||||
d'interface graphique, etc.). Le cœur de la technologie est quant à lui
|
d'interfaces graphiques, etc.). Le cœur de la technologie est quant à lui
|
||||||
entièrement présent dans l'édition communautaire.
|
entièrement présent dans l'édition communautaire.
|
||||||
|
|
||||||
Depuis mars dernier, les numéros de version de Docker sont tirés de l'année et
|
Depuis mars dernier, les numéros de version de Docker sont tirés de l'année et
|
||||||
|
@ -4,14 +4,14 @@ Lier les conteneurs
|
|||||||
===================
|
===================
|
||||||
|
|
||||||
Partager des fichiers est une chose, mais ce n'est pas une manière d'échanger
|
Partager des fichiers est une chose, mais ce n'est pas une manière d'échanger
|
||||||
de l'information de manière instantanée : les sockets et le réseau restent
|
de l'information instantanément : les sockets et le réseau restent plus adaptés
|
||||||
plus adaptés à ce genre d'échanges.
|
à ce genre d'échanges.
|
||||||
|
|
||||||
## Les pilotes réseau
|
## Les pilotes réseau
|
||||||
|
|
||||||
Docker propose de base trois *drivers* pour « gérer » cela :
|
Docker propose de base trois pilotes (*drivers*) pour « gérer » cela :
|
||||||
|
|
||||||
- `none` : pour limiter les interfaces réseaux du conteneur à l'interface de
|
- `none` : pour limiter les interfaces réseau du conteneur à l'interface de
|
||||||
loopback `lo` ;
|
loopback `lo` ;
|
||||||
- `host` : pour partager la pile réseau avec l'hôte ;
|
- `host` : pour partager la pile réseau avec l'hôte ;
|
||||||
- `bridge` : pour créer une nouvelle pile réseau par conteneur et rejoindre un
|
- `bridge` : pour créer une nouvelle pile réseau par conteneur et rejoindre un
|
||||||
@ -19,7 +19,7 @@ Docker propose de base trois *drivers* pour « gérer » cela :
|
|||||||
|
|
||||||
|
|
||||||
Ces trois *drivers* sont instanciés de base dans Docker avec le même nom que
|
Ces trois *drivers* sont instanciés de base dans Docker avec le même nom que
|
||||||
leur pilote. Pour consulter la liste de réseaux utilisables, utilisez :
|
leur pilote. Pour consulter la liste de réseaux utilisables, lancez :
|
||||||
|
|
||||||
```
|
```
|
||||||
42sh$ docker network ls
|
42sh$ docker network ls
|
||||||
@ -29,10 +29,10 @@ d5d907add6e2 host host local
|
|||||||
16b702ed01a0 none null local
|
16b702ed01a0 none null local
|
||||||
```
|
```
|
||||||
|
|
||||||
Par défaut, c'est le réseau `bridge` (utilisant le pilote `bridge`) qui est
|
Par défaut, c'est le réseau `bridge` (de type `bridge`) qui est employé : ce
|
||||||
utilisé : ce réseau utilise le pont `docker0` que vous pouvez voir dans vos
|
réseau utilise le pont `docker0` que vous pouvez voir dans vos interfaces
|
||||||
interfaces réseaux via `ip link`. C'est via ce pont que les conteneurs peuvent
|
réseau via `ip link`. C'est via ce pont que les conteneurs peuvent avoir accès
|
||||||
avoir accès à Internet, au travers une couche de NAT.
|
à Internet, au travers d'une couche de NAT.
|
||||||
|
|
||||||
Pour changer le réseau principal joint par le conteneur, utiliser l'option
|
Pour changer le réseau principal joint par le conteneur, utiliser l'option
|
||||||
`--network` du `docker container run`.
|
`--network` du `docker container run`.
|
||||||
@ -49,7 +49,7 @@ directement accessible, sans avoir à utiliser l'option `-p` du `run`.
|
|||||||
|
|
||||||
### Créer un nouveau réseau `bridge`
|
### Créer un nouveau réseau `bridge`
|
||||||
|
|
||||||
Afin de contrôler quels échanges peuvent être réaliser entre les conteneurs, il
|
Afin de contrôler quels échanges peuvent être réalisé entre les conteneurs, il
|
||||||
est recommandé de créer des réseaux utilisateur.
|
est recommandé de créer des réseaux utilisateur.
|
||||||
|
|
||||||
La création d'un réseau se fait tout simplement au travers des sous-commandes
|
La création d'un réseau se fait tout simplement au travers des sous-commandes
|
||||||
@ -67,7 +67,7 @@ réseau :
|
|||||||
docker network connect NETWORK CONTAINER
|
docker network connect NETWORK CONTAINER
|
||||||
```
|
```
|
||||||
|
|
||||||
Lorsque plusieurs conteneurs ont rejoint un réseau utilisateur, ils peuvent
|
Lorsque plusieurs conteneurs ont rejoints un réseau utilisateur, ils peuvent
|
||||||
mutuellement se découvrir grâce à un système de résolution de nom basé sur leur
|
mutuellement se découvrir grâce à un système de résolution de nom basé sur leur
|
||||||
nom de conteneur.
|
nom de conteneur.
|
||||||
|
|
||||||
@ -105,7 +105,7 @@ moins le mot de passe à utiliser via la variable d'environnement
|
|||||||
`POSTGRES_PASSWORD`[^storepostgres] :
|
`POSTGRES_PASSWORD`[^storepostgres] :
|
||||||
|
|
||||||
[^storepostgres]: l'ensemble des variables que peut prendre le conteneur est
|
[^storepostgres]: l'ensemble des variables que peut prendre le conteneur est
|
||||||
disponible sur la page dédié à l'image sur le store :
|
disponible sur la page dédiée à l'image sur le *store* :
|
||||||
<https://store.docker.com/images/postgres>
|
<https://store.docker.com/images/postgres>
|
||||||
|
|
||||||
```
|
```
|
||||||
|
@ -5,11 +5,11 @@ Projet et rendu
|
|||||||
|
|
||||||
## Projet
|
## Projet
|
||||||
|
|
||||||
Écrivez un script `mycloud-run.sh` pour automatiser le lancement de
|
Écrivez un script `mycloud-run.sh` pour automatiser le lancement de votre
|
||||||
votre instance personnelle d'`owncloud`. Une attention particulière
|
instance personnelle d'`owncloud`. Une attention particulière devra être
|
||||||
devra être apportée à la manière dont vous gérerez le rappel du script
|
apportée à la manière dont vous gérerez le rappel du script pour éventuellement
|
||||||
pour éventuellement relancer un conteneur qui se serait arrêté
|
relancer un conteneur qui se serait arrêté (évidemment sans perdre les
|
||||||
(évidemment sans perdre les données).
|
données).
|
||||||
|
|
||||||
À la fin de son exécution, le script affichera un lien utilisable sur l'hôte
|
À la fin de son exécution, le script affichera un lien utilisable sur l'hôte
|
||||||
pour se rendre sur la page de connexion. Une autre machine de votre réseau
|
pour se rendre sur la page de connexion. Une autre machine de votre réseau
|
||||||
@ -22,7 +22,8 @@ machine sans pare-feu configurée, cela ne demande pas d'étape supplémentaire)
|
|||||||
Votre script devra se limiter aux notions vues durant ce TP (ie. sans utiliser
|
Votre script devra se limiter aux notions vues durant ce TP (ie. sans utiliser
|
||||||
`docker-compose` ou `docker stack` que l'on verra au prochain TP). Il pourra
|
`docker-compose` ou `docker stack` que l'on verra au prochain TP). Il pourra
|
||||||
cependant faire usage des commandes `docker OBJECT inspect` pour ne pas avoir à
|
cependant faire usage des commandes `docker OBJECT inspect` pour ne pas avoir à
|
||||||
parser les retours des commandes lisibles par les humains.
|
faire d'analyse syntaxique sur les retours des commandes lisibles par les
|
||||||
|
humains.
|
||||||
|
|
||||||
Cette instance devra utiliser une base de données MySQL (lancée par vos soins
|
Cette instance devra utiliser une base de données MySQL (lancée par vos soins
|
||||||
dans un autre conteneur) et contenir ses données dans un ou plusieurs volumes
|
dans un autre conteneur) et contenir ses données dans un ou plusieurs volumes
|
||||||
@ -71,7 +72,7 @@ Deux méthodes sont utilisables pour signer votre rendu :
|
|||||||
* signature de la tarball.
|
* signature de la tarball.
|
||||||
|
|
||||||
Dans les deux cas, si vous n'en avez pas déjà une, vous devrez créer une clef
|
Dans les deux cas, si vous n'en avez pas déjà une, vous devrez créer une clef
|
||||||
PGP à votre nom et prénom.
|
PGP à **votre nom et prénom**.
|
||||||
|
|
||||||
Pour valider la signature, il est nécessaire d'avoir reçu la clef publique
|
Pour valider la signature, il est nécessaire d'avoir reçu la clef publique
|
||||||
séparément. Vous avez le choix de l'uploader sur un serveur de clefs, soit de
|
séparément. Vous avez le choix de l'uploader sur un serveur de clefs, soit de
|
||||||
@ -103,7 +104,7 @@ gpg: Can't check signature: No public key
|
|||||||
```
|
```
|
||||||
|
|
||||||
C'est que votre clef publique n'est pas dans mon trousseau et que les méthodes
|
C'est que votre clef publique n'est pas dans mon trousseau et que les méthodes
|
||||||
de récupérations automatiques n'ont pas permis de la trouver. Uploadez votre
|
de récupération automatique n'ont pas permis de la trouver. Uploadez votre
|
||||||
clef sur un serveur de clefs (et attendez quelques minutes sa propagation) ou
|
clef sur un serveur de clefs (et attendez quelques minutes sa propagation) ou
|
||||||
envoyez un courriel au service avec votre clef publique en pièce-jointe, avant
|
envoyez un courriel au service avec votre clef publique en pièce-jointe, avant
|
||||||
de retenter votre rendu.
|
de retenter votre rendu.
|
||||||
@ -130,6 +131,6 @@ Si vous recevez un rapport concluant ainsi :
|
|||||||
After analyzing your e-mail, I've decided to SKIP it.
|
After analyzing your e-mail, I've decided to SKIP it.
|
||||||
```
|
```
|
||||||
|
|
||||||
Cela signifie que la lecture de votre courriel qui a été de préférée n'est pas
|
Cela signifie que la lecture de votre courriel qui a été préférée n'est pas
|
||||||
celle d'un rendu. Vérifiez que vous n'envoyez pas votre clef publique avec
|
celle d'un rendu. Vérifiez que vous n'envoyez pas votre clef publique avec
|
||||||
votre rendu.
|
votre rendu.
|
||||||
|
@ -4,16 +4,15 @@ Stockage de données applicatives
|
|||||||
================================
|
================================
|
||||||
|
|
||||||
Le concept principal de Docker est de concevoir des conteneurs applicatifs : on
|
Le concept principal de Docker est de concevoir des conteneurs applicatifs : on
|
||||||
va préférer assigner un unique rôle à un conteneur (donc géralement on ne va
|
va préférer assigner un unique rôle à un conteneur (donc généralement on ne va
|
||||||
lancer qu'une seule application par conteneur) et concevoir un service complet
|
lancer qu'une seule application par conteneur) et concevoir un service complet
|
||||||
en créant un groupe de conteneur, partageant des données entre-eux par des
|
en créant un groupe de conteneurs, partageant des données entre eux par des
|
||||||
volumes.
|
volumes.
|
||||||
|
|
||||||
Il est possible d'utiliser la dernière couche en lecture/écriture pour inscrire
|
Il est possible d'utiliser la dernière couche en lecture/écriture pour inscrire
|
||||||
des données. Il n'est cependant pas recommandé de stocker des données de cette
|
des données. Il n'est cependant pas recommandé de stocker des données de cette
|
||||||
manière, car les données ne vont pas persister une fois que le conteneur aura
|
manière, car elles ne vont pas persister une fois que le conteneur aura terminé
|
||||||
terminé son exécution ; elles seront alors plus compliqués à retrouver
|
son exécution ; elles seront alors plus compliquées à retrouver manuellement.
|
||||||
manuellement.
|
|
||||||
|
|
||||||
Docker met à notre disposition plusieurs mécanismes pour que les données de nos
|
Docker met à notre disposition plusieurs mécanismes pour que les données de nos
|
||||||
applications persistent et soient prêtes à migrer plus facilement vers une
|
applications persistent et soient prêtes à migrer plus facilement vers une
|
||||||
@ -50,10 +49,11 @@ volume :
|
|||||||
docker volume create prod_db
|
docker volume create prod_db
|
||||||
```
|
```
|
||||||
|
|
||||||
Ensuite, nous pouvons démarrer un conteneur l'utilisant, par exemple :
|
Ensuite, nous pouvons démarrer un conteneur utilisant, par exemple :
|
||||||
|
|
||||||
```
|
```
|
||||||
docker container run --name mydb --mount source=prod_db,target=/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw mysql
|
docker container run --name mydb --mount source=prod_db,target=/var/lib/mysql \
|
||||||
|
-e MYSQL_ROOT_PASSWORD=my-secret-pw mysql
|
||||||
```
|
```
|
||||||
|
|
||||||
Lorsque le volume est vide, si des données sont présentes à l'endroit du point
|
Lorsque le volume est vide, si des données sont présentes à l'endroit du point
|
||||||
|
@ -13,8 +13,8 @@ socket. D'ailleurs, le client peut ne pas être sur la même machine qui
|
|||||||
exécutera effectivement les conteneurs.
|
exécutera effectivement les conteneurs.
|
||||||
|
|
||||||
C'est ce qu'il se passe lorsqu'on utilise *Docker4Windows* ou *Docker4Mac* :
|
C'est ce qu'il se passe lorsqu'on utilise *Docker4Windows* ou *Docker4Mac* :
|
||||||
une machine virtuelle Linux est lancé parallèlement au système de base et
|
une machine virtuelle Linux est lancée parallèlement au système de base et
|
||||||
chaque commande `docker` tappée est passée au deamon dans la machine virtuelle.[^dockermachine]
|
chaque commande `docker` tapée est passée au deamon dans la machine virtuelle.[^dockermachine]
|
||||||
|
|
||||||
[^dockermachine]: Il suffit de modifier la variable d'environnement
|
[^dockermachine]: Il suffit de modifier la variable d'environnement
|
||||||
`DOCKER_HOST` ou de passer le paramètre `-H` suivi de l'URL de la socket à
|
`DOCKER_HOST` ou de passer le paramètre `-H` suivi de l'URL de la socket à
|
||||||
@ -40,8 +40,8 @@ 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.
|
||||||
|
|
||||||
Une image peut, par exemple, être un système Ubuntu complet ou juste contenir
|
Une image peut, par exemple, être un système Ubuntu complet ou juste contenir
|
||||||
le programme busybox ou encore un serveur web et votre application web, prêt à
|
le programme `busybox` ou encore un serveur web et votre application web, prêts
|
||||||
l'emploi.
|
à l'emploi.
|
||||||
|
|
||||||
Les images sont utilisées pour créer des conteneurs.
|
Les images sont utilisées pour créer des conteneurs.
|
||||||
|
|
||||||
@ -54,12 +54,12 @@ les outils fournis, soit les récupérer depuis un registre.
|
|||||||
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 : à
|
||||||
chaque fois que vous lancez un conteneur, une couche lecture/écriture est
|
chaque fois que vous lancez un conteneur, une couche lecture/écriture est
|
||||||
ajoutée au dessus de l'image. Cette couche est propre au conteneur et est
|
ajoutée au dessus de l'image. Cette couche est propre au conteneur et
|
||||||
temporaire : l'image n'est pas modifié par l'exécution d'un conteneur.
|
temporaire : l'image n'est pas modifiée par l'exécution d'un conteneur.
|
||||||
|
|
||||||
Chaque conteneur s'exécute dans un environnement restreint et distinct de
|
Chaque conteneur s'exécute dans un environnement restreint et distinct de
|
||||||
l'environnement principal (où vous avez votre bureau). Par exemple, dans cet
|
l'environnement principal (où vous avez votre bureau). Par exemple, dans cet
|
||||||
environnement, vous ne pouvez pas voir les processus qui sont situé en dehors,
|
environnement, vous ne pouvez pas voir les processus qui sont situés en dehors,
|
||||||
ni accéder aux fichiers extérieurs.
|
ni accéder aux fichiers extérieurs.
|
||||||
|
|
||||||
|
|
||||||
@ -71,4 +71,4 @@ d'en envoyer.
|
|||||||
|
|
||||||
Le registre utilisé de base est le [Docker Store](https://store.docker.com/) :
|
Le registre utilisé de base est le [Docker Store](https://store.docker.com/) :
|
||||||
il contient à la fois des images officielles (ubuntu, debian, nginx, ...) et
|
il contient à la fois des images officielles (ubuntu, debian, nginx, ...) et
|
||||||
des images crées par des utilisateurs.
|
des images créées par des utilisateurs.
|
||||||
|
@ -43,8 +43,8 @@ docker container run -it my_editor /bin/bash
|
|||||||
|
|
||||||
## `RUN` dans le `Dockerfile`
|
## `RUN` dans le `Dockerfile`
|
||||||
|
|
||||||
Dans un `Dockerfile`, chaque ligne est exécutée indépendamment des
|
Dans un `Dockerfile`, chaque ligne est exécutée indépendamment des autres et
|
||||||
autres et correspondra à une nouvelle couche de notre image.
|
correspondra à une nouvelle couche de notre image.
|
||||||
|
|
||||||
Cela signifie que l'exemple suivant **ne fonctionne pas** :
|
Cela signifie que l'exemple suivant **ne fonctionne pas** :
|
||||||
|
|
||||||
@ -54,9 +54,9 @@ RUN service mysqld start
|
|||||||
RUN mysql -u root -p toor virli < /db.sql
|
RUN mysql -u root -p toor virli < /db.sql
|
||||||
```
|
```
|
||||||
|
|
||||||
Cet exemple ne fonctionne pas car le serveur MySQL est lancé dans le premier
|
Cet exemple ne fonctionne pas car le serveur MySQL qui est lancé dans le
|
||||||
RUN, n'est plus lancé au moment du deuxième RUN. En effet, chaque commande du
|
premier `RUN`, n'est plus lancé au moment du deuxième `RUN`. En effet, chaque
|
||||||
`Dockerfile` a pour but de modifier le système de fichiers.
|
commande du `Dockerfile` a pour but de modifier le système de fichiers.
|
||||||
|
|
||||||
Pour avoir le résultat escompté, il faut exécuter les commandes ensemble :
|
Pour avoir le résultat escompté, il faut exécuter les commandes ensemble :
|
||||||
|
|
||||||
@ -82,13 +82,12 @@ RUN apt-get install -y nginx
|
|||||||
EXPOSE 80
|
EXPOSE 80
|
||||||
```
|
```
|
||||||
|
|
||||||
L'instruction `EXPOSE` sera traité plus tard par le client Docker
|
L'instruction `EXPOSE` sera traitée plus tard par le client Docker (équivalent
|
||||||
(équivalent à l'argument `--expose`). Il s'agit de préciser les ports
|
à l'argument `--expose`). Il s'agit de préciser les ports sur lesquels votre
|
||||||
sur lesquels votre image écoute.
|
image écoute.
|
||||||
|
|
||||||
En utilisant l'option `-P` du `run`, vous allez pouvoir assigner une
|
En utilisant l'option `-P` du `run`, vous allez pouvoir assigner une
|
||||||
redirection de port aléatoire sur la machine hôte vers votre
|
redirection de port aléatoire sur la machine hôte vers votre conteneur :
|
||||||
conteneur :
|
|
||||||
|
|
||||||
```
|
```
|
||||||
docker image build --tag=my_webserver .
|
docker image build --tag=my_webserver .
|
||||||
@ -96,20 +95,19 @@ docker container run -it -P my_webserver /bin/bash
|
|||||||
service nginx start
|
service nginx start
|
||||||
```
|
```
|
||||||
|
|
||||||
Dans un autre terminal, lancer un `docker ps` et consulter la colonne
|
Dans un autre terminal, lancer un `docker ps` et consulter la colonne *PORTS*
|
||||||
*PORTS* pour connaître le port choisit par Docker pour effectuer la
|
pour connaître le port choisi par Docker pour effectuer la redirection.
|
||||||
redirection.
|
|
||||||
|
|
||||||
Rendez-vous ensuite dans votre navigateur sur <http://localhost:49153/>.
|
Rendez-vous ensuite dans votre navigateur sur <http://localhost:49153/>.
|
||||||
|
|
||||||
À vous de jouer : utilisez l'instruction `COPY` pour afficher votre
|
*À vous de jouer :* utilisez l'instruction `COPY` pour afficher votre propre
|
||||||
propre `index.html` remplaçant celui installé de base par nginx.
|
`index.html` remplaçant celui installé de base par nginx.
|
||||||
|
|
||||||
|
|
||||||
## Lancement de commande automatique
|
## Lancement de commande automatique
|
||||||
|
|
||||||
Vous pouvez placer dans un `Dockerfile` une instruction `CMD` qui sera
|
Vous pouvez placer dans un `Dockerfile` une instruction `CMD` qui sera exécutée
|
||||||
exécutée si aucune commande n'est passée lors du `run`, par exemple :
|
si aucune commande n'est passée lors du `run`, par exemple :
|
||||||
|
|
||||||
```
|
```
|
||||||
CMD nginx -g "daemon off;"
|
CMD nginx -g "daemon off;"
|
||||||
@ -120,23 +118,22 @@ docker image build --tag=my_nginx .
|
|||||||
docker container run -d -P my_nginx
|
docker container run -d -P my_nginx
|
||||||
```
|
```
|
||||||
|
|
||||||
L'option `-d` passée au `run` lance le conteneur en tâche de
|
L'option `-d` passée au `run` lance le conteneur en tâche de fond. Si vous
|
||||||
fond. Si vous constatez via un `docker ps` que le conteneur s'arrête
|
constatez via un `docker container ls` que le conteneur s'arrête directement,
|
||||||
directement, retirer cette option pour voir ce qui ne va pas, ou
|
retirez cette option pour voir ce qui ne va pas, ou utilisez la commande
|
||||||
utilisez la commande `docker logs`.
|
`docker container logs`.
|
||||||
|
|
||||||
|
|
||||||
## D'autres instructions ?
|
## D'autres instructions ?
|
||||||
|
|
||||||
Consultez <https://docs.docker.com/engine/reference/builder/> pour la liste complète
|
Consultez <https://docs.docker.com/engine/reference/builder/> pour la liste
|
||||||
des instructions reconnues.
|
complète des instructions reconnues.
|
||||||
|
|
||||||
|
|
||||||
## Rendu
|
## Rendu
|
||||||
|
|
||||||
Rendez le fichier `Dockerfile` et son contexte (`index.html`, fichiers de conf
|
Rendez le fichier `Dockerfile` et son contexte (`index.html`, fichiers de conf
|
||||||
éventuels, ...) que vous avez utilisé pour réaliser votre image
|
éventuels, ...) que vous avez utilisé pour réaliser votre image `my_webserver`.
|
||||||
`my_webserver`.
|
|
||||||
|
|
||||||
Une attention particulière sera apporté au respect des différentes bonnes
|
Une attention particulière sera apportée au respect des différentes bonnes
|
||||||
pratiques vues en cours pour l'écriture de `Dockerfile`.
|
pratiques vues en cours pour l'écriture du `Dockerfile`.
|
||||||
|
@ -8,7 +8,7 @@ superflu : même pas d'éditeur de texte : ni vim, ni emacs, même pas `vi` !
|
|||||||
|
|
||||||
La première chose à faire est de télécharger la liste des paquets. En effet,
|
La première chose à faire est de télécharger la liste des paquets. En effet,
|
||||||
afin de ne pas livrer de superflu, la liste des paquets et son cache ne sont
|
afin de ne pas livrer de superflu, la liste des paquets et son cache ne sont
|
||||||
pas inclues dans le conteneur.
|
pas incluses dans le conteneur.
|
||||||
|
|
||||||
```
|
```
|
||||||
apt-get update
|
apt-get update
|
||||||
@ -16,7 +16,7 @@ apt-get update
|
|||||||
|
|
||||||
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. Afin de garder un environnement cohérent, il est recommandé de ne pas
|
||||||
utiliser le gestionnaire de paquets pour mettre à jour les paquets présent de
|
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 à
|
base, mais plutôt de contacter le mainteneur de l'image pour qu'il la mette à
|
||||||
jour.
|
jour.
|
||||||
|
|
||||||
@ -34,8 +34,7 @@ docker container ls
|
|||||||
```
|
```
|
||||||
|
|
||||||
Cette commande liste les conteneurs actifs. Notez le *Container ID* ainsi que
|
Cette commande liste les conteneurs actifs. Notez le *Container ID* ainsi que
|
||||||
le *NAMES* du conteneur du conteneur actuellement en cours d'installation de
|
le *NAMES* du conteneur actuellement en cours d'installation de `nano`.
|
||||||
`nano`.
|
|
||||||
|
|
||||||
Lorsque l'installation de `nano` est terminée, quittez l'image en tapant
|
Lorsque l'installation de `nano` est terminée, quittez l'image en tapant
|
||||||
`exit`.
|
`exit`.
|
||||||
@ -47,7 +46,7 @@ commencer directement de votre image avec `nano` :
|
|||||||
docker container commit CONTAINER my_nano
|
docker container commit CONTAINER my_nano
|
||||||
```
|
```
|
||||||
|
|
||||||
En remplaçant `CONTAINER` par le nom ou l'identifiant de votre
|
en remplaçant `CONTAINER` par le nom ou l'identifiant de votre
|
||||||
container. `my_nano` est le nom que vous voudrez utiliser à la place
|
container. `my_nano` est le nom que vous voudrez utiliser à la place
|
||||||
d'`ubuntu` :
|
d'`ubuntu` :
|
||||||
|
|
||||||
@ -56,4 +55,4 @@ docker container run -it my_nano /bin/bash
|
|||||||
```
|
```
|
||||||
|
|
||||||
Vous constatez cette fois que vous pouvez lancer `nano`, alors que vous ne
|
Vous constatez cette fois que vous pouvez lancer `nano`, alors que vous ne
|
||||||
pouvez toujours pas le faire dans un conteneur issue d'une image `ubuntu` !
|
pouvez toujours pas le faire dans un conteneur issu d'une image `ubuntu` !
|
||||||
|
Loading…
x
Reference in New Issue
Block a user