VagrantfileとDockerfileで$ vagrant upとコマンドを打つだけでよくなる仕組み

# 対象者
- 私と私と同じような境遇の人
- ドットインストールの「ローカル開発環境の構築」で
Docker for MacではなくVirtual BoxからVagrantでDockerを使おうとしている人

# 少し前のお話
前提として私のMacのストレージが残り数GBなので、ソフトを余計に入れたくない。
Docker for Macではなく、上記のローカル開発環境を行いたかった。
それにDocker for Macは遅いらしい。

VagrantfileとDockerfileに処理を書くことで、
コマンドを打たなくて済むので時短になる、間違えがない。
記事ではhello from dockerぐらいしかでていないが、もっと実用的にしたい。


# 引用一覧
ここら辺の記事がわかりやすかった
>
[1. Qiita 「VagrantとDockerについて名前しか知らなかったので試した」]
(https://qiita.com/hidekuro/items/fc12344d36d996198e96)
[2. Qiita 「やってみた←「VagrantとDockerについて名前しか知らなかったので試した」](https://qiita.com/cs8/items/ab8206ef4e97bb2a5bae)
[3. Qiita 「Dockerfileを書いてみる」]
(https://qiita.com/nl0_blu/items/1de829288db2670276e8)
[4. ドットインストール 「ローカル開発環境の構築 [macOS版]」]
(https://dotinstall.com/lessons/basic_localdev_mac_v2)
[5. ドットインストール 「Vagrant入門」]
(https://dotinstall.com/lessons/basic_vagrant)
[6. ドットインストール 「Docker入門」]
(https://dotinstall.com/lessons/basic_docker)
[7. CodeCampus 「Dockerfileの書き方と使い方」]
(https://blog.codecamp.jp/docker-file-how-to)


最低限1. 2. 7.の記事を見ている、理解できている人を対象にしています。
ただ単に私の記事を見ただけだと、何をやっているのかわからないと思いますので、
そこら辺はご理解よろしくお願いします

# 本題

```zsh:~
$ mkdir -p vm/docker
$ cd vm/docker
```

### Vagrantfile
<details><summary>訂正前コード</summary><div>

```ruby:Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/xenial64"
  config.vm.provider "virtualbox" do |v|
    v.customize ["modifyvm", :id, "--ostype", "Ubuntu_64"]
  end
  config.vm.provision "docker" do |d|
    d.build_image "/vagrant", args: "-t nagahama/httpd"
    d.run "nagahama/httpd", args: "-p 8080:80 -dtv /vagrant:/tmp/shared"
  end
  config.vm.network "private_network", ip: "192.168.33.10"
end
```
</div></details>

### Dockerfile
<details><summary>訂正前コード</summary><div>

```yml:Dockerfile
FROM centos
LABEL maintainer="nagahama"

RUN yum -y install httpd
RUN yum -y install git

# phpとかmysqlとかが入ったパケージをダウンロードしようと思ったが、ダウンロードされない
RUN cd /var/www/html \
    && git clone https://github.com/dotinstallres/centos6.git

EXPOSE 80

VOLUME ["/var/www/html"]

CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
```
</div></details>

### ターミナルでやること

```zsh:~/vm/docker
$ vagrant up
```
```zsh:~/vm/docker
$ open http://192.168.33.10:8080
```


# 最後に
これで繋がるはず。
`$ Vagarant up`としただけで192.168.33.11:8080にアクセスでき、楽になった。
192.168.33.10だけではアクセスできない。これはなぜだろう?
どこにファイルを作ったら更新されるかわからないが、試してみようと思う。
まだ課題は山積みだ。
質問があればしてもらいたいが、これに丸2日もかかっているので答えられるかどうか...
逆にアドバイスをもらいたいです。
とりあえず投稿しました。

# 訂正(この記事をかいて2日後)
これまでやってきたことは単にapacheのテストサーパーを表示するためだけにやってきたことに気付きました。奇跡的にできていたことで、感動を覚えるので、残しておきましたが、以下のようにすれば、htmlファイルを表示することができます。

### Vagrantfile

```ruby:Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/xenial64"
  config.vm.provider "virtualbox" do |v|
    v.customize ["modifyvm", :id, "--ostype", "Ubuntu_64"]
  end
  config.vm.provision "docker" do |d|
    d.build_image "/vagrant", args: "-t nagahama/httpd"
    d.run "nagahama/httpd", args: "-p 8080:80 -d"
  end
  config.vm.network "private_network", ip: "192.168.33.10"
end
```

### Dockerfile

```yml:Dockerfile
FROM centos
LABEL maintainer="nagahama"

RUN yum -y install httpd
ADD ./html /var/www/html/

EXPOSE 80

CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
```

最初の、`$ mkdir -p vm/docker`で作ったvm/dockerの階層の下に(Dockerfileの5行目でADD ./htmlとしたが、ここで作ったファイル名を指す)`html`ファイルをおいて、`index.html`を適当に作れば、`vm/docker`で`$ vagrant up`打つだけで、`192.168.33.10:8080`に、それが反映される仕組み。