dockerでApacheを起動してwebアプリ開発をしたい（出来たとは言ってない） 

タイトルの通り。
現在進行形で進めているところなので、どういった方法を試したのか、何がダメなのかを備忘録がてら書いていくことにします。

# 環境・ツールのバージョン
- Windows 10 pro
- Docker 18.09.0
- VirtualBox 5.2.22


# ケース１：Docker for Windows うぃず Hyper-V

以下の記事を参考にしました。
[俺のDocker - Windows10にインストール](https://qiita.com/Ogaaaan/items/99fe54f052ca450889f7)

### 1.Docker for Windowsをインストール
以下より。
https://store.docker.com/editions/community/docker-ce-desktop-windows
安定版である「Get Docker CE for Windows(stable)」を選択。

インストールが終わったらコマンドプロンプトを開いてコマンド実行。

```cmd
$ docker --version
```

バージョンが表示されればインストール成功。

### 2.Hyper-Vマネージャーで確認
問題：**Hyper-Vマネージャーなんてないやん！**
解答：そら（Hyper-V有効化してないなら）そうよ

というわけで有効化していきます。

「Windowsの機能の有効化または無効化」を開き、「Hyper-V」にチェックを入れる。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/147369/ab71a184-93fc-3ad6-d635-0237b12fb2d5.png)

OKを押すと再起動しろやワレェみたいな事を言われるので素直に従う。
更新が入るので、通常の再起動よりも時間が掛かる。~~ワレェ…~~

再起動後、Hyper-Vマネージャーを起動！
Docker for Windowsが正常にインストールされていれば「ModyLinuxVM」なるものが……

![image.png](https://qiita-image-store.s3.amazonaws.com/0/147369/f4b945b7-3283-5e7f-78d3-93ff633a8dcc.png)
Hyper-V「Mody……？　知らない子ですね」
~~アホの子な先輩かわいい！~~

数時間さまよった結果……

解答：**そら（一般ユーザーなら）そうよ**

どうやら**ログオンしているユーザーが管理者でないと反応してくれない**模様。
というわけで貧弱一般ユーザーの私は急遽管理者ユーザーに昇格したのだ。。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/147369/da3cc52e-6f91-fec9-5f83-91cb093068ff.png)
うまくいきました。
~~雑魚ユーザーには冷たい先輩かわいい！~~

### 3.httpdイメージをダウンロード
参考にしたサイトはこちら。
[Docker 公式 httpd イメージを利用して Docker を体験してみよう](https://weblabo.oscasierra.net/docker-httpd-usage/)

Apacheを起動するには「httpd」というイメージをダウンロードしなければならない、らしい。
早速コマンドプロンプトを開いて進めていきます。

```cmd
$ docker pull httpd
```

pullだけだし、うまくいくでしょ！


```cmd
error during connect: Post http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.39/images/create?fromImage=httpd&tag=latest: open //./pipe/docker_engine: Access is denied. In the default daemon configuration on Windows, the docker client must be run elevated to connect. This error may also indicate that the docker daemon is not running.
```

**だめでした。**

貧弱日本人たる私は早速google翻訳パイセンに詰め寄ります。
曰く、「docker daemonが動いてないよ」とのこと。~~そんくらい分かる~~

仕方ないのでよさげなサイトがないか検索。
以下のサイトを見つけたので参考にしました。
[dockerコマンドをコマンドプロンプトから利用](https://teratail.com/questions/66952)

要約すると、アクティブなホストがいれば解決できるらしい。

#### 対応１：まずはホストがあるか確認しましょう。

```cmd
$ docker-machine ls
```

ホストはありませんでした。次！

#### 対応２：ホストを作成しましょう。

```cmd
$ docker-machine create -d virtualbox default
```

（virtualbox…？　インストールしてないけどなんとかなるか）

```cmd
Running pre-create checks...
Error with pre-create check: "VBoxManage not found. Make sure VirtualBox is installed and VBoxManage is in the path"
```

だめでした（当たり前）。

というわけでVirtualBoxをインストールします。
https://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html?ssSourceSiteId=otnjp

そして再度ホスト作成のコマンドを実行します。
これで解決でしょ！

```cmd
Running pre-create checks...
Error with pre-create check: "This computer is running Hyper-V. VirtualBox won't boot a 64bits VM when Hyper-V is activated. Either use Hyper-V as a driver, or disable the Hyper-V hypervisor. (To skip this check, use --virtualbox-no-vtx-check)"
```

英語力のない私でも雰囲気でわかります。
**Hyper-Vが邪魔してるって？**

Hyper-V「私とは遊びだったのね！」

仕方ないので無効化します。~~先輩ごめんなさい~~
これ、うまくいっても見出し詐欺では……

```cmd
$ docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER 
ERRORS
default   -        virtualbox   Running   tcp://192.168.99.100:2376           v18.09.0
```


ホスト作れました！

#### 対応３：ホストをアクティブにします。
以下のコマンドを実行すればアクティブになるそう。

```cmd
$ eval $(docker-machine env default)
```

eval…？
嫌な予感しかしない。

```cmd
'eval' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
```

**知ってた**

色々調べましたが、windowsのコマンドプロンプトでevalを実行してるサイトは見当たりませんでした。

-追記-
**なんでホストをvirtualboxで作ってんだこいつは。**
Hyper-Vを指定することも可能なようなので、検証しました。

参考サイトは[ここ](https://qiita.com/ohhara_shiojiri/items/801a24a2c94ff93be82d)です。

####1.仮想スイッチを設定
Hyper-Vマネージャーを開きます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/147369/7a0dc8ad-c27c-445a-402a-47b4a94e595b.png)
画面右の「仮想スイッチマネージャー」を押下します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/147369/c2a198d4-0962-8c43-93da-58d408991559.png)
次に「仮想スイッチの作成」を押下します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/147369/5254b094-c465-7e40-92e9-405e835e4b80.png)
任意の名前をつけてOKボタン押下。

