CoreOS(Windows 10 + vagrant + VirtualBox) のインストール（プロキシ環境）

## <i class="fa fa-paw fa-fw"></i> はじめに
`さくらの VPS` で `CoreOS(Container Linux)` を構築して遊んでいたのですが，私の環境が `22` 番ポートすら閉じられていて，ブラウザ上の `シリアルコンソール` で作業するのが面倒になってきたので，ローカル環境でテストした後に，`VPS` に移すことにします．`Windows 10` と銘打ってますが，`vagrant` なら同じ手順で問題ないと思います．毎度のことながら，私の備忘録代わりのメモになります．

## <i class="fa fa-leaf fa-fw"></i> 前準備
`Docker for Windows` の方が手軽だと思うのですが，`Hyper-V` を有効にすると，`VirtualBox` が起動しないので，`Vagrant + VirtualBox` で `CoreOS` を利用します．

### Vagrant のインストール
最新バージョンをインストールして，コマンドプロンプトから `Plugin` をインストールします．`Proxy` 環境なので，プロキシの設定をしてから作業します．(`xxx.xxx.xxx.xxx` と `pppp` は． `Proxy` サーバの `IP アドレス` と `ポート番号`)

```cmd
> set HTTP_PROXY=http://xxx.xxx.xxx.xxx:pppp
> set HTTPS_PROXY=http://xxx.xxx.xxx.xxx:pppp
> vagrant plugin install vagrant-winnfsd
> vagrant plugin install vagrant-ignition
> vagrant plugin list
```

### VirtualBOX のインストール
最新バージョンをインストールします．

## CoreOS
### ひな型の取得
Git から `Vagrantfile` を取得します．

```cmd
> cd ~/VMS
> git clone https://github.com/coreos/coreos-vagrant/ coreos
> cd coreos
```

### Vagrantfile のファイルの編集
Vagrantfile を編集します．ここではメモリの変更と共有フォルダの設定をしています．`IP アドレス` の変更が必要なら適宜変更します．

```:Vagrantfile
$vm_memory = 2048
$shared_folders = {'./share' => '/home/core/share'}
```

### CoreOS の設定ファイル
`CoreOS` の作成時(`vagrant up`)に，`Proxy` の設定を適用するために，`config.ing` を作成します

```json:config,ign
{
  "ignition": {
    "version": "2.0.0",
    "config": {}
  },
  "storage": {
    "files": [
      {
        "filesystem": "root",
        "path": "/etc/profile.d/proxy.sh",
        "contents": {
          "source": "data:,export%20http_proxy%3Dhttp%3A%2F%2Fxxx.xxx.xxx.xxx%3Apppp%0Aexport%20https_proxy%3Dhttp%3A%2F%2Fxxx.xxx.xxx.xxx%3Apppp%0Aexport%20ALL_PROXY%3Dhttp%3A%2F%2Fxxxx.xxxx.xxxx.xxxx%3Apppp",
        "verification": {}
         },
        "mode": 420,
        "user": {},
        "group": {}
      }
    ]
  },
  "systemd": {
    "units": [
      {
        "name": "docker.service",
        "enable": true,
        "dropins": [
          {
            "name": "http-proxy.conf",
            "contents": "[Service]\nEnvironment=\"HTTP_PROXY=http://xxxx.xxxx.xxxx.xxx:pppp\""
          }
        ]
      }
    ]
  },
  "networkd": {},
  "passwd": {}
}
```

### CoreOS の起動
コマンドプロンプトから `CoreOS` を作成する．(`~/VMS/coreos` で作業)
(初回は，`CoreOS` のダウンロードなどするのでしばらく時間がかかります．)

```cmd
> vagrant up
```

起動がおわったら，`vagrant ssh` で接続できるか確認します．無事接続できたら，`vagrant ssh` は使いずらいので，`MSYS2` の `SSH` から利用できるようにします．

`Msys2` のターミナルを立ち上げる．

```sh
$ alias vagrant='/Pathto/vagrant/bin/vagrant' (vagrant.exe の場所)
$ cd ~/VMS/coreos
$ vagrant ssh-config >> ~/.ssh/config
$ ssh core-01 (設定を変えていない場合)
```

おそらく，接続できるようになります．

### `docker-compose` のインストール
取り敢えず，入れておきます．

```sh
$ sudo mkdir -p /opt/bin
$ sudo -E curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /opt/bin/docker-compose
$ sudo chmod +x /opt/bin/docker-compose
```

### bash の入力補完の設定
[docker container / image コマンド新旧比較](https://qiita.com/zembutsu/items/6e1ad18f0d548ce6c266) にまとめられてますが，コマンド体系が変更されたので補完できるようにします．

`toolbox` を使用して設定すのですが，`dnf` が環境変数を見てくれないようなので，`toolbox` の `/etc/dnf/dnf.conf` に `Proxy` の設定を追加しています．

```sh
% toolbox
# vi /etc/dnf/dnf.conf
# exit
```

```:dnf.conf
proxy=http://xxx.xxx.xxx.xxx:pppp
```

```sh
$ cd ~
$ toolbox dnf -y install bash-completion
$ toolbox cp /usr/share/bash-completion /media/root/var/ -R
$ sudo -E curl -L https://raw.githubusercontent.com/docker/cli/master/contrib/completion/bash/docker -o /var/bash-completion/completions/docker
$ sudo -E curl -L https://raw.githubusercontent.com/docker/compose/master/contrib/completion/bash/docker-compose -o /var/bash-completion/completions/docker-compose
$ source /var/bash-completion/bash_completion
$ cp $(readlink .bashrc) .bashrc.new && mv .bashrc.new .bashrc
$ echo "source /var/bash-completion/bash_completion" >> ~/.bashrc
```

### その他
コンテナには，`Proxy` の設定はされないので，`docker run --env=HTTP_PROXY=${HTTP_PROXY} ...` とか．`docker build --build-arg HTTP_PROXY=${HTTP_PROXY} . ` とするといいかもしれません([Dockerfile reference](https://docs.docker.com/engine/reference/builder/#predefined-args))．

2017/09/22 追記
`NO_PROXY` も追加しておく方がいいかもしれません．私は，bash の補完設定で，`.bashrc` をホームディレクト(`/home/core`) に持ってきたので，`/~/.bashrc` に追記しました．

```bash:~/.bashrc
export no_proxy="127.0.0.1,localhost,172.17.8.101"
``` 

`172.17.8.101` は　`eth1` の `IP アドレス` です．
ここまで