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