[Docker]アラフォーがDockerに挑んでみた（黎明編）

# はじめに
業務でDockerが絡むシステムを担当することになってしまい、「現場入ってから追々理解してもらえばだいじょうぶっすー」という言葉を信じていたのだけど、「追々じゃなく今理解せんとこれ開発出来んやん」ということに気付いたので今更ながらDockerの扉を叩くことにしました。
アラフォーの日々少なくなってゆく脳細胞で理解出来るでしょうか。

# なぜ今Dockerなのか（私の場合）
現場の方からは「アプリ単位のVMみたいなもんやと思ってもらえればー」と聞いていた。ふーん、そっかぁ。そういうもんがあるんやな、ぐらい知っとけばいいんかな。と思ってました。
ところが、いざ実作業に入ると確かにDockerをよく知らなくても、既存のAPIなりを呼んでいけば仕様を満たす実装は出来る。
けどテストクラス書くときに  
「これってbeforeでDockerの状態をまずお膳立てしてやらんとテストしようがないけどどうなってるのが正しいのか・・・Dockerの何をどう見てassertTrueとかするの・・・」  
というところで唸ることになってしまった。これはマズい。Dockerってなんやのん、ということを知る必要が出てきてしまいました。
つまり、使いたくなった！とかそういうわけではなく、業務上困り始めたし、そんならやってみるかーって流れです。

## あしたっていまさッ！
ジョジョの奇妙な冒険のポコという登場人物が「あしたっていまさッ！」という名言を残しています。
私がDockerを勉強するのも今なんでしょう。先延ばしにしてたけど。幸い酒飲んでアニメ見てソシャゲする時間の余裕はあります。やろうではないですか。

