『Docker Tools』を使ってPython3（Anaconda）の実行環境を構築してみる

# 概要
ノートPCに『Docker Toolbox』をインストールして、その上に『CentOS』を構築。『CentOS』上にPython3の開発環境を作ります。勉強用途なので、まずは手間暇かけずに、動かせる環境を作ることを目標とします。

# 前提
|項目|スペック|
|:---:|:---------|
|CPU|CORE i3 2.40GHz 64bit|
|MEM|4GB RAM|
|OS|Windows10 HOME|

# 『Docker Tools』をインストール
Dockerのサイトから[Docker Toolbox](https://www.docker.com/products/docker-toolbox)のインストーラーをダウンロードします。（ご利用の環境に合わせて、適宜選択してください）

ダウンロードしたら『Docker Toolbox』のインストーラを使用して、必要なコンポーネントを一式インストールします。インストールの途中、「Select Additional Tasks」という画面があるのですが、ここで最下部にあるチェックボックスはONにする必要があるようです。

-[x] Install VirtualBox with NDIS5 driver[default NDIS6]

** 参考 **
[Failed to open/create the internal network Vagrant on Windows10](https://stackoverflow.com/questions/33725779/failed-to-open-create-the-internal-network-vagrant-on-windows10)

# Dockerを起動
正常にインストールが終わると、デスクトップに「Docker Quickstart Terminal」という名前の付いたアイコンがあるので、ダブルクリックで実行。すると、Dockerが起動して、Dockerホストの仮想マシンに接続した状態でウインドウが出てくるはずです。（Dockerのシンボルであるイラストのアスキーアートが表示されるまで暫く待つ）

コマンドの入力待ちになったら起動完了。

まずはお決まりの"Hello World"をやってみます。

```js
$ docker run hello-world
```

エラーが出なければ、これで無事にDocker環境が整いました。

** 補足 **
Dockerコマンドについては以下を参考にさせて頂きました。
大変分かりやすくて勉強になりました。
後ほど使用するCentOSのイメージをダウンロードするコマンドをはじめ、コンテナの起動・停止コマンドなどは、こちらを合わせてお読み頂くと、より理解が深まるかと思います。

[docker コマンドチートシート](http://qiita.com/voluntas/items/68c1fd04dd3d507d4083)
[docker コマンド一覧](http://qiita.com/suzukihi724/items/961112f6578a60dd6266)
[Docker コマンドメモ](http://qiita.com/curseoff/items/a9e64ad01d673abb6866)

# 『CentOS』を準備
それでは、先ほど構築したDocker上に『CentOS』を構築してみたいと思います。今回は、最新バージョンを取得します。

```
$ docker pull centos:latest
```

下記が表示されれば、無事にダウンロードが完了。

```
Status: Downloaded newer image for centos: latest
```

dockerコマンドを使って確認してみましょう。

```
$ docker images
```

"REPOSITORY" に "centos" が表示されていればOK
では『CentOS』を起動してみましょう。

```
$ docker run -itd --name centos centos /bin/bash 
```

エラーが出なければ問題なく起動しているはずです。
dockerコマンドを使って確認してみましょう。

```
$ docker ps
```

正常に起動していれば "CONTAINER ID" が振られて、先ほど実行した "centos" が表示されるはずです。ここまでで、ひとまず『CentOS』の環境構築が出来ました。思っていたよりもスムーズに、ここまで来れて一安心。

# Python3（Anaconda）の実行環境を構築
それでは目標であったPython3の実行環境を構築したいと思います。今回はあらかじめ主要なライブラリが準備済みのPythonディストリビューションである "Anaconda" をインストールしたいと思います。もちろん、Pythonの公式サイトからインストールして、必要なライブラリを個別にインストールしても良いのですが、今回は "極力簡単に" を目標に進めたいと思います。

まずは、先ほど起動した "CentOS" のコンソールに接続します。

```
$ docker attach centos
```

コマンドプロンプト部分が変わりました。無事に繋がったようです。


```
[root@******** /]# 
```

今回は Pythonのバージョン管理ツールである "pyenv" を使うことにします。 "pyenv"を使うことで、１台のマシンに複数のバージョンを導入して、使い分けることが出来るため、Python2を使いたいときに便利だと思います。

** 補足 **
"pyenv"については多くの紹介サイトがありますので、詳細は割愛致しますが、今回は下記を参考にさせて頂き、勉強させて頂きました。また、"pyenv"の他にも "virtualenv" というつーるもありますので、ご自身の環境に合わせて使い分けて頂ければと思います。

[pyenvまとめ](http://qiita.com/SUZUKI_Masaya/items/7ba3fef9eb7c9603762a)

早速 "pyenv"をインストールしたいのですが、その前に "git" が使えるようにしたいと思います。

```
# yum install git
```

"Complete!"と表示されてエラー無く終わったら、次のコマンドで "git" がインストールできていることを確認します。

```
# git --version
```

インストール時点のバージョンが表示されるはずです。これで無事にインストールできました。それでは "pyenv"をインストールしていきます。

```
# git clone https://github.com/yyuu/pyenv.git ~/.pyenv
```

エラーも出ずプロンプトが戻ってきましたので、正常にインストールできたようです。今回は "root" ユーザでここまで作業をしてきましたので、私の環境では以下にインストールされています。

```
# /root/.pyenv
```

"pyenv" 経由でインストール可能な "Python" の一覧を表示してみましょう。

```
# /root/.pyenv/libexec/pyenv install --list
```

タイトルの通り、今回は "Anaconda" をインストールしますので、リストの中から最新バージョンを確認します。私がインストールした時点（2017/08/27）の最新は以下の結果でした。

```
anaconda3-4.4.0
```

それでは最新バージョンを以下のコマンドでインストールします。

```
# /root/.pyenv/libexec/pyenv install anaconda3-4.4.0
```

あれ？ここまで来て初めてエラーが出ました。BUILD FAILEDです…。ログを見るとディレクトリが見つけられなかったようです。確かに調べてみるとログに書かれているパスのディレクトリが存在しない。一旦手動でディレクトリを作成して、インストールを再実行してみました。

```
# mkdir /root/.pyenv/versions/anaconda3-4.4.0
# /root/.pyenv/libexec/pyenv install anaconda3-4.4.0
```

※エラーの原因は継続して調査中。

"pyenv" を使ってインストールした "Python"のバージョンを確認してみます。

```
# /root/.pyenv/libexec/pyenv versions
```

先ほどインストールした "anaconda3-4.4.0" が表示されましたが、"*" 印が付いていません。デフォルトで "system" 側が適用されているようです。

```
* system
  anaconda3-4.4.0
```

以下のコマンドでバージョンを切り替えます。

```
# /root/.pyenv/libexec/pyenv global anaconda3-4.4.0
```

もう一度、先ほどのコマンドを使ってバージョンを確認します。

```
# /root/.pyenv/libexec/pyenv versions
```

今度は "anaconda3-4.4.0" 側に "*" 印が付きました。これでデフォルトのバージョンが "anaconda3-4.4.0" になりました。

```
   system
*  anaconda3-4.4.0
```

以上です。