Windows へ Boot2Docker を入れる方法や、入れた後の起動や容量に関する課題を整理しました。
■ Docker を Windows で使う
DockerはLinuxコンテナを手軽に扱うためのアプリケーションです。LXCとはLinux Containersという名前の通り、Linuxでしか使えないのかな?という先入観がありますが、決してそうではありません。Windows でも Docker を簡単に扱えるようにするための、「Boot2Docker」というツールが、Docker社から提供されています。
Boot2Dockerの実態は、仮想マシン管理ソフトウェア VirtualBox と、その上で Docker を動かすための仮想マシンと OS “Tiny Linux Core Linux” を使い、この仮想マシンにログインし、Linux 上で Docker を扱うのと同等の環境を実現するためのツールです。
1. 起動方法がイマイチ分かりにくいんだけど?
2. 初期のディスク容量が少ないけどどうするの、もう使っているんだけど?
という、Windows上でありがちな課題について整理しました。また、記事は主に Windows 向けの説明ですが、Boot2Docker の持つ課題に関しては、Mac OS X 版でも同様に読めるように気をつけています。
※ この記事の環境は、Windows 7 (64bit) + Boot2Docker 1.4.1 です。
■ Boot2Dockerって何?
Docker は、Linux 上で Linux Containes 技術( Linux コンテナ )を使っているため、Linux カーネルが搭載されていない Windows 上ではそのまま使う事ができません。ですが、Boot2Docker ( http://boot2docker.io/ ) というツールを使うことで、Linux 環境上で Docker を扱うような感覚で、Docker をWindows 上でも、Mac OS 上でも利用出来ます。
そんな Boot2Docker の正体とは、正確には Oracle 社の提供する VirtualBox という仮想化管理ツール上に、軽量な Linxu ディストリビューションである Tiny Core Linux (小さなコアの Linux という意味;公式 http://tinycorelinux.net/ )の動作する Linux の仮想マシンをセットアップし、その上で Docker を動作させています。
Boot2Docker の利用者は、そのような背景をあまり気にせず、Linux と同等に OS と連携した Docker 環境を体験できるようになります。Boot2Docker を使わなくても、Docker を利用することは出来ますが、そのためには VirtualBox 上に何らかの仮想化された Linux OS 環境の稼働が必要です。その OS 環境の管理・維持を考えるのであれば、Windows や Mac OS 上で手軽に Docker をつかるには?という視点で、Boot2Docker は手軽似使える魅力的な手法ではないでしょうか。
(と、書いてみたのものの、実のところ、私自身が業務で Windows を使う事が多い為、手許の PC で Docker を使えて、かつ管理が楽な方法は無いかな?と試行錯誤したあげく、Boot2Dockre は悪くない選択肢だ、と考えたのが、この blog への投稿に至っています)。
■ Boot2Docker の入手
サイト http://boot2docker.io/ にブラウザでアクセスし、左側メニューの「Windows」をクリックします。画面上に最新安定版のダウンロー情報が表示されるので、緑色の「docker install.exe」をクリックすると、インストーラーのダウンロードが始まります。
ダウロード後は、対象ファイル「docker-install.exe」をダウンロードして、インストーラーを起動します。起動したあとは、画面の指示に従って「次ね」を選び、セットアップを完了します。
なお、このとき既に VirtualBox がインストール済みの環境でも、現在の環境は維持されたまセットアップが可能です。Boot2Docker の環境セットアップ中に、 VirtualBox のバージョンアップが行われる場合もありますが、既存の仮想マシンの情報や環境設定はそのままで利用できます。
■ Boot2Docker を Windows で使うには?
セットアップが完了すると、スタートメニューから「Boot2Docker」→「すべてのプログラム」→「Docker」→「Boot2Docker」を選ぶことで、Boot2Docker が起動します。
クリックすると、コマンドプロンプトの画面が表示されます(実際には、バックグラウンドで VirtualBox が起動し、Boot2Dockre 用の仮想マシン boot2docker-vm が自動的に起動します)。
※ただし、既に cyginw をインストールしている環境では、実行することが出来ません。「sh.exe は動作を終了しました」と画面に表示されて、異常終了してしまうことがあります。そのような場合は、専用の Boot2Dockre 起動用のバッチファイルを作成することがオススメです。デスクトップ上で「boot2docker.bat」等のファイル名を作成し、内容は次のようにします。
@echo off title Boot2docker boot2docker.exe up boot2docker.exe ssh boot2docker.exe save pause
このバッチを作っておけば、自動的に Boot2Docker の仮想マシンを起動するだけでなく、仮想サーバにもログインします。
内容を解説します。「@echo off」は、コマンドプロンプト(MS-DOS)伝統の書式であり、実行したコマンド(バッチでの入力を含む)を画面上に表示しない機能を持ちます。また、「title」は、通常「コマンドプロンプト」画面に表示されるタイトル部分を編集します。
さらに、Boot2Docker (Tiny Core Linux)を終了したい時は、対象仮想マシン(boot2docker-vm)を終了するのではなく、サスペンド(一時停止)することにより、次回以降の作業再開時間を短縮することができるようにしています。サスペンド不要な場合は、「boot2docker.exe save」を「boot2docker.exe stop」などに書き換えます。
このバッチファイルを作成したあとは、実行すると自動的に Boot2Docker が起動します。
あとはプロンプトが表示されますので、「boot2dokcer ssh」と実行した後は、Docker を Linux 環境と同様に操作できます。
■ boot2dockerディスク容量の変更①:データを初期化
仮想マシン「boot2docker–vm」は、初期構成時では容量が20GB(今後のバージョンでは40GBが標準)です。大きなファイルを扱うケースや、開発がすすむと、初期のディスク容量では心許なくなります。初回設定時であれば、boot2dockerを初期化するのが一番簡単な方法です。
まず、boot2docker.exe には様々なオプションがあります。「boot2doker help」と実行すると、様々なコマンドのオプションの中に、初期化時(init時)に関連するメモリとディスク容量、そして仮想マシン名称の項目があることがわかります。
-s, --disksize=20000: boot2docker disk image size (in MB). -m, --memoy=2048: virtual machine memory size (in MB). --vm="boot2docker-vm": virtual machine name.
初期化時にこれらのオプションを変更する事で、任意の容量に指定できます。【重要】 ただし、これはあくまで初期化作業であり、既存の Docker 環境は削除しなくてはいけません。内容を保持したまま容量を変えたいときは、後述の方法をご利用願います。
初期化コマンドを実行して、容量を変えるには、次のようにコマンドを実行します。
boot2docker stop boot2docker delete (イメージの削除) boot2docker init --disksize=50000 (容量を 50GB で作成) boot2docker start
あとは、「boot2docker ssh」で仮想マシンの中に入り、「df」コマンドを実行すると容量が増えていることを確認する事ができます。
■ boot2dockerディスク容量の変更②: 仮想マシンHDDの容量を変更
仮想マシンの中身を維持したまま HDD 容量を変更するには、次の手順で行います。
1. 仮想マシンのイメージ形式を変換し、物理的な容量を変更する
2. パーティション変更ツール ( GParted ) を使い、論理容量を変更する
以下では、具体的な手順をみていきます。これは Docker 社のサイトで公開されている情報を元にしました。
Getting “no space left on device” errors with Boot2Docker?
https://docs.docker.com/articles/b2d_volume_resize/
Boot2Docker イメージのファイルは VMDK 形式 ( Virtual Machine Disk 形式; VirtualBox や VMware Workstation が対応) です。これは物理容量を変更できないため、便宜上、VDI 形式 ( Virtual Disk Image 形式; VirtualBox 専用のデータ形式 ) に変更し、その時に容量を変更します。
作業にあたっては、Boot2Docker を停止します。
C:\Program Files\Boot2Docker for Windows>boot2docker.exe poweroff C:\Program Files\Boot2Docker for Windows>boot2docker.exe status poweroff
次に VMDK 形式のイメージを VDI に変換するために、クローンを作成します。ここではマシンイメージが「C:\Users\zem\VirtualBox VMs\boot2docker-vm\」にあるものと想定していますが、保管場所のパスは、環境に応じて置き換える必要があります。また、以下の例では「boot2docker-vm.vid」というファイル名にしていますが、任意のファイル名を指定できます。
> cd C:\Program Files\Oracle\VirtualBox > VBoxManage.exe clonehd "C:\Users\zem\VirtualBox VMs\boot2docker-vm\boot2docker-vm.vmdk" "C:\Users\zem\VirtualBox VMs\boot2docker-vm\boot2docker-vm.vid" --format VDI --variant Standard
実行すると、次のようにイメージの変換状況が表示されます。
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% Clone hard disk created in format 'VDI'. UUID: 8b50b271-e145-4689-954c-cc89058d9ff4
それから、容量の変更を行います。「–resize」オプションで指定する単位は「MB」です。ここでは例として50GBに変換します。
C:\Program Files\Oracle\VirtualBox>VBoxManage.exe modifyhd "C:\Users\zem\Virtual Box VMs\boot2docker-vm\boot2docker-vm.vid" --resize 50000 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
これでイメージの変換と容量変更作業が終わりました。
次に、パーティションの変更を行い論理容量を変更します。ここでは Gparted ( http://gparted.org/ ) で配付されているツールを使います。Gparted は GNOME 上で利用可能なパーティション編集ツールです。ダウンロードのページから、「GParted Live CD/USB/HD/PXE Bootable Image」の「Stable Releases」にある「Download gparted-live-~.iso」をダウンロードします。
それから VirtualBox 側の設定変更を行います。仮想マシン「boot2dokcer-vm」を右クリックし、「設定」をクリックします。そして、メニューの「ストレージ」をクリックし、「IDEコントローラーを追加」をクリックします。
次に、”コントローラー IDE” の列にある「CD/DVD デバイスを追加」をクリックします。
画面上に「CD/DVDドライブをコントローラー”IDE”に追加します。仮想CD/DVDディスクをドライブに割り当てますか?仮想のドライブだけを割り当てますか?」は「ディスクを選択(C)」をクリックし、ダウンロードした “gparted-live-0.20.0-2-i486.iso” を選びます。
それから、VMDKのイメージ「boot2docker-vm.vmdk」をクリックし、削除ボタンを押します。
「コントローラ: SATA」をクリックし、「バードディスクの追加」ボタンをクリックします。
「仮想ハードディスクをコントローラー “SATA” に追加します。空の仮想ハードディスクを新規作成しますか? 既存の仮想ハードディスクを選択しますか?」では、「既存のディスクを選択(C)」をクリック、変換した「.vdi」ファイルを指定します(この例では boot2docker-vm.vdi です)。
次に、左メニューの「システム」を選びます。GpartedのイメージをCD-ROMからブートしたいので、CD-ROMにチェックが入っているか確認し、「OK」をクリックします。
VirtualBox マネージャーから「boot2docker-vm」を起動します。正常にブートできると、画面が表示されるので、そのまま「エンターキー」を入力します。
“Configuring console-date”では「tab」キーを押して「<OK>」に移動し、「エンターキー」を押します。キーマップは、日本語であれば「15」、英語キーボードは「33」を入力します。それから、画面モードはXを起動したいので「0」を入力します。
しばらくすると、自動的に Gparted が起動し、現在のディスク容量が表示されます。それから「/dev/sda」の領域をクリックし、「Resize/Move」ボタンをクリックします。
次のリサイズ画面では、新しい容量「New size(MiB)」を調整します。通常は、ディスク全体を使いたいため “Free space following (MiB):” を「0」になるよう「New size」を調整します(数値を入れるか、画面上の容量枠を右にドラッグします)。決定は「Resize/Move」ボタンをクリックします。
次に「Apply」(適用)アイコンをクリックし、確認画面で「Apply」を再度クリックします。
処理が進行するので、完了まで暫く待機します。画面で「All operation successful completed」(全ての作業が完了しました)と表示されたら「Close」をクリックします。
「GParted」を終了し、仮想マシンも停止します。 メニューの「GParted」->「Quit」の後、画面左上の「Exit」アイコンをクリックすると、メニューが表示されますので、「Shutdown」を選び「OK」をクリックします。
再び、VirtualBoxの「boot2docker-vm」の「設定(S)」を選びます。メニューの「ストレージ」から、「コントローラ: IDE」を削除するため、右クリックし、「コントローラーを除去」をクリックし、最後に「OK」をクリックして画面を閉じます。
最後に、boot2dockerを起動し直します。「boot2docker up」を実行の後、「boot2docker ssh」で接続します。「df」コマンドを実行すると、容量が増えていることが確認できます。
docker@boot2docker:~$ df
Filesystem Size Used Available Use% Mounted on
rootfs 1.8G 85.8M 1.7G 5% /
tmpfs 1.8G 85.8M 1.7G 5% /
tmpfs 1004.3M 0 1004.3M 0% /dev/shm
/dev/sda1 47.0G 290.9M 44.3G 1% /mnt/sda1
cgroup 1004.3M 0 1004.3M 0% /sys/fs/cgroup
none 215.3G 208.5G 6.8G 97% /c/Users
/dev/sda1 47.0G 290.9M 44.3G 1% /mnt/sda1/var/lib/docker
/aufs
あとは不要になった「.vmdk」ファイルを削除することも出来ますし、VirtualBox上でイメージを付け直せば、元の容量のファイルで起動することも出来ます。
■参考
- Getting “no space left on device” errors with Boot2Docker?
https://docs.docker.com/articles/b2d_volume_resize/