[メモ] boot2dockerのVagrant boxをpackerにて作成


# 概要
- boot2docker v18.01.0-ceのVagrant box作成
- https://github.com/dduportal/boot2docker-vagrant-box を使用させてもらう
    - 変更なしで、make時に、`BOOT2DOCKER_VERSION=18.01.0-ce B2D_ISO_CHECKSUM=e2990e96fb681cc4bf4557a2790109f3`をつける。
    - このチェックサムは、一度 iso をダウンロードして、以下のようにする。
  
		```shell-session:実行例
		$ md5sum ./boot2docker.iso
		e2990e96fb681cc4bf4557a2790109f3 *./boot2docker.iso
		```


# 環境
- ホスト機 Windows 10 64bit


# 手順

1. 必要ツール類を入れる
    - chocolatey
        - `cinst -y git vagrant virtualbox packer`
    - `make`
        - https://sourceforge.net/projects/ezwinports/files/ から、make-4.2.1-without-guile-w32-bin.zip をダウンロード
        - `C:\Program Files\Git\mingw64\` 以下に解凍

2. 適当な作業フォルダ作成(例: C:\Vagrant\packer)、git bashを開く
3. 以下、こぴぺして待つと、`boot2docker_virtualbox.box`が出来上がる。

	```bash
	# 念のため
	export VAGRANT_PREFER_SYSTEM_BIN=1
	# クローン
	git clone https://github.com/dduportal/boot2docker-vagrant-box
	cd boot2docker-vagrant-box
	#
	make build-virtualbox BOOT2DOCKER_VERSION=18.01.0-ce B2D_ISO_CHECKSUM=e2990e96fb681cc4bf4557a2790109f3	
	```
4. あとは、いつも通り

	```bash:仮想機起動、ログイン
	# box登録、Vagrantfile作成
	BOX_NAME=boot2docker-v18.01.0-ce
	vagrant box add boot2docker_virtualbox.box --name ${BOX_NAME}
	vagrant init -m ${BOX_NAME}

	# 必要だったら、Vagrantfile編集
	#   config.vbguest.auto_update = false
	# を追加したり、とか。

	# 
	vagrant up
	# ログイン
	vagrant ssh
	```

	```bash:仮想機内で、hello-world
	docker run -it --rm hello-world
	.
	.
	.
	exit #抜ける
	```




	```shell-session:いつものメッセージ
	docker@boot2docker:~$ docker run -it --rm hello-world
	Unable to find image 'hello-world:latest' locally
	latest: Pulling from library/hello-world
	ca4f61b1923c: Pull complete
	Digest: sha256:66ef312bbac49c39a89aa9bcc3cb4f3c9e7de3788c944158df3ee0176d32b751
	Status: Downloaded newer image for hello-world:latest

	Hello from Docker!
	This message shows that your installation appears to be working correctly.

	To generate this message, Docker took the following steps:
	 1. The Docker client contacted the Docker daemon.
	 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
		(amd64)
	 3. The Docker daemon created a new container from that image which runs the
		executable that produces the output you are currently reading.
	 4. The Docker daemon streamed that output to the Docker client, which sent it
		to your terminal.

	To try something more ambitious, you can run an Ubuntu container with:
	 $ docker run -it ubuntu bash

	Share images, automate workflows, and more with a free Docker ID:
	 https://cloud.docker.com/

	For more examples and ideas, visit:
	 https://docs.docker.com/engine/userguide/

	docker@boot2docker:~$ exit
	```
	```bash:使用後は...
	# vagrant reload # 再起動

	# vagrant halt # シャットダウン

	# vagrant destroy -f # 仮想機破棄

	# boxの登録削除
	# BOX_NAME=boot2docker-v18.01.0-ce
	# vagrant box remove ${BOX_NAME}
	```

# その他
- `docker-compose`

    ```bash:v1.19.0
    sudo curl -L https://github.com/docker/compose/releases/download/1.19.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose && sudo chmod a+x /usr/local/bin/docker-compose
    ```

- `/vagrant` がうまくマウントされてない
- `mount`で確認すると、`/home/docker/C:/Vagrant/packer/boot2docker/boot2docker-vagrant-box`になってる.

	```shell-session:むむむ.
	docker@boot2docker:~$ mount | grep vagrant
	C:_Vagrant_packer_boot2docker_boot2docker-vagrant-box on /home/docker/C:/Vagrant/packer/boot2docker/boot2docker-vagrant-box type vboxsf (rw,nodev,relatime)
	docker@boot2docker:~$
	```