Docker for Windows をインストールしてdocker-composeを動かすまで(Windows10)

#目的・背景
* デザイナーさんがフレームワーク環境下のテンプレート等を用意に変更できる環境を用意したかった
* デザイナーさんは主にXAMPP等で環境構築していたため、プロジェクトにエンジニアがかかわり、フレームワーク等が入った場合にローカル環境の構築が非常に困難になってきた
* Dockerファイルをプロジェクト関係者へ配布することにより、デザイナー全員が共通の環境でコーディングや確認ができる！それ幸せ！！と思って導入を決意
* 当初Vagrant内へDockerを構築することも検討したが、処理速度が遅くなるのでDocker for Windowsでの構築とした

#インストールした環境
* ThinkPad X250
* Windows10 64bit
* Memory 8G
* CPU  intel Core i5 5200U*2

#インストール
* 公式サイトへアクセスしDocker for Windowsをダウンロードします
* 今回はstable（安定板）をダウンロードしました
* https://docs.docker.com/docker-for-windows/

 ![image](https://qiita-image-store.s3.amazonaws.com/0/69167/91b820b9-1830-22b6-6e96-03f6c12e1c05.png)

* ダウンロードしたInstallDocker.msiをダブルクリックで開くとインストーラーが起動します
* 画面の指示に従い規約への同意と起動を行います

 ![image](https://qiita-image-store.s3.amazonaws.com/0/69167/029e0685-c767-77ba-757f-2e82c9983e40.png)
 ![image](https://qiita-image-store.s3.amazonaws.com/0/69167/d9a0000d-0cc6-34fc-7870-1fdff9ab29f5.png)
 ![image](https://qiita-image-store.s3.amazonaws.com/0/69167/a41cdb29-be05-3834-2ef0-6aa9f36ceffb.png)

* 起動すると、Hyper-Vが有効になっていないパソコンではHyper-Vを有効にしますか？という質問画面が出ますので、OKを押してHyper-Vを有効にします（親切！！！）
* OKを押すと少し時間がたったのちに再起動しますのでご注意下さい

 ![image](https://qiita-image-store.s3.amazonaws.com/0/69167/e71eeb09-30d9-09b4-dfc2-6a8eb12c9169.png)

##BIOSの設定でエラー
 ![image](https://qiita-image-store.s3.amazonaws.com/0/69167/35333658-a377-8d64-38e8-8e3d20ba7c78.png)

* Hyper-Vは有効になったが仮想化が無効とのこと
* 表示されているURLを参考にタスクマネージャーから確認
* https://docs.docker.com/docker-for-windows/troubleshoot/#virtualization-must-be-enabled
* 確かに無効になってる、、、

 ![image](https://qiita-image-store.s3.amazonaws.com/0/69167/1275e578-8279-75ef-3195-b31686e5beb6.png)

* Biosへ入る方法を調査
* thinkpadの場合はこちら https://support.lenovo.com/jp/ja/solutions/ht118360
* Intel(R) Virtualization Technologyを変更（Bios設定 > Security > Virtualization )
    * DisabledになっていたのでEnabledへ変更
    * 保存して再起動
* 再度Windowsへログインし、タスクマネージャーから仮想化が有効になったことを確認

![image](https://qiita-image-store.s3.amazonaws.com/0/69167/b7e109ce-4c65-40f9-7161-9e7f6239f73a.png)


#インストールできているか確認
* Power Shellの起動（Git Bashが入っている方はGit BashでもOK)
* インストールできているか確認
* `$ docker --help`

![image](https://qiita-image-store.s3.amazonaws.com/0/69167/32b4bbb2-7baf-af90-5270-592c8f4f98c5.png)

 インストールできてるっぽい
* docker-composeも入っているか確認
* `$ docker-compose --help`

![image](https://qiita-image-store.s3.amazonaws.com/0/69167/13cf5efd-f0bb-b8c6-17aa-df21d9055b64.png)

うん、はいってる

#hello world
* `$ docker run hello-world`を実行してみます

![image](https://qiita-image-store.s3.amazonaws.com/0/69167/2996a79f-837f-06e1-b665-3c2906c616dd.png)

正しく起動してインストールできているようです

#docker-composeを使ってnginxからローカルのファイルを表示する
* nginx.local.hostにてアクセスできるようにする（httpとhttps両方アクセスできる）
* 表示するWEBコンテンツはdocker-compose.ymlの一階層上にhtmlというフォルダ名で配置する
* nginxのドキュメントルートは/htmlとし、docker-composeにてmountする
* テストに使用したdocker-composeはこちらへ公開しています
* https://github.com/YukiMatsuo/docker-compose-test
* こちらをダウンロードして解凍して好きな場所へ移動させます

![image](https://qiita-image-store.s3.amazonaws.com/0/69167/8fb42a08-82b6-af1a-c8a1-1599fa4db19a.png)

* 私はDesktopへ配置しました
* 次にPowerShellなどで配置したフォルダ内のdocker-composeフォルダへ移動します

![image](https://qiita-image-store.s3.amazonaws.com/0/69167/60fe1688-bb03-16b9-b55a-dc93beed6065.png)

* 移動したらdocker-composeの起動を行います
* `$ docker-compose up -d`
* 以下のようなエラーが出てしまいました

 ![image](https://qiita-image-store.s3.amazonaws.com/0/69167/2be47526-e5a6-40e0-6627-7476fdc61658.png)

* Docker for WindowsではCドライブの共有設定をしていないとエラーになるケースがあるようです
* Cドライブの共有設定はDocker for Windowsの設定画面よりSetting > Shared から設定できます

![image](https://qiita-image-store.s3.amazonaws.com/0/69167/932e18ac-d6ef-2b7d-3fde-4beb3414eb68.png)

* Cへチェックを入れてApplyをクリックします（設定によってはユーザーのパスワードを求められます）

##エラー発生（環境によります）
![image](https://qiita-image-store.s3.amazonaws.com/0/69167/36cbaa67-ba1a-5d9f-3852-ee3a8188109a.png)
* Firewallで445ポートへアクセスできないといわれました
* E-SETを使用していたので、E-SETのFirewallの設定を変更、445ポートの接続をIN/OUT共に許可
* 再チャレンジ・・・・
* 変わらず接続できませんでしたので、WindowsのBase Filtering Engineを停止
* コントロールパネル > 管理ツール > サービス >  Base Filtering Engine
* サービスの停止を行い、PCを再起動
* 再チャレンジ・・・成功！！

##エラー解消
* 再度`$ docker-compose up -d`を実行します
* 今度は443ポートが使用中と怒られました
* `$ netstat -oan` で現在使用中のポートのPIDを調べます   
* NT　Kernel & Systemが使用しているようなので、こちらのサイトを参考に変更します
* http://sturnus.net/movable/faq/2013/11/xamppport-80.html
* こちらのサイトを参考にSkypeも起動していたので変更しました
* 再度実行 `$ docker-compose up -d`

![image](https://qiita-image-store.s3.amazonaws.com/0/69167/4f8818c1-0cfa-19d5-a8fa-eed91b869713.png)

ようやく起動してくれました◎

##ブラウザでのアクセス
* ブラウザでのアクセスを設定します
* hostsファイルを編集し、ホスト名でアクセスできるようにします
* C:\Windows\System32\drivers\etc
* dockerで設定したポートはそのままlocalhost(127.0.0.1)でアクセスできるようになっているので、以下のように設定します

![image](https://qiita-image-store.s3.amazonaws.com/0/69167/7afb5d85-42b9-8dcf-2297-a50c8dc01de9.png)

* ブラウザでから以下URLへアクセスします
    * http://nginx.local.host
    * https://nginx.local.host
    
![image](https://qiita-image-store.s3.amazonaws.com/0/69167/0a77d8c4-fc76-26bb-1ac8-4bc9d6d9ce21.png)

こちらの画面が開けばインストールおよび設定は成功です

#特にはまったこと
* docker-compose.yml内で設定したファイルがディレクトリは表示されるが、ファイルがマウントされないという状況に陥った
* Docker for WindowsのShared Driverのユーザー名が誤っていたことが原因であったので、一度リセットして再度実行したら成功した
* FirewallでCドライブへ接続できないPCもあった