その後、「ModyLinuxVM」を右クリック＞「設定」を押下すると、設定画面が出てきます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/147369/b71c002d-bc34-9bd4-e9f0-cc13e4528291.png)
デフォルトでハードウェアの追加タブが開かれているので、
「ネットワークアダプター」を選んで「追加」ボタンを押します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/147369/3a99f673-76ad-e6af-aa7d-2d29e6f59174.png)
仮想スイッチのところを先ほど作成した仮想スイッチに設定し、
OKで完了！

#### 2.Hyper-Vでホスト作成
ここからは管理者権限のPowerShellを使っています。

```powershell
PS C:\Windows\system32> docker-machine create -d hyperv default
```
わくわく。

```powershell
～中略～
(default) Creating SSH key...
(default) Creating VM...
(default) Using switch "visual switch"
(default) Creating VHD
(default) Starting VM...
(default) Waiting for host to start...
```
**動かない・・・。**

一度キャンセルして、再度実行。

```powershell
PS C:\Windows\system32> docker-machine create -d hyperv default
Docker machine "default" already exists
```

**あっ、そう・・・。**

気を取り直して、ホストがアクティブかチェック。

```powershell
PS C:\Windows\system32> docker-machine active
default
```

大丈夫みたいですね。

それならpullできるでしょ！　早速実行！

```powershell
PS C:\Windows\system32> docker pull httpd
Using default tag: latest
error during connect: Post http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.39/images/create?fromImage=httpd&tag=latest: open //./pipe/docker_engine: The system cannot find the file specified. In the default daemon configuration on Windows, the docker client must be run elevated to connect. This error may also indicate that the docker daemon is not running.
```

ナンデ！？

・・・もう少し調査します。

# ケース２：Docker for Windows うぃず VirtualBox
**アクティブじゃないなら直接弄ればいいじゃない！**
という魂胆で、ケース１で作成したホストを動かしていきます。

###1.VirtualBoxから仮想マシンを開く

![image.png](https://qiita-image-store.s3.amazonaws.com/0/147369/fe573c5e-d539-edff-210f-b5a3edf81892.png)
ケース１の作業でdefaultが作られていますね。

### 2.httpdイメージをダウンロード
ホストが云々うるさかったコマンドプロンプト君の事は忘れて、再度httpdイメージのダウンロードをしていきます。

```cmd
$ docker pull httpd
```

結果・・・

```cmd
$ docker images
REPOSITORY          TAG          IMAGE ID          CREATED          SIZE
httpd               latest       2a51bb06dc8b      5 days ago       132MB
```

できました！　よしっ！

### 3.httpdイメージからコンテナを作成
いよいよコンテナを作成します！
これが出来れば動かせるって[前述の参考サイト](https://weblabo.oscasierra.net/docker-httpd-usage/)が言ってました！
~~勝ったなガハハ！~~

```cmd
$ docker run -d -p 8080:80 httpd
```

ウィニングランは気持ちがいいですねえ。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/147369/2603eb28-e737-cc59-21ac-18c871bebfcf.png)
・・・うん？

![image.png](https://qiita-image-store.s3.amazonaws.com/0/147369/9860a163-ffd1-f706-37b5-27e57b67bfe3.png)
**んんん～！？**

謎の大なり君が出張ってきただけで、うんともすんともしません。
本来ならば作成されたコンテナのIDが表示されるのですが。。

エラーが出ないので調べようもない・・・。

うーん・・・**次！**
# ケース３：DockerToolbox
ケース１でつまづいたevalなんたらというのは、DockerToolboxであれば実行可能と小耳に挟みました。
どこで拾った情報なのかは取得し忘れました、すみません。

とにかくDockerToolboxとかいうのを入れて試してみようじゃありませんか！
早速以下のサイトよりWindows版をインストールしました。
https://docs.docker.com/toolbox/toolbox_install_windows/

そして「Docker Quickstart Terminal」を起動！

```cmd
etails: 00:27:53.530227 Console: Machine state changed to 'Saved'
Looks like something went wrong in step ´Checking status on default´... Press any key to continue..
```

Docker Quickstart Terminal「**じゃあの**」

キーを押したら即サヨナラしてしまいました。一期一会にも程があります。
何が起きたのか、再度google翻訳パイセンを問い詰めます。

曰く、「マシンが「保存済み」らしいよ？」とのこと。
マシンってdefaultのことだよな…とVirtualBoxを確認してみると・・・
![image.png](https://qiita-image-store.s3.amazonaws.com/0/147369/0d6fc9f5-52d5-5ea8-f519-e5577c88f60c.png)
確かに保存になってる！
じゃあ起動すりゃいいじゃん！
![image.png](https://qiita-image-store.s3.amazonaws.com/0/147369/b0a71bb6-e673-3a25-3ea3-e4e94b584bb7.png)
アイエエエ！？

だ、大丈夫だ・・・コマンドプロンプトからホストを再起動すれば・・・

```cmd
$ docker-machine restart default
Restarting "default"...
Waiting for SSH to be available...
```

**固まった・・・**
# ケース４：Docker いん Vagrant
Hyper-Vは途中からいらない子、VirtualBoxは大なり、Toolboxは5秒で破局と八方塞がり。
最後の手段として、Vagrantで仮想環境を作り、その中にdockerを乗っける形を試してみます。

~~それもうvagrantでいいのでは~~

…現在進行形なので、まとまったら追記します。

#おわりに
docker難しすぎません…？