# Dockerってなんやのん
いきなり小難しいサイトや本を読んでもきっと頭に入らないので、まずはやんわり気味に情報を入手していくことにしました。
[Dockerのすべてが5分でわかるまとめ!(コマンド一覧付き)](https://paiza.hatenablog.com/entry/docker_intro)  

うーん、でVMと何が変わらないんだ？
アプリ単位でのイメージを切り出せるから、開発環境が作りやすいというのは何となくわかる。 
とりあえず使ってみますか。

# Dockerをインストールしてみる
### 必要なもの
+ PC
+ ネット環境  
+ メールアドレス  
以上であります。因みに今回使用したマシンのスペックは下記。
+ macOS Sierra 10.12.6
+ MacBook　(Retina, 12-inch, Early 2015)
+ プロセッサ　1.3 GHz Intel Core M
+ メモリ　8G

### 説明するまでもない手順
+ Dockerのサイトの、「Download from Docker Hub」と書いてるいかにもなボタンを押下。
https://docs.docker.com/docker-for-mac/install/
<img width="1434" alt="スクリーンショット 2019-03-18 21.40.30.png" src="https://qiita-image-store.s3.amazonaws.com/0/378239/fe50ffcf-07cc-d53c-1967-de04f7804ceb.png">

+ ポチッとするとSign Inせよと言われるので、アカウントがない場合はCreate Accountのリンクからアカウントを作成。私はアカウントなかったので作りました。
<img width="988" alt="スクリーンショット 2019-03-18 21.41.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/378239/88a82be1-d791-941f-a670-b7abda064ff8.png">

+ と言ってもEメールとパスワードと、同意せよチェックボックスだけなので、入力してとりあえずなんでも同意マンになろう。
<img width="1434" alt="スクリーンショット 2019-03-18 21.41.44.png" src="https://qiita-image-store.s3.amazonaws.com/0/378239/307c3b47-e949-fa26-fd9c-804a724783e9.png">

+ ぼへっとしてたらメールが来るので、Confirmマンになってアカウントを認証。
<img width="1049" alt="スクリーンショット 2019-03-18 21.42.45.png" src="https://qiita-image-store.s3.amazonaws.com/0/378239/cc60f7fe-3b67-10dd-9047-449faf75e298.png">

+ 上のメニューのとこからSign Inすると、Get Dockerボタン押下でdmgファイルダウンロード出来ます。やったね。
<img width="1430" alt="スクリーンショット 2019-03-18 21.43.12.png" src="https://qiita-image-store.s3.amazonaws.com/0/378239/cec5c3ea-3525-44f0-8997-b1507aad85d2.png">

+ dmgファイルをポチっとするとこういうのが出るので、おとなしく従う。
<img width="716" alt="スクリーンショット 2019-03-18 21.51.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/378239/618e9d6a-9bf8-bd43-9fb2-2460360fa11e.png">

+ いかにもなログイン画面らしきものが表示されるので、登録したアカウントでログイン。
<img width="389" alt="スクリーンショット 2019-03-18 21.53.26.png" src="https://qiita-image-store.s3.amazonaws.com/0/378239/3ab32bf2-171f-a0e3-79b7-437726f39f6a.png">

+ ログイン後はこんな感じに。何が変わったのやら？
<img width="349" alt="スクリーンショット 2019-03-18 22.13.09.png" src="https://qiita-image-store.s3.amazonaws.com/0/378239/4ec7d3ac-815f-95de-848d-3703c9a65a04.png">

+ これでインストール出来たのか不安になったので、`docker version`をターミナルで叩いてみる。

```
$ docker version
Client: Docker Engine - Community
 Version:           18.09.2
 API version:       1.39
 Go version:        go1.10.8
 Git commit:        6247962
 Built:             Sun Feb 10 04:12:39 2019
 OS/Arch:           darwin/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          18.09.2
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.10.6
  Git commit:       6247962
  Built:            Sun Feb 10 04:13:06 2019
  OS/Arch:          linux/amd64
  Experimental:     false
```
何やらインストールは出来てるみたいですね！

## ついでなのでPythonもインストールしてみよう
Dockerのウリとして、アプリケーションなどの実行環境や設定方法をまとめて1つのパッケージにし、それを「Dockerイメージ」として保存・配布しているそうです。
なるほど、それが現場の方の「アプリ単位のVMみたいなもんやと思ってもらえればー」ってとこに繋がるのかな。
今現場で使っているPythonが3.6なので、自宅学習用にもせっかくなのでそれをインストールしてみます。
ちなみに素のMacBookにはPython2.7.10がインストールされている状態ですので、Docker上にPython3.6をインストール出来るなら、MacBookの環境を汚さない、ってことになるハズ。やってみましょう。
インストール前の状態がこちら。

```
$ python --version
Python 2.7.10
```

### Python3.6のDockerイメージインストール
おもむろに`sudo docker pull python:3.6`をターミナルから実行します。自分しか使わないマシンなのに、sudoにパスワードかけてらっしゃる！？

```
$ sudo docker pull python:3.6
Password:
3.6: Pulling from library/python
22dbe790f715: Pull complete 
0250231711a0: Pull complete 
6fba9447437b: Pull complete 
c2b4d327b352: Pull complete 
270e1baa5299: Pull complete 
400bad26d6c0: Pull complete 
1d360410c080: Pull complete 
1224d2c3c8d9: Pull complete 
5d7d0629cdba: Pull complete 
Digest: sha256:dfd0b1fcad1f056d853631413b1e1a3afff81105a27e5ae7839a6b87389f5db8
Status: Downloaded newer image for python:3.6
```

終わったようなので`docker image ls`で見てみましょう。lsコマンド感覚で何インストールしてるのか見られるみたい。

```
$ docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
python              3.6                 d6b15f660ce8        13 days ago       924MB
```
うん、Python3.6はインストール出来てる・・・みたい。

### Dockerイメージの起動
`docker run -it python:3.6` でPythonを起動してみます。

```
docker run -it python:3.6 
Python 3.6.8 (default, Mar  5 2019, 06:26:06) 
[GCC 6.3.0 20170516] on linux
Type "help", "copyright", "credits" or "license" for more information.
```
無事Python3.6が起動してるみたいですね。
`exit`でDockerを停止した後、改めて`python --version`でバージョンを見てやると

```
python --version
Python 2.7.10
```
おー、元々のバージョンは何も変わってない。
これで「本体のMacBookに入ってるPython2.7.10」を汚すことなく、Python3.6（正確には3.6.8だけど）がDockerという仮想環境にインストール出来て、実行も出来る環境が出来たってことですね。
まとめを書きながら進めていたので時間はかかりましたが、単純にお手持ちのPCに導入するだけならここまででしたら１時間もかからないと思います。

ここから更にいじって遊んでみたいので、後日色々試していきます。