主にプログラミングに関して。Python, .NET Framework(C#), JavaScript, その他いくらか。
記事にあるサンプルやコードは要検証。使用に際しては責任を負いかねます

スポンサーサイト

                
tags:
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Windows 10: Boot2Docker on Hyper-V

                
tags: Docker
 Windowsには8以降でHyper-Vが導入されている。アプリ開発でWindowsOSのエミュレータが動くときはこのHyper-Vにお世話になる。そういうわけで欠かせない機能になっているが、このHyper-VをOnにするとCPU仮想化機能の都合で他の仮想化ソフトが使えなくなる。VirtualBoxとか。VirtualBoxが使えなくなるとBoot2Dockerが起動しなくなる。そんなわけでBoot2DockerをHyper-Vで動かすことにする。

参考
http://www.henning.ms/2015/05/11/running-docker-on-hyper-v/
http://blog.thestateofme.com/2014/02/18/boot2docker-on-hyper-v/

 やることはわりと単純。Boot2DockerはISOが提供されているのでそれを入手し、それをHyper-Vで動かす。Boot2Dockerの永続ストレージを用意する。ホストOSがネットワークでシェアしているディレクトリをVirtualBox上で動かしたBoot2Dockerと同様にマウントして、ホストで用意したファイルをBoot2Docker内で使えるようにする。


・Boot2DockerのISOの入手
 下記から。
https://github.com/boot2docker/boot2docker/releases

・Hyper-VでBoot2Dockerの立ち上げ
 落としたISOをHyper-Vで立ち上げる。新しいVirtual Machineを作成し、DVDドライブにISOイメージを登録。とりあえず立ち上げを確認したいのでハードディスクはまだ付けておかなくてもいい。もちろんネットワークはLAN内ファイルシェアやもろもろのダウンロードができるようにつないでおく。External設定で。
 準備ができたらその仮想マシンを起動し、Boot2Dockerが入力を受け付ける画面にまで進むことを確認する。気が済んだら仮想ハードディスクを取り付けるので落とす。

・ストレージの用意
 Boot2Dockerに仮想ハードディスクを取り付ける。Boot2Docker仮想マシンのSettingsを開いて、IDE Controller0のところにHDDを追加する。新規の仮想ハードディスクを取り付ける。
 仮想ハードディスクを取り付けたらBoot2Docker仮想マシンを立ち上げる。そしてまずフォーマットを下記のようにかける。

sudo fdisk /dev/sda
n
e
ターミナルに従ってデフォルトとされてる値を入力
同様にデフォルト値を入力
n
l
同様にデフォルト値を入力
同様にデフォルト値を入力
w
sudo mkfs.ext4 -L boot2docker-data /dev/sda5

 パーティションの1から4でどれにするか聞かれたら1を選ぶ。
 上記のコマンドが済んだら準備ができたので再起動。

・ホストマシンのシェアディレクトリをBoot2Dockerにマウント
 せっかくだからホストマシンのPowerShellからSSH接続をまず試し、接続が成功したら続いてマウントをする。Boot2Dockerが立ち上がるとき、あるいは起動後にifconfigでIPアドレスを調べる。そしてそこにuser:docker pass:tcuserでPowerShellからログインする。PowerShellで下記を入力。
SSH docker@[Boot2Docker IP]
 パスワードを入れればBoot2Dockerに入れる。このままVirtualBoxのBoot2Dockerと同様に/c/Usersにホストのユーザーディレクトリをマウントする。
 まずディレクトリの作成。
sudo mkdir -p /c/Users
 続いてマウント。
sudo mount //[host's ip]/Users /c/Users -o username=[host user],password=[password]
 マウントコマンドにはパスワードまでつける。LinuxMintで同様のマウントをパスワード抜きでやったら、コマンド入力後にパスワードを聞き返された。しかしBoot2Dockerではパスワード抜きでは即刻access deniedではじかれた。
 VirtualBoxのBoot2Dockerと同様に/c/Users以下にディレクトリがマウントされていることを確認する。


 ついでに以前Boot2Dockerのために作成していた設定ファイルをそのまま使い、コンテナ上で立ち上げたWebアプリにホストマシンからアクセスする。成功すればHello from sv.という文字列がブラウザに表示される。
http://elicon.blog57.fc2.com/blog-entry-465.html
 SSH接続してあるPowerShellからこれまでの追加で以下を入力した。用意済みのシェルスクリプトを実行するコマンドである。
cd /Users/john/docker/b3
sh hello.sh
 接続成功。
1508071502470.jpg



 Hyper-Vの使用によってVirtualBoxが立ち上げられなくなるので、Boot2DockerをHyper-Vで使うことを試みた。Boot2Dockerを立ち上げて永続ストレージを用意できてしまえば、あとは立ち上げ時にホストのネットワークシェアディレクトリをマウントするだけでVirtualBoxのBoot2Dockerと同様に使えた。同様ということでこれまでのBoot2Dockerで使っていた設定ファイルそのままでコンテナを動かせている。これならVirtualBoxなしでもうまくいけそうである。
 参考にした記事では仮想ハードディスクを作成した後、それをベースとしてコピーを作って再び取り付けて使用している。それで新しいBoot2Docker仮想マシンの作成時にフォーマットの手間などが省けるということらしい。ぼくはBoot2Docker仮想マシンは一台で十分だったし、もしのちのちそれを作り直すことになってもその手間が5分(もしかしたら3分程度かも)で済むものだったのでベースのみで使用している。


 さらにVirtualBoxのBoot2Dockerに近づけるには・・・
 Hyper-V管理ツールではなくPowerShellからゲストを立ち上げるには下記。
Start-VM -Name "boot2docker"

 いちいち実行するたびにマウントコマンドを実行するのは面倒。マウントコマンドを起動時に実行されるシェルスクリプトに書いておく。
http://stackoverflow.com/questions/26639968/boot2docker-startup-script-to-mount-local-shared-folder-with-host
 Boot2Dockerでは/var/lib/boot2docker/bootlocal.shが起動時に実行されるので、ここにマウントコマンドを書いておけば立ち上げるたびに自分で書く必要がなくなる。
            

コメントの投稿

非公開コメント

プロフィール

hMatoba

Author:hMatoba
Github

最新記事
リンク
作ったものなど
月別アーカイブ
カテゴリ
タグリスト

検索フォーム
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。