Dockerのインストール手順

#**はじめに**
[株式会社サイシード](http://sciseed.jp)のインターンシップにて、**Docker**を導入しました。
本稿が少しでもみなさまの参考になれば幸いです。

#####**導入環境**

・windows7
・vagrant

#####**備考**
Docker for WindowsやDocker for Macは比較的簡単にDocker環境を構築することができますが、
　・動作が遅い（参考：http://cluex-developers.hateblo.jp/entry/2016/11/02/122633<span>）</span>
　・古いOSだと導入できないことがある
　・以前からVagrantを用いている場合は、使い慣れた環境を利用できる
といったこともあるので、
たとえDocker for WindowsやDocker for Macなどを動作させられる環境であったとしても、Vagrantを利用する方が良い場合もあるかと思います。

ただし、**動作が遅い**問題については、参考のリンク先にもあるように
**docker-sync**というものを使うと改善されるようです。
私の環境では、検証することはできませんでしたが、VMをかませなくても良くなるので、
一度試してみても良いかと思います。

#**Dockerインストール手順**

##**１．Vagrantをインストール**

####**１．１　vagrantのインストーラーをダウンロード**
　https://www.vagrantup.com/downloads.html
　にアクセスしてそれぞれの環境に合わせたインストーラーをダウンロード。
　インストーラーを実行して、手順に沿ってインストールする。
　インストールされたかをコマンドプロンプトで確認。

```txt:コマンドプロンプト
> vagrant -v
```
　
####**１．２　vagrantにubuntuのboxを追加**
　http://www.vagrantbox.es/<span>にアクセスして、</span>
　ubuntuのtrusty64bit版（例：`Official Ubuntu 14.04 daily Cloud Image amd64 `）のurlをコピーする。
　コマンドプロンプトで以下のコマンドを実行して、vagrantにboxを追加。

```txt:コマンドプロンプト
> vagrant box add [ボックス名(任意)(例： Ubuntu14.04)] 先ほどコピーしたURL
```
　
####**１．３　Vagrantプラグインのインストール**

　**（１）vbguestをインストール**
　　Vagrant が VirtualBox の共有フォルダをマウントする時に、起き得るエラーの１つを解決してくれる。

```txt:コマンドプロンプト
> vagrant plugin install vagrant-vbguest
```
　
　**（２）hostsupdaterをインストール**
　　Vagrant を起動するときに、ホストの `/etc/hosts` を Vagrantfile に記述したものに設定してくれる。
　　そのため、仮想マシンを作成するたびに、`/etc/hosts` を開いて、ドメインや ip アドレスを
　　設定しなくてもよくなる。

```txt:コマンドプロンプト
> vagrant plugin install vagrant-hostsupdater
```
　
　**※インストールしたプラグインの確認方法**

```txt:コマンドプロンプト　
> vagrant plugin list
```
　
####**１．４　Vagrantの設定**
　開発環境用のフォルダ（例：`C:\Users\tera_shin\Ubuntu\Docker`）を作成する。
　作成したフォルダの中にVagrantfileを作成する。

　**（１）Vagrantfileを作成**

```txt:コマンドプロンプト
> vagrant init 先ほど追加したボックス名(例： Ubuntu14.04)


# box名は以下のコマンドで確認することも出来る。
> vagrant box list
```
　
　**（２）vagrant initで作成されたVagrantfileを編集する。**

```txt:コマンドプロンプト
> vi Vagrantfile
```
　
　**（２－１）ipアドレスの設定**
&emsp;&emsp;`config.vm.network "private_network"`のコメントアウトをはずす。
　　他とかぶっている場合は、ipを`ip: "192.168.55.44"`のように適宜変える。

```txt:Vagrantfile
config.vm.network "private_network", ip: "192.168.33.10"
```
　
　**（２－２）ポートフォワードの設定**  　
　　ポートフォワード（ホスト側のポートをVagrantのどのポートに対応させるか）
　　するポートを指定する。

```txt:Vagrantfile
config.vm.network "forwarded_port",guest:vagrantのポート（上で指定したipアドレスまたはssh接続で使用するアドレスのポート）, host:自分のPCのポート（localhostのポート）
```

```txt:Vagrantfile 
　# 例：
　config.vm.network "forwarded_port", guest: 8080, host: 3000
```

　　この設定だと、上で指定したipアドレスの**8080**番ポートにアクセスすると、
　　Vagrant側の**3000**番ポートにアクセスできる。
　
　**（２－３）共有フォルダの設定** 
　　ホスト側とVagrant側で共有するフォルダを設定する。

```txt:Vagrantfile
　config.vm.synced_folder "ホスト側のフォルダパス", "Vagrant側のフォルダパス"
```

　　**備考**
　　この方法で設定すると、共有フォルダの変更がホスト側とVagrant側の双方向で行われる。
　　そのため、
　　　・共有フォルダ上のプログラムの実行速度が遅くなる。
　　　・共有フォルダ上でVagrant側からファイルを作成したり、
　　アップロードしたりする場合、エラーが出る。
　　といったことが起きることがある。
　　その場合は、**rsync**による共有方法を利用してみると良い。
　　**rsync**はホスト側からVagrant側への一方向の共有方法なので、上記の問題が
　　ある程度解消される。　　 　　
　
####**１．５　Vagrantの立ち上げ**
　Vagrantfileのあるディレクトリで、以下のコマンドを実行すると、
　Vagrantを立ち上げることが出来る。

```txt:コマンドプロンプト
　> vagrant up
```
　
####**１．６　Vagrantで立ち上げた仮想OSにアクセスする**
　vagrantにSSH接続する。

```txt:コマンドプロンプト
　> vagrant ssh
```

　または、
　**putty**などのSSHクライアントソフトを用いて、
　vagrantの上で指定したipアドレスまたは**ssh接続用のアドレス**を指定することで接続する。

　vagrantの**ssh接続用のアドレス**は、以下のコマンドで確認できる。

```txt:コマンドプロンプト
　> vagrant ssh-config
```
　
##**２．Dockerをインストール**
　**公式インストールガイド：**
　https://docs.docker.com/engine/installation/linux/ubuntu/#recommended-extra-packages-for-trusty-1404

　以下のコマンドは特に記載がない限り、**Vagrantの仮想OS（Ubuntu）上**で行う。

####**２．１　古いバージョンがある場合はアンインストール**

```txt:Ubuntu
　$ sudo apt-get remove docker docker-engine
```
　
####**２．２　Trusty 14.04用の推奨されているパッケージを追加**
　OSが**UbuntuのTrusty 14.04**である場合は、推奨されているパッケージを追加する。

```txt:Ubuntu
　$ sudo apt-get update
　$ sudo apt-get install \
   　linux-image-extra-$(uname -r) \
   　linux-image-extra-virtual
```
　
####**２．３　Dockerレポジトリを登録**
　特に理由がなければ、**Docker CE（個人使用用）**のレポジトリを利用する。

　**（１）aptがHTTPSを介してレポジトリを利用するためのパッケージをインストール**

```txt:Ubuntu
　　$ sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ software-properties-common
```
　
　**（２）Dockerの公式GPGキーを登録**

```txt:Ubuntu
　　$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
```
　
　**（３）GPGキーの確認**
　　fingerprintが`9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88`になっているか確認。

```txt:Ubuntu
　　$ sudo apt-key fingerprint 0EBFCD88
```
　
　**（４）安定版のレポジトリを設定する**

```txt:Ubuntu
　　$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
　　$(lsb_release -cs) \ stable"
```
　
####**２．４　Dockerをインストール**
　**（１）aptパッケージ一覧をアップデート**

```txt:Ubuntu
　　$ sudo apt-get update
```
　
　**（２）レポジトリを用いてDockerをインストール**

```txt:Ubuntu
　　$ sudo apt-get install docker-ce
```
　
　　**※１：途中keyserverがタイムアウトする場合**
　　　途中keyserverがタイムアウトする場合は以下のコマンドを実行

```txt:Ubuntu
　　　$ curl https://apt.dockerproject.org/gpg > docker.gpg.key && echo "c836dc13577c6f7c133ad1db1a2ee5f41ad742d11e4ac860d8e658b2b39e6ac1 docker.gpg.key" | sha256sum -c && apt-key add docker.gpg.key && rm docker.gpg.key
```
　
　　**※２：特定のバージョンをインストールする場合**

　　　**※２－１：インストールできるバージョンを確認**

```txt:Ubuntu
　　$ apt-cache madison docker-ce
```

　　　**※２－２：特定のバージョンをインストール**

```txt:Ubuntu
　　　$ sudo apt-get install docker-ce=<VERSION>
```

　　　**※２－３：Dockerがインストールされたことを確認**

```txt:Ubuntu
　　　$ sudo docker run hello-world
```

　
　　
　
参考
http://dotinstall.com/lessons/basic_docker
https://docs.docker.com/engine/installation/linux/ubuntu/#install-from-a-package
http://cluex-developers.hateblo.jp/entry/2016/11/02/122633
http://qiita.com/togana/items/cf3bf9bb7cf28923b221