Update tuto
This commit is contained in:
parent
2fba9f3db6
commit
16c5f38a76
@ -17,11 +17,6 @@ General setup --->
|
||||
[*] Cpuset support
|
||||
[*] Include legacy /proc/<pid>/cpuset file
|
||||
[*] Simple CPU accounting cgroup subsystem
|
||||
[*] Resource counters
|
||||
[*] Memory Resource Controller for Control Groups
|
||||
[*] Memory Resource Controller Swap Extension
|
||||
[*] Memory Resource Controller Swap Extension enabled by default
|
||||
[*] Enable perf_event per-cpu per-container group (cgroup) monitoring
|
||||
[*] Group CPU scheduler --->
|
||||
[*] Group scheduling for SCHED_OTHER
|
||||
[*] Group scheduling for SCHED_RR/FIFO
|
||||
@ -39,7 +34,7 @@ General setup --->
|
||||
Device Drivers --->
|
||||
[*] Network device support --->
|
||||
<M> MAC-VLAN support
|
||||
<M> Virtual ethernet pair device
|
||||
<*> Virtual ethernet pair device
|
||||
Character devices --->
|
||||
-*- Unix98 PTY support
|
||||
[*] Support multiple instances of devpts
|
||||
@ -54,9 +49,10 @@ la configuration de votre noyau en utilisant la commande `lxc-checkconfig`.
|
||||
### Par le gestionnaire de paquets
|
||||
|
||||
Sous Debian et ses dérivés (Ubuntu, Mint, ...) le paquet et la commande ont été
|
||||
nommés `docker.io`. Vous pouvez vous créer un alias `alias docker=docker.io`.
|
||||
nommés `docker.io`. Vous pouvez vous créer un alias `alias docker=docker.io` si
|
||||
celui-ci n'a pas déjà été défini.
|
||||
|
||||
Sous les autres distribution, `docker` correspond a priori bien à la solution
|
||||
Sous les autres distributions, `docker` correspond a priori bien à la solution
|
||||
de virtualisation légère que l'on va utiliser.
|
||||
|
||||
### Manuellement
|
||||
@ -106,46 +102,44 @@ Votre distribution fournit sans doute un paquet `lxc`.
|
||||
|
||||
# Docker
|
||||
|
||||
Docker est un outil haut niveau permettant de faire fonctionner
|
||||
facilement les conteneurs.
|
||||
Docker est un outil haut niveau permettant de faire fonctionner facilement les
|
||||
conteneurs.
|
||||
|
||||
## Composition de Docker
|
||||
|
||||
Docker est un daemon lancé au démarrage de votre machine, avec lequel
|
||||
vous interagissez via un client qui se connecte au daemon au moyen
|
||||
d'une socket (le client peut donc être sur une machine distincte du
|
||||
daemon où sont exécutés les conteneurs).
|
||||
Docker est un daemon lancé au démarrage de votre machine, avec lequel vous
|
||||
interagissez via un client qui se connecte au daemon au moyen d'une socket (le
|
||||
client peut donc être sur une machine distincte du daemon où sont exécutés les
|
||||
conteneurs).
|
||||
|
||||
|
||||
## Mon premier conteneur
|
||||
|
||||
Afin de tester la bonne marche de votre installation, exécutez la
|
||||
commande :
|
||||
Afin de tester la bonne marche de votre installation, exécutez la commande :
|
||||
|
||||
```
|
||||
docker run hello-world
|
||||
```
|
||||
|
||||
Cette commande va automatiquement exécuter une série de commandes pour
|
||||
vous, comme indiqué dans le message affiché en retour :
|
||||
Cette commande va automatiquement exécuter une série de commandes pour vous,
|
||||
comme indiqué dans le message affiché en retour :
|
||||
|
||||
D'abord, le démon va rechercher s'il possède localement l'image
|
||||
*hello-world*. Si ce n'est pas le cas, il va aller la récupérer sur
|
||||
hub.docker.com. Ce site met à votre disposition un grand nombre
|
||||
d'images prêt à l'emploi : des systèmes de base comme Ubuntu, Debian,
|
||||
Centos, etc. jusqu'à des conteneurs prêts à l'emploi : le serveur web
|
||||
nginx, la base de données MySQL, un serveur node.js, etc.
|
||||
hub.docker.com. Ce site met à votre disposition un grand nombre d'images : des
|
||||
systèmes de base comme Ubuntu, Debian, Centos, etc. jusqu'à des conteneurs
|
||||
prêts à l'emploi : le serveur web nginx, la base de données MySQL, un serveur
|
||||
node.js, etc.
|
||||
|
||||
Vous pouvez directement utiliser le client pour rechercher une image
|
||||
sur le hub, en utilisant la commande `search` :
|
||||
Vous pouvez directement utiliser le client pour rechercher une image sur le
|
||||
hub, en utilisant la commande `search` :
|
||||
|
||||
```
|
||||
docker search mariadb
|
||||
```
|
||||
|
||||
Vous pouvez mettre à jour vos images locales ou simplement
|
||||
pré-télécharger des images depuis le hub en utilisant la commande
|
||||
`pull` :
|
||||
Vous pouvez mettre à jour vos images locales ou simplement pré-télécharger des
|
||||
images depuis le hub en utilisant la commande `pull` :
|
||||
|
||||
```
|
||||
docker pull ubuntu
|
||||
@ -159,58 +153,55 @@ créées vous-même), utilisez la commande `images` :
|
||||
docker images
|
||||
```
|
||||
|
||||
Vous devez constater la présence de deux images « Ubuntu », ayant un
|
||||
*TAG* différent. Souvent, il existe plusieurs versions d'une même
|
||||
image. Pour Ubuntu par exemple, vous avez la possibilité de lancer la
|
||||
version `vivid`, `trusty` ou `precise`.
|
||||
Vous devez constater la présence de deux images « Ubuntu », ayant un *TAG*
|
||||
différent. Souvent, il existe plusieurs versions d'une même image. Pour Ubuntu
|
||||
par exemple, vous avez la possibilité de lancer la version `vivid`, `trusty` ou
|
||||
`precise`.
|
||||
|
||||
Chaque image est identifiable par son *Image ID* unique, les noms
|
||||
d'images ainsi que leurs tags sont, comme les tags Git, une manière
|
||||
humainement plus simple de faire référence aux identifiants.
|
||||
Chaque image est identifiable par son *Image ID* unique, les noms d'images
|
||||
ainsi que leurs tags sont, comme les tags Git, une manière humainement plus
|
||||
simple de faire référence aux identifiants.
|
||||
|
||||
Chaque nom d'image possède au moins un tag associé: *latest*, c'est le
|
||||
tag qui est automatiquement recherché lorsque vous ne le précisez pas
|
||||
en lançant l'image
|
||||
Chaque nom d'image possède au moins un tag associé : *latest*, c'est le tag qui
|
||||
est automatiquement recherché lorsque vous ne le précisez pas en lançant
|
||||
l'image.
|
||||
|
||||
|
||||
## Exécuter un programme dans un conteneur
|
||||
|
||||
Maintenant que nous avons à notre disposition l'image d'un conteneur
|
||||
Ubuntu, lançons-la !
|
||||
Maintenant que nous avons à notre disposition l'image d'un conteneur Ubuntu,
|
||||
lançons-la !
|
||||
|
||||
La commande `run` de Docker prend comme derniers arguments le
|
||||
programme à lancer dans le conteneur ainsi que ses éventuels
|
||||
arguments. Essayons d'afficher un Hello World :
|
||||
La commande `run` de Docker prend comme derniers arguments le programme à
|
||||
lancer dans le conteneur ainsi que ses éventuels arguments. Essayons d'afficher
|
||||
un Hello World :
|
||||
|
||||
```
|
||||
docker run ubuntu /bin/echo "Hello World"
|
||||
```
|
||||
|
||||
Dans notre exemple, c'est bien le `/bin/echo` présent dans le
|
||||
conteneur qui est appelé (et non pas le programme `/bin/echo` de la
|
||||
machine hôte qui est transféré dans le conteneur).
|
||||
Dans notre exemple, c'est bien le `/bin/echo` présent dans le conteneur qui est
|
||||
appelé (et non pas le programme `/bin/echo` de la machine hôte qui est
|
||||
transféré dans le conteneur).
|
||||
|
||||
|
||||
## Modifier un conteneur
|
||||
|
||||
À chaque fois que vous lancez un `run`, un nouveau conteneur est créé
|
||||
à partir de l'image que vous précisez (via un mécanisme de
|
||||
Copy-On-Write, c'est donc très rapide et ne consomme pas beaucoup
|
||||
d'espace disque). Cela signifie que lorsque vous exécutez une commande
|
||||
modifiant le contenu d'un conteneur, cela ne modifie pas l'image de
|
||||
base, mais crée une nouvelle image. Que vous pouvez ensuite utiliser
|
||||
comme image de base.
|
||||
À chaque fois que vous lancez un `run`, un nouveau conteneur est créé à partir
|
||||
de l'image que vous précisez (via un mécanisme de Copy-On-Write, c'est donc
|
||||
très rapide et ne consomme pas beaucoup d'espace disque). Cela signifie que
|
||||
lorsque vous exécutez une commande modifiant le contenu d'un conteneur, cela ne
|
||||
modifie pas l'image de base, mais crée une nouvelle image. Que vous pouvez
|
||||
ensuite utiliser comme image de base.
|
||||
|
||||
Commençons par entrer dans un nouveau conteneur pour modifier l'image
|
||||
:
|
||||
Commençons par entrer dans un nouveau conteneur pour modifier l'image :
|
||||
|
||||
```
|
||||
docker run -it ubuntu /bin/bash
|
||||
```
|
||||
|
||||
Vous voilà maintenant dans le conteneur ! Il est assez épuré, il n'y a
|
||||
rien de superflu : vous n'avez pas d'éditeur de texte : ni vim, ni
|
||||
emacs, même pas vi !
|
||||
Vous voilà maintenant dans le conteneur ! Il est assez épuré, il n'y a rien de
|
||||
superflu : vous n'avez pas d'éditeur de texte : ni vim, ni emacs, même pas vi !
|
||||
|
||||
La première chose à faire est de mettre à jour la liste des paquets :
|
||||
|
||||
@ -218,11 +209,10 @@ La première chose à faire est de mettre à jour la liste des paquets :
|
||||
apt-get update
|
||||
```
|
||||
|
||||
Il peut arriver que des paquets présents dans l'image officielle 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, mais plutôt de contacter le mainteneur de l'image
|
||||
pour qu'il la mette à jour.
|
||||
Il peut arriver que des paquets présents dans l'image officielle 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, mais plutôt
|
||||
de contacter le mainteneur de l'image pour qu'il la mette à jour.
|
||||
|
||||
Installons maintenant un programme :
|
||||
|
||||
@ -230,21 +220,22 @@ Installons maintenant un programme :
|
||||
apt-get install nano
|
||||
```
|
||||
|
||||
En attendant la fin de l'installation, jetez un œil à la commande dans
|
||||
un autre terminal :
|
||||
En attendant la fin de l'installation, jetez un œil à la commande dans un autre
|
||||
terminal :
|
||||
|
||||
```
|
||||
docker ps
|
||||
```
|
||||
|
||||
Cette commande liste les conteneurs actifs. Notez le *Container ID*
|
||||
ainsi que le *NAMES* du conteneur du conteneur actuellement en cours
|
||||
d'installation de nano.
|
||||
Cette commande liste les conteneurs actifs. Notez le *Container ID* ainsi que
|
||||
le *NAMES* du conteneur du conteneur actuellement en cours d'installation de
|
||||
nano.
|
||||
|
||||
Lorsque l'installation de `nano` est terminée, quittez l'image en tapant `exit`.
|
||||
Lorsque l'installation de `nano` est terminée, quittez l'image en tapant
|
||||
`exit`.
|
||||
|
||||
Sauvegardez votre image modifiée avec la commande `commit` pour
|
||||
pouvoir commencer directement de votre image avec `nano` :
|
||||
Sauvegardez votre image modifiée avec la commande `commit` pour pouvoir
|
||||
commencer directement de votre image avec `nano` :
|
||||
|
||||
```
|
||||
docker commit CONTAINER my_nano
|
||||
@ -258,18 +249,16 @@ d'`ubuntu` :
|
||||
docker run -it my_nano /bin/bash
|
||||
```
|
||||
|
||||
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` !
|
||||
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` !
|
||||
|
||||
|
||||
## Dockerfile
|
||||
|
||||
Pour construire une image, vous n'êtes pas obligé de passer par une
|
||||
série de commits. Docker dispose d'un mécanisme permettant
|
||||
d'automatiser la construction de nouvelles images. Vous pouvez arriver
|
||||
au même résultat que ce que l'on a réussi à faire précédemment en
|
||||
utilisant le Docker file suivant :
|
||||
Pour construire une image, vous n'êtes pas obligé de passer par une série de
|
||||
commits. Docker dispose d'un mécanisme permettant d'automatiser la construction
|
||||
de nouvelles images. Vous pouvez arriver au même résultat que ce que l'on a
|
||||
réussi à faire précédemment en utilisant le Docker file suivant :
|
||||
|
||||
```
|
||||
FROM ubuntu:latest
|
||||
@ -278,17 +267,36 @@ RUN apt-get update
|
||||
RUN apt-get install -y nano
|
||||
```
|
||||
|
||||
La syntaxe d'un `Dockerfile` est simple, le premier mot de chaque
|
||||
ligne est l'intitulé d'une instruction (que l'on écrit généralement en
|
||||
majuscule), elle est suivie de ses arguments.
|
||||
La syntaxe d'un `Dockerfile` est simple, le premier mot de chaque ligne est
|
||||
l'intitulé d'une instruction (que l'on écrit généralement en majuscule), elle
|
||||
est suivie de ses arguments.
|
||||
|
||||
Dans notre exemple, nous utilisons `FROM` qui indique une image de
|
||||
départ à utiliser ; `RUN` est une commande qui sera exécutée dans le
|
||||
conteneur.
|
||||
Dans notre exemple, nous utilisons `FROM` qui indique une image de départ à
|
||||
utiliser ; `RUN` est une commande qui sera exécutée dans le conteneur, dans le
|
||||
but de le construire. Chaque ligne est exécutée indépendamment des autres ;
|
||||
cela signifie que l'exemple suivant ne fonctionne pas :
|
||||
|
||||
Pour lancer la construction de la nouvelle image, créer un nouveau
|
||||
dossier ne contenant que votre fichier `Dockerfile`, placez-vous
|
||||
dedans, puis utilisez la commande `build` :
|
||||
```
|
||||
COPY db.sql /db.sql
|
||||
RUN service mysqld start
|
||||
RUN mysql -u root -p toor virli < /db.sql
|
||||
```
|
||||
|
||||
Cet exemple ne fonctionne pas car le serveur MySQL est lancé dans le premier
|
||||
RUN, n'est plus lancé au moment du deuxième RUN. Pour avoir le résultat
|
||||
escompté, il faut exécuter les commandes ensemble :
|
||||
|
||||
```
|
||||
COPY db.sql /db.sql
|
||||
RUN service mysqld start && mysql -u root -p toor virli < /db.sql
|
||||
```
|
||||
|
||||
Après le `RUN`, MySQL sera de nouveau arrêté, si on veut l'utiliser dans le
|
||||
conteneur, il ne faudra pas oublier lancer le processus.
|
||||
|
||||
Pour lancer la construction de la nouvelle image, créer un nouveau dossier ne
|
||||
contenant que votre fichier `Dockerfile`, placez-vous dedans, puis utilisez la
|
||||
commande `build` :
|
||||
|
||||
```
|
||||
docker build --tag=my_editor .
|
||||
@ -301,8 +309,8 @@ constater l'existence de notre éditeur favori :
|
||||
docker run -it my_editor /bin/bash
|
||||
```
|
||||
|
||||
Consultez <https://docs.docker.com/reference/builder/> pour la liste
|
||||
complète des instructions reconnues.
|
||||
Consultez <https://docs.docker.com/reference/builder/> pour la liste complète
|
||||
des instructions reconnues.
|
||||
|
||||
|
||||
## Exposer des ports
|
||||
|
Loading…
x
Reference in New Issue
Block a user