Commit bf946a04 authored by CHAMONT David's avatar CHAMONT David
Browse files

Move to EnBarque

parent 8c843096
# Installation de Docker sur une machine sous Linux
Docker est une plateforme qui va vous permettre d'exécuter du code "linux" à
l'intérieur d'un conteneur indépendamment de la machine sur laquelle vous êtes.
Un conteneur ressemble à une machine virtuelle sauf qu'il n'embarque pas
tout un système d'exploitation avec lui, ce qui lui permet de s'exécuter en
quelque secondes et d'être beaucoup plus léger
(*source : [Uhsac](http://putaindecode.io/fr/articles/docker/)*).
* prérequis : connaissance de Linux.
* hauteur du plongeoir : 1m.
* maître(s) nageur(s) : [Sébastien Binet](http://informatique.in2p3.fr/?q=user/296),
[Fabrice Jammes](http://informatique.in2p3.fr/?q=user/235),
[Antoine Pérus](http://informatique.in2p3.fr/?q=user/21),
[David Chamont](http://informatique.in2p3.fr/?q=user/3).
* <img src="img/sebastien.jpeg" height=50>
<img src="img/fabrice.jpeg" height=50>
<img src="img/antoine.png" height=50>
<img src="img/david.jpeg" height=50>
<!---
Some tutorials strongly recommend to put the users in a "docker" group:
sudo usermod -aG docker $(whoami)
-->
---
## Installation de base
C'est [ici](http://www.docker.com/products/docker#/linux).
Notez que votre noyau linux ne doit pas être trop ancien
(commande `uname -r`) :
* Ubuntu : 3.11.0-15-generic
* RHEL : 3.10.0-229.el7.x86_64
* Centos : 3.10.0-229.el7.x86_64
* Fedora : 3.19.5-100.fc21.x86_64
* Debian : au moins 3.10
Pour vérifier que votre Docker est opérationnel, ouvrez une fenêtre de
commande et tapez `docker run hello-world` :
```
> docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker Hub account:
https://hub.docker.com
For more examples and ideas, visit:
https://docs.docker.com/engine/userguide/
```
A ce stade, avant de regarder les sections ci-dessous, qui sont assez dépendantes
de l'OS, nous vous recommandons de vous familiariser avec les concepts génériques
de Docker en faisant le plongeon [Docker_01_Run](Docker_01_Run/README.md).
---
## Partager des fichiers entre machine hôte et conteneur
Si vous souhaitez éditer certains fichiers avec vos outils préférés sur votre
machine hôte, et que ces fichiers soient visibles depuis un conteneur,
il faut réaliser une forme de "montage" au lancement du conteneur.
Par exemple, si je souhaite exécuter un shell dans un conteneur `busybox` (unix allégé),
et que le répertoire courant, `$PWD`, soit visible au sein du conteneur en
tant que `/piscine` :
```
docker run --rm -it -v $PWD:/piscine -w /piscine busybox sh
```
Essayez et vérifiez que vous pouvez créer et modifier des fichiers dans l'un
ou l'autre monde (la machine hôte ou le conteneur), et que les résultats sont visibles
des deux côtés.
---
## X11 forwarding
Si vous avez besoin de faire tourner dans un conteneur Docker une application graphique,
il faut qu'elle puisse envoyer ses instructions à un serveur X11 s'exécutant sur
la machine hôte.
Pour tester que votre configuration fonctionne, vous pourrez essayer de faire
exécuter l'image `gns3/xeyes`, qui se contente de faire apparaitre
deux yeux sur votre écran.
Si la machine hôte est sous Linux, il suffit de propager la variable DISPLAY
(option -e) au conteneur ainsi qu'un accès au répertoire `/tmp/.X11-unix`.
```
export DISPLAY=:0
xhost +
docker run -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix:rw gns3/xeyes
```
---
## Pour aller plus loin
Essayez le [tutoriel officiel de Docker](https://docs.docker.com/engine/getstarted/).
\ No newline at end of file
# Installation de Docker sur une machine sous MacOSX
Docker est une plateforme qui va vous permettre d'exécuter du code "linux" à
l'intérieur d'un conteneur indépendamment de la machine sur laquelle vous êtes.
Un conteneur ressemble à une machine virtuelle sauf qu'il n'embarque pas
tout un système d'exploitation avec lui, ce qui lui permet de s'exécuter en
quelque secondes et d'être beaucoup plus léger
(*source : [Uhsac](http://putaindecode.io/fr/articles/docker/)*).
* prérequis : connaissance de MacOSX.
* hauteur du plongeoir : 1m.
* maître(s) nageur(s) : [David Chamont](http://informatique.in2p3.fr/?q=user/3),
* [Patrick Le Jeannic](http://informatique.in2p3.fr/?q=user/306),
[Sébastien Binet](http://informatique.in2p3.fr/?q=user/296),
[Fabrice Jammes](http://informatique.in2p3.fr/?q=user/235),
[Antoine Pérus](http://informatique.in2p3.fr/?q=user/21).
* <img src="img/patrick.jpeg" height=50>
<img src="img/sebastien.jpeg" height=50>
<img src="img/fabrice.jpeg" height=50>
<img src="img/antoine.png" height=50>
<img src="img/david.jpeg" height=50>
Si votre matériel est trop vieux (< 2010), vous serez obligé d'utiliser une
ancienne mouture de Docker dite "Docker Toolbox", reposant sur VirtualBox.
Basculez sur [cette page](../../Docker_00_MacOld/README.md).
---
## Installation de base
La [nouvelle mouture] (http://www.docker.com/products/docker#/mac) de Docker
pour MacOSX, dite "Docker for Mac", exploite une couche de virtualisation
légère propre à MacOSX (HyperKit), et vous permet d'utiliser exactement les mêmes
commandes Docker que vos collègues Linux.
Plutôt qu'une installation graphique, on peut utiliser [Homebrew](http://brew.sh/)
(*The missing package manager for OS X*) pour la gestion de son installation :
```
$> brew update
$> brew cleanup && brew cask cleanup
$> brew cask install docker
```
Vous trouverez [ici](https://docs.docker.com/docker-for-mac/)
des informations plus complètes sur les différentes variantes de Docker.
Pour vérifier que votre Docker est opérationnel :
* ouvrez un explorateur et lancez l’application docker.
Si c’est la première fois que vous le lancez, plusieurs questions
vous seront posées ;
* ouvrez un terminal et tapez `docker run hello-world` :
```
> docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker Hub account:
https://hub.docker.com
For more examples and ideas, visit:
https://docs.docker.com/engine/userguide/
```
Si vous tester des applications très gourmandes en ressources, vous pourrez
être amené à augmenter les 2 Go de mémoire vive qui sont réservés par défaut,
en consultant les préférences de Docker.
A ce stade, avant de regarder les sections ci-dessous, qui sont assez dépendantes
de l'OS, nous vous recommandons de vous familiariser avec les concepts génériques
de Docker en faisant le plongeon [Docker_01_Run](Docker_01_Run/README.md).
---
## Partager des fichiers entre machine hôte et conteneur
Si vous souhaitez éditer certains fichiers avec vos outils préférés sur votre
machine hôte, et que ces fichiers soient visibles depuis un conteneur,
il faut réaliser une forme de "montage" au lancement du conteneur.
Par exemple, si je souhaite exécuter un shell dans un conteneur `busybox` (unix allégé),
et que le répertoire courant, `$PWD`, soit visible au sein du conteneur en
tant que `/piscine` :
```
docker run --rm -it -v $PWD:/piscine -w /piscine busybox sh
```
Essayez et vérifiez que vous pouvez créer et modifier des fichiers dans l'un
ou l'autre monde (la machine hôte ou le conteneur), et que les résultats sont visibles
des deux côtés.
ATTENTION : dans les préférences de Docker, il y a une liste restreinte des répertoires
qui ont le droit d'être partagés. L'option -v ne fonctionne que si vous restez dans
cette liste. Dans l'exemple ci-dessus, vérifiez que votre $PWD est autorisé.
Sinon, ajouter le répertoire concerné ou l'un de ses parents dans la liste.
---
## X11 forwarding
Si vous avez besoin de faire tourner dans un conteneur Docker une application graphique,
il faut qu'elle puisse envoyer ses instructions à un serveur X11 s'exécutant sur
la machine hôte.
Pour tester que votre configuration fonctionne, vous pourrez essayer de faire
exécuter l'image `gns3/xeyes`, qui se contente de faire apparaitre
deux yeux sur votre écran.
Si la machine hôte est sous Linux, il suffit de propager la variable DISPLAY
au conteneur ainsi qu'un accès au répertoire `/tmp/.X11-unix`.
```
export DISPLAY=:0
xhost +
docker run -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix:rw gns3/xeyes
```
Sur MacOSX (avec Docker nouvelle mouture), c'est un peu plus chaud.
D'abord, pour disposer d'un serveur X11, il faut installer XQuartz,
et autoriser les connexions externes dans ses préférences de sécurité.
Si vous avez la version (récente) 2.7.9 de XQuartz, il y a un bug à corriger
à la main.... après la ligne 107 du fichier `/opt/X11/bin/startx`
(`defaultserverargs="$defaultserverargs -nolisten tcp"`) ajoutez les deux
lignes suivantes et redémarrez XQuartz en priant :
```
else
defaultserverargs="$defaultserverargs -listen tcp"
```
Nous avons constaté qu'avec la version 2.7.10_rc2, il n'est plus nécessaire
de corriger `/opt/X11/bin/startx`.
*Sources : [forums.docker.com](https://forums.docker.com/t/x11-forwarding-issues-with-release-10/11252),
[bugs.freedesktop.org](https://bugs.freedesktop.org/show_bug.cgi?id=95379).*
Ensuite, sans doute à cause de la couche "xhyve",
le conteneur doit récupérer un DISPLAY qui contient le numéro IP
de la machine hôte. Pour récupérer ce numéro IP, il faut scruter
les lignes "inet" dans la sortie de la commande `ifconfig`. Une
fois que vous l'avez :
```
export DISPLAY=IP:0
xhost + IP
docker run -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix:rw gns3/xeyes
```
Si cela ne suffit pas... tentez un dernier recours à l'application socat pour
faire suivre le flux X11 du conteneur vers l'hôte :
```
brew install socat
socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\"
```
---
## Problèmes divers
### No space left on device
Si vous rencontrez ce message avec de "grosses" images, alors que par ailleurs
vous avez fait du menage dans vos images et vos conteneurs, il est possible
qu'une installation ancienne de "Docker Toolbox" ait laissé sur votre
machine des paramètres de configuration limitant exagéremment la taille
accordée au système de fichier de vos images. La procédure ci-dessous est
à utiliser en dernier recours, car elle va **détruire toutes les images**
actuellement disponibles localement :
1. Quit Docker for Mac
1. rm ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
1. Restart Docker for Mac
Source : https://github.com/docker/for-mac/issues/135
### Clock skew
Quand votre ordinateur sort de veille, l'horloge de la machine virtuelle de
Docker n'est pas remise à jour, ce qui provoque un décalage d'horloge entre
votre machine réelle et vos conteneurs. Toute opération reposant sur le temps
s'en trouve affectée, comme d'éditer des fichiers sur votre machine réelle et
lancer un make dans un conteneur.
Pour mettre en évidence le problème :
```docker run --rm ubuntu date -u && date -u```
Quelques propositions de solutions ponctuelles :
* Redémarrer Docker...
* Lancer une commande `date` en tant que root dans un conteneur, ce qui aurait
pour effet de mettre à jour l'heure de la machine virtuelle sous-jacente :
```docker run --rm --privileged ubuntu date -s "`date -uR`"```
Sources :
* https://forums.docker.com/t/syncing-clock-with-host/10432/22
* https://github.com/docker/for-mac/issues/17
### Lenteur d'accès aux petits fichiers partagés
Le système de partage de fichiers entre la machine réelle et la machine
virtuelle peut s'avérer dramatiquement lent si vous manipulez beaucoup
de petits fichiers.
---
## Pour aller plus loin
Essayez le [tutoriel officiel de Docker](https://docs.docker.com/engine/getstarted/).
# Installation de Docker sur une machine MacOSX ancienne
Docker est une plateforme qui va vous permettre d'exécuter du code "linux" à
l'intérieur d'un conteneur indépendamment de la machine sur laquelle vous êtes.
Un conteneur ressemble à une machine virtuelle sauf qu'il n'embarque pas
tout un système d'exploitation avec lui, ce qui lui permet de s'exécuter en
quelque secondes et d'être beaucoup plus léger
(*source : [Uhsac](http://putaindecode.io/fr/articles/docker/)*).
* prérequis : connaissance de MacOSX.
* hauteur du plongeoir : 1m.
* maître(s) nageur(s) : [Patrick Le Jeannic](http://informatique.in2p3.fr/?q=user/306),
[Sébastien Binet](http://informatique.in2p3.fr/?q=user/296),
[Fabrice Jammes](http://informatique.in2p3.fr/?q=user/235),
[Antoine Pérus](http://informatique.in2p3.fr/?q=user/21),
[David Chamont](http://informatique.in2p3.fr/?q=user/3).
* <img src="img/patrick.jpeg" height=50>
<img src="img/sebastien.jpeg" height=50>
<img src="img/fabrice.jpeg" height=50>
<img src="img/antoine.png" height=50>
<img src="img/david.jpeg" height=50>
Si votre matériel est récent (> 2010), il est préférable d'utiliser la
nouvelle mouture de Docker dite "Docker for Mac".
Basculez sur [cette page](../../Docker_00_Mac/README.md).
---
## Installation de base
Si votre matériel est trop vieux (< 2010), vous êtes obligés
d'utiliser l'[ancienne mouture de docker](https://www.docker.com/products/docker-toolbox),
dite "Docker Toolbox", reposant sur VirtualBox.
Plutôt qu'une installation graphique, on peut utiliser [Homebrew](http://brew.sh/)
(*The missing package manager for OS X*) pour la gestion de son installation :
```
> brew update
> brew cleanup && brew cask cleanup
> brew cask install docker-toolbox
> docker-machine create --driver virtualbox default
```
Vous trouverez [ici](https://docs.docker.com/docker-for-mac/)
des informations plus complètes sur les différentes variantes de Docker.
Vous aurez besoin de créer, une fois pour toutes, la machine virtuelle qui
tournera sur VirtualBox. Cela peut se faire au sein d'un
`Docker Quickstart Terminal` (disponible dans les menus), avec la
commande `docker-machine create default --driver virtualbox`.
A chaque redémarrage de votre ordinateur, il faudra relancer cette
machine virtuelle avec la commande `docker-machine start default`.
Pour modifier les caractéritiques de cette machine, pour des applications
gourmande en ressources :
```
docker-machine stop
VBoxManage modifyvm default --cpus 2
VBoxManage modifyvm default --memory 4096
docker-machine start
```
**IMPORTANT : il est nécessaire, dans chaque nouveau "shell", de mettre à
jour l'environnement avec la commande `eval "$(docker-machine env default)`**
Pour vérifier que votre Docker est opérationnel, ouvrez une fenêtre de
commande et tapez `docker run hello-world` :
```
> docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker Hub account:
https://hub.docker.com
For more examples and ideas, visit:
https://docs.docker.com/engine/userguide/
```
A ce stade, avant de regarder les sections ci-dessous, qui sont assez dépendantes
de l'OS, nous vous recommandons de vous familiariser avec les concepts génériques
de Docker en faisant le plongeon [Docker_01_Run](Docker_01_Run/README.md).
---
## Partager des fichiers entre machine hôte et conteneur
Si vous souhaitez éditer certains fichiers avec vos outils préférés sur votre
machine hôte, et que ces fichiers soient visibles depuis un conteneur,
il faut réaliser une forme de "montage" au lancement du conteneur.
Par exemple, si je souhaite exécuter un shell dans un conteneur `busybox` (unix allégé),
et que le répertoire courant, `$PWD`, soit visible au sein du conteneur en
tant que `/piscine` :
```
> docker run --rm -it -v $PWD:/piscine -w /piscine busybox sh
```
Essayez et vérifiez que vous pouvez créer et modifier des fichiers dans l'un
ou l'autre monde (la machine hôte ou le conteneur), et que les résultats sont visibles
des deux côtés.
ATTENTION : dans les préférences de Docker, il y a une liste restreinte des répertoires
qui ont le droit d'être partagés. L'option -v ne fonctionne que si vous restez dans
cette liste. Dans l'exemple ci-dessus, vérifiez que votre $PWD est autorisé.
Sinon, ajouter le répertoire concerné ou l'un de ses parents dans la liste.
---
## X11 forwarding
Si vous avez besoin de faire tourner dans un conteneur Docker une application graphique,
il faut qu'elle puisse envoyer ses instructions à un serveur X11 s'exécutant sur
la machine hôte.
Pour tester que votre configuration fonctionne, vous pourrez essayer de faire
exécuter l'image `gns3/xeyes`, qui se contente de faire apparaitre
deux yeux sur votre écran.
### XQuartz
D'abord, pour disposer d'un serveur X11, il faut installer XQuartz,
et autoriser les connexions externes dans ses préférences de sécurité.
Si vous avez la version (récente) 2.7.9 de XQuartz, il y a un bug à corriger
à la main.... après la ligne 107 du fichier `/opt/X11/bin/startx`
(`defaultserverargs="$defaultserverargs -nolisten tcp"`) ajoutez les deux
lignes suivantes et redémarrez XQuartz en priant :
```
else
defaultserverargs="$defaultserverargs -listen tcp"
```
Nous avons constaté qu'avec la version 2.7.10_rc2, il n'est plus nécessaire
de corriger `/opt/X11/bin/startx`.
*Sources : [forums.docker.com](https://forums.docker.com/t/x11-forwarding-issues-with-release-10/11252),
[bugs.freedesktop.org](https://bugs.freedesktop.org/show_bug.cgi?id=95379).*
### DISPLAY
Ensuite, le conteneur aura besoin de récupérer un DISPLAY qui contient le
numéro IP de la machine hôte. Pour récupérer ce numéro IP, il faut scruter
les lignes "inet" dans la sortie de la commande `ifconfig`. Une
fois que vous l'avez :
```
> export DISPLAY=IP:0
> xhost +
```
### Socat
Enfin, il faut avoir recours à l'application socat pour faire suivre le
flux X11 du conteneur vers l'hôte :
```
> brew install socat
> socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\"
```
Normalement, il suffit maintenant de lancer un conteneur en lui
propageant la variable DISPLAY ainsi qu'un accès au répertoire `/tmp/.X11-unix` :
```
> docker run -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix:rw gns3/xeyes
```
A VERIFIER : `xhost + $(docker-machine ip default)`
---
## Pour aller plus loin
Essayez le [tutoriel officiel de Docker](https://docs.docker.com/engine/getstarted/).
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment