ubuntu 18.04 に、nvidia-docker2をインストールする

# 前提条件
- ubuntu 18.04
- NVIDIA製のGPU (GTX7x0=Kepler以降) を搭載
- NVIDIAのドライバーが動いている (`nvidia-smi` コマンドが動く)
- cuda 10.1がインストールされている　(cuda 9だと動かない場合がある？)
- Docker および、NVIDIA Dockerをまだインストールしたことがない
- sudo のパスワードを知っている

# インストール
## 手順
1. docker-ce
2. nvidia-docker2
3. おまけ

## docker-ce　
[リンク](https://docs.docker.com/install/linux/docker-ce/ubuntu/)

パッケージリストを最新の状態に更新する　(apt-getでも可ですが、aptのほうがよい)

```shell
sudo apt update
```
前提条件をインストール　(スペースで区切りで複数指定, -yをつけると、yes/noを聞かれません)

```shell
sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common -y
```
Docker公式の公開鍵を取得してインストール

```shell
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
```
鍵が正しいことを確認する

```shell
sudo apt-key fingerprint 0EBFCD8

(実行結果として、以下が表示されること)

8pub   rsa4096 2017-02-22 [SCEA]
      9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid           [  不明  ] Docker Release (CE deb) <docker@docker.com>
sub   rsa4096 2017-02-22 [S]
```
リポジトリ(パッケージの取得元)を追加

```shell
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
```
リポジトリを追加したので、再度パッケージリストを最新の状態に更新する

```shell
sudo apt update
```
ようやくdocker-ceをインストール

```shell
sudo apt install docker-ce docker-ce-cli containerd.io -y
```
動作確認

```shell
sudo docker run hello-world

(実行結果として、以下が表示されること)

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete 
Digest: sha256:2557e3c07ed1e38f26e389462d03ed943586f744621577a99efb77324b0fe535
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.
...
```
## nvidia-docker2

[link](https://github.com/NVIDIA/nvidia-docker/wiki/Installation-(version-2.0)#prerequisites)

nvidia-docker公式の公開鍵を取得してインストール

```shell
curl -sL https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
```
変数を設定

```shell
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
```
リポジトリを追加

```shell
curl -sL https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
```
リポジトリを追加したので、再度パッケージリストを最新の状態に更新する

```shell
sudo apt update
```
ようやくnvidia-docker2をインストール

```shell
sudo apt install nvidia-docker2 -y
```
Dockerデーモンを再起動

```shell
sudo pkill -SIGHUP dockerd
```
動作確認

```shell
sudo docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi

(エラーが出た...cudaは10以上でないとダメっぽい？　><)

docker: Error response from daemon: OCI runtime create failed: container_linux.go:344: starting container process caused "process_linux.go:424: container init caused \"process_linux.go:407: running prestart hook 1 caused \\\"error running hook: exit status 1, stdout: , stderr: exec command: [/usr/bin/nvidia-container-cli --load-kmods configure --ldconfig=@/sbin/ldconfig.real --device=all --compute --utility --require=cuda>=10.0 brand=tesla,driver>=384,driver<385 --pid=6264 /var/lib/docker/overlay2/9fadbcc1f45b6095d7f3aaf71aa41aa95c13bd61f184dfbc69fe03cb52a69d25/merged]\\\\nnvidia-container-cli: requirement error: unsatisfied condition: brand = tesla\\\\n\\\"\"": unknown.
```

## おまけ

sudoをつけずに、dockerコマンドを実行できるようにする。

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