Docker Engine をDocker リポジトリからインストールする(Ubuntu 15.04, 14.04 LTS)

# Ubuntu 15.04, 14.04 LTS にDocker Engine をインストールする 
Ubuntu でDocker を使うときのために、Docker のapt リポジトリから
`https://get.docker.com/` からスクリプトを取得、実行してインストールする方法がありましたが、最近はDocker Engine のリポジトリを追加してapt-get でインストールする方法が出てきているようなので、その手順を日本語でまとめておきました。

## 最速で 
Gist にまとめておいたので、以下のコマンドを実行すればインストールできます(Ubuntu 15.10, 14.04 LTS で動作確認済み)。

```text:InstallDockerEnginecommand
# curl https://gist.githubusercontent.com/TsutomuNakamura/36920d251c81ec6638f7/raw | sudo bash
```


以上でインストールは完了です。これより以下の記述は、手順をひとつひとつやっていく場合の解説になります。

## 要件 

* 要件
<table><tbody>
  <tr>
    <th> Ubuntu のバージョン(こちらで動作確認したもの)</th>
    <td> 15.10, 15.04</td>
  </tr>
  <tr>
    <th> アーキテクチャ</th>
    <td> 64 bit</td>
  </tr>
  <tr>
    <th> kernel</th>
    <td> 3.10 以上</td>
  </tr>
</tbody></table>

## kernel のバージョンの確認 
kernel のバージョンを確認します。

```text:uname-r
$ uname -r
3.19.0-25-generic
```


## パッケージの認証用キーの追加 
apt-key コマンドを使用してapt パッケージ認証用の鍵を登録します。

```text:apt-key
$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
```


## リポジトリの追加 
Docker Engine をインストールするためのリポジトリを`/etc/apt/sources.list.d/docker.list` に追加します。
存在しない場合はファイルを新規作成、既に何かが書かれている場合はそれを一旦削除して新しくエントリを追加してください。
登録する内容は以下のコマンドの通りです。

```text:リポジトリのエントリ追加
$ . /etc/lsb-release
$ echo ${DISTRIB_CODENAME,,}
trusty
$ echo deb https://apt.dockerproject.org/repo ubuntu-${DISTRIB_CODENAME,,} main | sudo tee /etc/apt/sources.list.d/docker.list
```


## apt パッケージインデックスの更新 
`apt-get update` コマンドを実行してパッケージインデックスを更新します。


```text:aptパッケージindexの更新
$ sudo apt-get update
```


## 古いDocker を削除する 
古いrepo からインストールしたDocker がある場合は事前にそれを削除しておきます。


```text:lxc-dockerの削除
$ sudo apt-get purge lxc-docker
```


## 推奨パッケージのインストール 
必須ではありませんが、`linux-image-extra` パッケージをDocker Engine をインストールする前にインストールしておいてください。
Docker ストレージドライバとしてaufs を使えるようになります。


```text:linux-image-extraのインストール
$ sudo apt-get install linux-image-extra$(uname -r)
```


## Docker Engine のインストール 
以上でDocker Engine をインストールする準備が整いましたので、Docker Engine を`apt-get` コマンドでインストールしましょう。

```text:installdockerengine
$ sudo apt-get install docker-engine
```


## 動作確認 
インストールが完了したら、hello-world を実行してみましょう。


```text:hello-worldイメージの実行
$ sudo docker run hello-world
```


メッセージが表示されればインストールは成功です。

これより以下の手順は必要に応じて実施してください。

## ユーザのdocker グループへの追加 
デフォルトで、Docker Engine は`/var/run/docker.sock` にUnix ドメインソケットを作成し、そこからdocker コマンドを使ってDocker デーモンとのやり取りを行うことになります。
そこで、root 以外のユーザがsudo を使わなくてもdocker コマンドを使えるように、必要に応じてユーザをdocker ユーザに追加する作業を行ってください。
既存のユーザにグループを追加する場合は、`usermod -aG` コマンドで追加します。


```text:ユーザをdockerグループへ追加する
$ sudo usermod -aG docker someuser
```


## メモリとSwap の調整について 
docker デーモンを起動すると下記のようなWARNING がログに出力されることがあります。

```text:docker起動時のWARNING
... WARNING: Your kernel does not support cgroup swap limit.
... WARNING: Your kernel does not support swap limit capabilities. Limitation discarded.
```


このWARNING メッセージを出力されないようにするには、memory/swap のaccounting 機能を有効にすることで可能です。
しかし、以下の副作用がある点に注意してください。

* トータルで利用可能なメモリの約1% がオーバヘッドとして費やされる
* パフォーマンスが約10% 劣化する
* これらの副作用は有効にしている間、たとえDocker Engine を停止させたとしてもついてくる

そのため、memory、swap を酷使するような環境で、Docker コンテナがmemory やswap を浪費するような心配性が無い場面(Web アプリの開発環境としてのコンテナ等)では、パフォーマンスを考慮して無効のままとしておくのが良いでしょう。

以下、memory accounting 機能を有効化する手順です。
`/etc/default/grub` ファイルに以下の1 行を追加します。


```text:/etc/default/grub
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
```


ファイルを編集したら`update-grub` コマンドを実行してGRUB を更新し、OS を再起動させます。

```text:update-grub
$ sudo update-grub
$ sudo shutdown -r now
```


## UFW の設定 
もし、あなたが使っているubuntu でUFW がon となっていて、HOST の外部からDocker デーモンに接続されることを意図している場合(docker 起動時に"-H tcp://0.0.0.0:2375" といったようなオプションが指定されている場合)、デフォルとでUFW はパケット転送禁止しているので効化する必要があります。
まず、以下のコマンドでUFW がon になっているかどうかを確認することができます。


```text:update-grub
$ sudo ufw status
Status: active
```


`/etc/default/ufw` ファイルを開き、下記のように編集します。

```text:/etc/default/ufw
DEFAULT_FORWARD_POLICY="ACCEPT"
```


ファイルを編集したら、`reload` します。


```text:reloadufw
$ sudo ufw reload
```


Docker Engine では一般的に外部からの接続においては、2375 port を非TLS/SSL の接続ポートとして使用し、2376 port をSSL/TLS のDocker Engine デーモンのポートとして使用するのが一般的です。
UFW で、これらのport に対するアクセスを許可するには以下のようにコマンドを実行します。

```text:ufwで2375portを有効化する
$ sudo ufw allow 2375/tcp
```


# 参考 
<dl>
  <dt> Ubuntu(Docker document)</dt>
  <dd> https://docs.docker.com/engine/installation/ubuntulinux/</dd>
</dl>