\newpage

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

## Prérequis

Docker repose sur plusieurs techniques implémentées dans les récents noyaux
Linux. Nous consacrerons les prochains cours à comprendre leur
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 :

<div lang="en-US">
```
    x86_64
```
</div>

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

<div lang="en-US">
```
    4.18.11-gentoo
```
</div>

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`](https://packages.debian.org/sid/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/install/linux/docker-ce/debian/>


### Et Kali Linux alors ?

Kali étant basée sur Debian, référez-vous à la procédure d'installation de
Debian *Jessie or newer*.


## Windows et macOS

Bien que les fonctionnalités de contenerisation de Docker que nous utiliserons
ne soient disponibles que sous Linux, il est possible d'utiliser Docker de
manière déportée : le daemon Docker tournera dans une VM Linux, mais vous
pourriez interagir avec lui via votre ligne de commande habituelle.

Téléchargez la version correspondante à votre système d'exploitation :

* [Docker for Mac](https://store.docker.com/editions/community/docker-ce-desktop-mac)
* [Docker for Windows](https://store.docker.com/editions/community/docker-ce-desktop-windows)

Une fois l'installation terminée, lancez l'application : elle ajoutera une
icône dans la zone de notification, vous permettant de contrôler l'exécution de
la machine virtuelle sous-jacente.


## Évaluation en ligne

Si vous rencontrez des difficultés pour vous lancer, le projet
[Play With Docker](https://labs.play-with-docker.com/) vous donne accès à
un bac à sable dans lequel vous pourrez commencer à faire ce TP.


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

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

<div lang="en-US">
```
    docker version
```
</div>

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

<div lang="en-US">
```
    Client:
     Version:           18.06.1-ce
     API version:       1.38
     Go version:        go1.10.3
     Git commit:        e68fc7a
     Built:             Sun Sep  9 10:14:56 2018
     OS/Arch:           linux/amd64
     Experimental:      false

    Server:
     Engine:
      Version:          18.06.1-ce
      API version:      1.38 (minimum version 1.12)
      Go version:       go1.10.3
      Git commit:       e68fc7a
      Built:            Sun Sep  9 10:13:21 2018
      OS/Arch:          linux/amd64
      Experimental:     true
```
</div>


### Versions de Docker

Historiquement, Docker est un projet open-source. Depuis quelques années, le
business-model de la société a évolué et ils proposent désormais deux
éditions : *Community Edition* et *Enterprise Edition*. La seconde est payante
et possède un certain nombre d'atouts pour faciliter son adoption en entreprise
(notamment pas mal d'interfaces graphiques, etc.). Le cœur de la technologie
est quant à lui entièrement présent dans l'édition communautaire.

Depuis mars 2017, les numéros de version de Docker sont tirés de l'année et
du mois de parution (comme on a l'habitude avec Ubuntu 16.04 par exemple). Le
rythme actuel de parution est d'une version par trimestre (mars, juin,
septembre, décembre).[^versions]

[^versions]: Tous les détails sur les versions (CE/EE et numérotation,
    fréquences, ...) sont résumés dans cette annonce :
    <https://blog.docker.com/2017/03/docker-enterprise-edition/>


### `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 :

<div lang="en-US">
```
    sudo service docker restart
```
</div>


### `permission denied`?

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

<div lang="en-US">
```
    sudo gpasswd -a $USER docker
```
</div>

**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>
