tuto wip
This commit is contained in:
parent
7d680b35ef
commit
d900d3f5b8
6
tutorial/Makefile
Normal file
6
tutorial/Makefile
Normal file
@ -0,0 +1,6 @@
|
||||
all: tutorial.pdf
|
||||
|
||||
.md.pdf:
|
||||
pandoc --latex-engine=xelatex --toc --normalize -o $@ $<
|
||||
|
||||
.SUFFIXES: .md .tex .pdf
|
247
tutorial/tutorial.md
Normal file
247
tutorial/tutorial.md
Normal file
@ -0,0 +1,247 @@
|
||||
# Installation
|
||||
|
||||
# Docker
|
||||
|
||||
Docker est un outil haut niveau permettant de faire fonctionner
|
||||
facilement les conteneurs.
|
||||
|
||||
## Composition de Docker
|
||||
|
||||
Docker est un deamon lancé au démarrage de votre machine, avec lequel
|
||||
vous interagissez via un client qui se connecte au deamon au moyen
|
||||
d'une socket (le client peut donc être sur une machine distincte du
|
||||
deamon où sont exécutés les conteneurs).
|
||||
|
||||
|
||||
## Mon premier conteneur
|
||||
|
||||
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 :
|
||||
|
||||
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.
|
||||
|
||||
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` :
|
||||
|
||||
```
|
||||
docker pull ubuntu
|
||||
```
|
||||
|
||||
Pour consulter la liste des images dont vous disposez localement (soit
|
||||
parce que vous les avez téléchargées, soit parce que vous les avez
|
||||
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`.
|
||||
|
||||
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
|
||||
|
||||
|
||||
## Exécuter un programme dans un conteneur
|
||||
|
||||
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 :
|
||||
|
||||
```
|
||||
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).
|
||||
|
||||
|
||||
## 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.
|
||||
|
||||
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 !
|
||||
|
||||
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.
|
||||
|
||||
Installons maintenant un programme :
|
||||
|
||||
```
|
||||
apt-get install nano
|
||||
```
|
||||
|
||||
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.
|
||||
|
||||
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` :
|
||||
|
||||
```
|
||||
docker commit CONTAINER my_nano
|
||||
```
|
||||
|
||||
En remplaçant `CONTAINER` par le nom ou l'identifiant de votre
|
||||
container. `my_nano` est le nom que vous voudrez utiliser à la place
|
||||
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` !
|
||||
|
||||
|
||||
## 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 :
|
||||
|
||||
```
|
||||
FROM ubuntu:latest
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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 -name=my_editor .
|
||||
```
|
||||
|
||||
Une fois la construction de l'image terminée, vous pouvez la lancer et
|
||||
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.
|
||||
|
||||
|
||||
## Exposer des ports
|
||||
|
||||
Construisons maintenant un conteneur avec un serveur web :
|
||||
|
||||
```
|
||||
FROM my_editor
|
||||
|
||||
RUN apt-get update
|
||||
RUN apt-get install -y nginx
|
||||
|
||||
EXPOSE 80
|
||||
```
|
||||
|
||||
L'instruction `EXPOSE` sera traité plus tard par le client Docker. Il
|
||||
s'agit de préciser les ports sur lesquels votre image écoute.
|
||||
|
||||
En utilisant l'option `-P` du `run`, vous allez pouvoir assigner une
|
||||
redirection de port aléatoire sur la machine hôte vers votre
|
||||
conteneur :
|
||||
|
||||
```
|
||||
docker build -name=my_webserver .
|
||||
docker run -it -P my_webserver /bin/bash
|
||||
service nginx start
|
||||
```
|
||||
|
||||
À vous de jouer : utilisez l'instruction `COPY` pour afficher votre
|
||||
propre `index.html` remplaçant celui installé de base par nginx.
|
||||
|
||||
|
||||
## Lancement de commande automatique
|
||||
|
||||
Vous pouvez placer dans un `Dockerfile` une instruction `CMD`
|
||||
|
||||
CMD nginx -g "daemon off;"
|
||||
|
||||
## Lier les conteneurs
|
||||
|
||||
## Data only container
|
||||
|
||||
## Ambasador
|
||||
|
||||
|
||||
# LXC
|
Loading…
Reference in New Issue
Block a user