\newpage

Installation
============

## Prérequis

Docker repose sur plusieurs techniques implémentés dans les récents noyaux
Linux. Nous consacrerons les prochains cours à comprendre leurs
fonctionnement. Ces techniques ne sont pas limitées à une architecture de
microprocesseur spécifique (comme peuvent l'être les instructions de
virtualisation nécessaire pour rendre les hyperviseurs attractifs) ; cependant
la communauté autour de Docker utilisant principalement l'architecture `amd64`,
c'est sur cette dernière que Docker pourra être exploité à son plein potentiel.

Avant de continuer, assurez-vous que votre machine a bien démarré sur un noyau
64 bits. Le retour de la commande `uname -m` doit vous indiquer :

```
x86_64
```

Assurez-vous également d'avoir un noyau récent, avec la commande `uname -r` :

```
4.7.2-gentoo
```

Vous ne pourrez pas utiliser Docker avec un noyau antérieur à la version 3.10.


## Par le gestionnaire de paquets

En général, votre distribution mettra à votre disposition une version de Docker
plus ou moins récente. Sous Debian et ses dérivés (Ubuntu, Mint, ...) le paquet
a été nommé `docker.io`.

Si dans un environnement de production, on préférera sans doute utiliser une
version déjà bien éprouvée, pour ce cours, nous allons avoir besoin de la
dernière version disponible. Référez-vous à la documentation officielle
correspondant à votre distribution :

<https://docs.docker.com/engine/installation/linux/>

Installez également le paquet `docker-compose`.


## Vérifier la bonne marche de l'installation

Vous devriez maintenant être capable de lancer la commande suivante :

```
docker version
```

Une sortie similaire au bloc suivant devrait apparaître sur votre écran :

```
Client:
 Version:      1.12.1
 API version:  1.24
 Go version:   go1.7
 Git commit:   23cf638
 Built:
 OS/Arch:      linux/amd64

Server:
 Version:      1.12.1
 API version:  1.24
 Go version:   go1.7
 Git commit:   23cf638
 Built:
 OS/Arch:      linux/amd64
```

### `no such file or directory`?

Si vous avez cette erreur : `dial unix /var/run/docker.sock: no such file or
directory.`, le deamon n'est sans doute pas lancé. Lancez-le :

```
sudo service docker restart
```


### `permission denied`?

Si vous avez cette erreur : `dial unix /var/run/docker.sock: permission
denied.`, ajoutez votre utilisateur au groupe `docker` et **relancer votre
session** :

```
sudo gpasswd -a $USER docker
```

**Attention :** cette action n'est pas anodine d'un point de vue sécurité :
<https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface>


## Rendu

### Questions

1. Dans quel langage Docker a-t-il été écrit ?

1. Décrivez une méthode permettant à un utilisateur (non-root), présent dans le
   groupe `docker`, d'effectuer une action privilégiée impactant la machine
   hôte.
