IBM Microclimate を Docker Toolbox (on Windows) で動かす

# はじめに
[IBM Microclimate](https://www.ibm.com/us-en/marketplace/microclimate) の Windows ローカル環境での前提条件は Docker for Windows になっている (2018/04/23現在)。
 
Docker for Windows は Hyper-V 上に構築されているため、Docker for Windows を使用する場合 Intel VT-x 技術が無効になってしまい他の仮想化ツールである VMware Workstation や VirtualBox の起動が困難になる。特に Windows PC上で IBM Cloud Private Community Edition を実行することを考えると、Docker Toolbox (VirtualBox版)を利用したい (Vagrant を使用した IBM Cloud Private の構成イメージがあるためICP環境の構築が非常に楽なため)。

そこで（サポート外なのは承知なうえ） Microclimate を Docker Toolbox 版の Docker で動かしてみたのでここでそのステップと注意点を共有する。
※ ただ筆者は Docker Toolbox はあまり使い慣れていないので、よりよいやり方があるかもしれない。

なお、以下の手順では Microclimate に同梱されているスクリプトの修正が必要になる。これらの修正については Microclimate の開発者にフィードバックする予定。
(2018/05/14 編集 github リポジトリに issue をオープンしました。 https://github.com/microclimate-dev2ops/microclimate-release/issues/1)
(2018/08/09 編集 Microclimate 18.07 での手順に修正しました。)

# 環境
* Windows 10 Pro 64bit (日本語版)
* Docker Toolbox v18.04.0-ce
* Oracle VM VirtualBox 5.2.8 (Docker Toolbox v18.04-ce 同梱版)
* IBM Microclimate 18.07


# 導入のステップ
1. Microclimate.zip のダウンロード
単純に [Microclimate Getting startedのページ](https://microclimate-dev2ops.github.io/gettingstarted)からダウンロードする。

2. microclimate.zipをディレクトリに展開する。
    このディレクトリにコマンドラインのシェルが格納される。またmicroclimateのワークスペースディレクトリが自動的にこのディレクトリの下に配置されるような作りになっているため、配置場所には注意が必要となる。
    ワークスペース・ディレクトリは、Dockerマシンから共有できるように構成する必要があるためこのディレクトリを作成したドライブが重要となる。
    以下では例として C:\microclimate に展開したものとする。
    展開後のディレクトリは以下のようになる。
    (Dockerとの連携の都合でパスの大文字小文字を意識する必要があるので、パスに含まれるフォルダー名などはすべて小文字にしてしまうことを推奨する)
    
    ```
    C:\microclimate
     \cli
       install.ps1
       mcdev.ps1
       ...
     \dockerfile
       ...
     \LICENSE
     ...
    ```
    
3. Docker-Machine を既に起動していた場合は docker-machine stop コマンドを使用して停止する。

4. VirtualBox のGUIを起動して、default 仮想マシン (Docker Toolbox の Linux VM) の構成を開き、共有フォルダーの設定で microclimate を展開したドライブを共有フォルダーとして追加する。
    
    
    ```
    パス: C:\  
    フォルダー名: C 
    読み込み専用: チェックをつけない
    自動マウント: チェックをつける
    ```

    フォルダー名は C_DRIVE ではなく C とする必要があることに注意する。 (これにより Docker Machine が自動的に /C としてマウントするようになる)。Cドライブ以外に展開した場合は、フォルダー名をそれに合わせて修正すること (たとえば E:\DevTools\Microclimate に microclimate.zip を展開した場合であれば、フォルダー名は E とする。
    
    
5. Powershell を管理者として起動する。

4. Docker Machine の起動とシェルの実行
    Powershell 上で以下のコマンドを実行して Docker Machine を立ち上げる。
    
    ```powershell
    PS C:\WINDOWS\system32> docker-machine start
    ```

5. Microclimate のインストール
    シェルの中で以下のコマンドを実行して liberty イメージの導入を行う。
    cd コマンドで Microclimate の導入先ディレクトリを開くときには、ディレクトリ名の「大文字小文字」が完全に一致するように注意する。これは microclimate のワークスペースのフォルダーを Docker にマウントする際に大文字小文字の区別が必要となるため。
    
    ```powershell
    # Microclimateのzip展開後のディレクトリ に cd して、install.ps1 を実行。
    PS C:\WINDOWS\system32> cd C:\microclimate 
    PS C:\microclimate> .\cli\install.ps1
    ```

6. Microclimate の docker-compose 構成ファイルの修正
    適当なテキスト・エディターで以下のファイルを開いて、microclimate-file-watcher, microclimate-potal、microclimate-theia の公開ポートの定義を `"127.0.0.1:<port>:<port>"` から `"<port>:<port>"` (IPアドレスの指定なし ※) に変更する。
    3か所あるため注意。
    

    (Microclimateのzip展開後のディレクトリ)\docker-compose.yaml

    変更前 (microclimate-portal の例)
    
    ```
  ・・・省略・・・
  microclimate-portal:
    ...
    depends_on:
      - microclimate-file-watcher
      - microclimate-theia
    ports:
      - "127.0.0.1:9090:9090"
    ...
  ・・・省略・・・
    ```
    
    変更後 (microclimate-portal の例。同様に file-wather と theia のポート定義の修正も必要)
    
    ```
  ・・・省略・・・
  microclimate-portal:
    ...
    depends_on:
      - microclimate-file-watcher
      - microclimate-theia
    ports:
      - "9090:9090"
    ...
  ・・・省略・・・
    ```

    ※ Docker Toolbox (VirtualBox)版の場合は Dockerイメージのネットワークはローカルホストには公開されず、Docker Machine用のIPアドレス (Docker Toolbox のデフォルト設定では 192.168.99.100) に公開されるため、明示的に 127.0.0.1 にバインドされてしまうと接続できないため。
    
7. 以下のコマンドを実行して Microclimate を起動する。
    
    ```
    mcdev start
    ```
    
    注意: mcdev start コマンドの最後にブラウザーが自動的に立ち上がり http://localhost:9090/ にアクセスするが画面が表示されない(Docker Toolbox版の場合は別のIPアドレスに割り当てられているためこれは予期される状態)。
    

8. microclimate の展開ディレクトリの下に microclimate-workspace というディレクトリが作成されていることを確認する。
    うまく作成できていない場合は、Docker Machine となっているVirtualBoxのVM (default) の共有フォルダーの設定 (ステップ4) と、$ENV:WORKSPACE_DIRECTORY のパスの大文字、小文字が正しいかどうか確認する。大文字小文字が正しくない場合は一度 Powershell を閉じて、ステップ 5 から再度実行する。
    
    
    ```powershell:WORKSPACE_DIRECTORYの確認
    PS C:\microclimate> $ENV:WORKSPACE_DIRECTORY
    /C/microclimate/microclimate-workspace
    ```
    
        
9. mcdev.ps1 を修正して localhost を指定している部分を Docker Machine のIPアドレスに置き換える(デフォルトは 192.168.99.100。 docker-machine config で確認可能)。
    
    ```powershell:mcdev.ps1

    # 27行目のあたり
    while ($count++ -lt 30) { # max 30 secs then timeout
        $html_status = 0
        try {
            # localhost から 192.168.99.100 (Docker Machine の IP) に置き換え
            # $html_status = (Invoke-WebRequest -method head -URI http://localhost:$portal_port).statuscode
            $html_status = (Invoke-WebRequest -method head -URI http://192.168.99.100:$portal_port).statuscode
        } catch {}
        if ($html_status -eq 200) {
            break # microclimate is up, good to go
        }
        Start-Sleep -s 1
    }
    # localhost から 192.168.99.100 (Docker Machine の IP) に置き換え
    #start "http://localhost:$portal_port"        
    start "http://192.168.99.100:$portal_port"        
    ```


10. mcdev stop を実行して microclimate を一度停止する。
11. mcdev start を実行して microclimate を起動する。
12. Docker-Machine の IP アドレスの 9090 にブラウザーでアクセスして、Microclimateのポータル画面を開く。
    
    (例: Docker Toolbox のデフォルトの設定の場合) 
    http://192.168.99.100:9090/

以上です。