Ubuntu16.04にDocker CEをインストール

# 環境
- Ubuntu 16.04LTS
  - デスクトップ版

# 手順
[Get Docker CE for Ubuntu | Docker Documentation](https://docs.docker.com/install/linux/docker-ce/ubuntu/#prerequisites)

ここを参考に。というかほぼ日本語訳。(英語できないけど)

インストールするDockerのバージョンは記事執筆時点の`stable`最新版の17.12.0-ce(Community Edition)です。(DockerにはCE(Community Edition)とEE(Enterprise Edition)というのがあって、無料で使えるのがCEというイメージで大丈夫だと思う。)

Dockerのインストールは

- Dockerのリポジトリを使う方法
- `.deb`を落として、手動でインストールする方法
  - アップデートに関しても完全に手動で行うことになる
- スクリプトを使ってインストールする方法

の3つがある。ドキュメントではDockerのリポジトリを使う方法が推奨されている。この記事でもこの方法を使用する。

2番目の`.deb`を使う方法は、インターネットへの接続がないマシンへのインストールに用いると良い模様。

3番目のスクリプトを使う方法は開発環境やテスト環境にどうぞ、とドキュメントに書いてある。

## 準備
### 古いDockerを消す
私のマシンは入ってなかったので関係ないけど。

`docker`または`docker-engine`コマンドが存在する場合は

```shell
$ sudo apt remove docker docker-engine docker.io
```

で削除する。

## インストール
### `apt`の準備を行う
```shell
$ sudo apt-get update
```

aptのアップデートを行ったのちに

```shell
$ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
```

これらのパッケージをインストールすることでHTTPSで`apt`を使えるようにしている。(私の環境では新たにインストールされるパッケージはなかった。)

次にDockerのオフィシャルリポジトリGPGキーを登録します。これにより、パッケージが正しいものであることを検証することができるようになります。

```shell
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
```

`OK`と表示されれば成功です。

keyのfingerprintは`9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88`だそうで、以下のコマンドでfingerprintの下8文字を入力することで検証することができます。

```shell
$ sudo apt-key fingerprint 0EBFCD88
pub   4096R/0EBFCD88 2017-02-22
      フィンガー・プリント = 9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid                  Docker Release (CE deb) <docker@docker.com>
sub   4096R/F273FCD8 2017-02-22
```

日本語のUbuntu環境だとこんな感じ。

次にリポジトリを追加します。CPUのアーキテクチャによって微妙に違うのですが、ここではx86_64またはamd64の場合を示します。そうでない人は(そもそもこの記事読んだりしてないだろうけど)公式に載っているのでそこを参照すると良さげかと。

```shell
$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
```

ちなみにこれで追加されるのは`stable`(安定)版のDockerが降ってくるリポジトリで、`edge`や`test`が使いたい場合は上記コマンドの`stable`のところを変更してリポジトリを追加してやればいいようです。

### Dockerを入れる
ここまでやったら一度アップデートをしておきましょう。

```shell
$ sudo apt-get update
```

終わったら、

```shell
$ sudo apt-get install docker-ce
```

で、最新版のDocker CEをインストールできます。

(別のバージョンを入れたい場合はこれまた公式ドキュメントに手順が記載されていますが、`sudo apt-get install docker-ce=<VERSION>`でいけると思います。たぶん。)

あとは、

```shell
$ sudo docker run hello-world
```

としてやると、Hello world用のイメージを自動的にpullしてきて実行してくれます。

```
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.
    (amd64)
 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 ID:
 https://cloud.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/
```

こんなメッセージが出ていれば成功。

## 【おまけ】non rootなユーザーで使えるようにする
公式のインストール手順は以上で終わりなのですが、普段から`sudo`つけて使うのはだるいので、non rootなユーザーでもdockerコマンドを使えるようにする手順を書いておきます。

ちなみにこれも以下のページのてきとう訳です。

[Post-installation steps for Linux | Docker Documentation](https://docs.docker.com/install/linux/linux-postinstall/)

## 注意
この説明で作る`docker`グループは`root`なユーザーと同等の権限を持っているのに等しいので、誰でもばかばか`docker`グループに放り込むのはやめましょう。

## 手順
```shell
$ sudo groupadd docker
```

で`docker`グループを作成します、と書いてはいるんですが私の場合はすでに存在していたので、おそらくdocker本体を入れると自動で作成されるのだろうと思います。

```shell
$ sudo usermod -aG docker $USER
```

これで現在のユーザーがdockerグループに追加されます。他のユーザーを突っ込みたいときは`$USER`のところをユーザー名に。

これが終わったら、一度ログアウトして入り直すことで`sudo`なしで`docker`を使えるようになっているはずです。