omniSENSE

VirtualBox イメージをDocker イメージに変換する方法

はじめに

VagrantからDockerに乗り換えるためにVirtualBoxのイメージをどうしてもDockerで動かしたく調べてみました。

VirtualBoxのイメージをDockerイメージに変換するには、まずVirtualBoxのイメージをDockerがサポートするフォーマットに変換する必要があります。その後、Dockerにイメージをインポートして、必要に応じて調整を加えることができます。

⚠️
この方法で変換できる場合もありますが、出来ない場合も多々あります。出来たらラッキーぐらいな割合ですので…ダメ元でお試しください。Dockerコンテナはクリーンな状態から作るのが健全です。

事前準備

変換には以下2つを利用しますので、事前にダウンロードしてください。MacでもWindowsでも変換できます。

QEMU

Docker Desktop

イメージ変換手順

VirtualBoxのイメージをDockerイメージに変換する手順です。すでにVMDKイメージになっている場合は、1)は省略してください。

1)VirtualBoxのVDI形式の仮想ディスクをVMDK形式に変換する手順です。
  1. まず、VirtualBoxで使用する仮想マシンをシャットダウンします。
  2. 次に、VirtualBox Managerを開き、変換したい仮想マシンを選択します。
  3. 右クリックして「設定」をクリックし、「ストレージ」タブを選択します。
  4. 「ストレージツリー」セクションで、変換する仮想ハードディスクを選択し、右側の「属性」アイコンをクリックします。
  5. 「属性」ダイアログボックスが開くので、「ポート」および「デバイス」フィールドを見て、そのディスクがどのポートとデバイスに接続されているかを確認します。この情報は、後で使用する必要があります。
  6. コマンドラインインターフェイスを開き、VirtualBoxのインストールフォルダに移動します。
  7. 次に、以下のコマンドを実行して、VMDKに変換します。
VBoxManage clonehd --format vmdk [path-to-virtual-hard-disk-file] [path-to-new-vmdk-file]

たとえば、デスクトップ上の「myvm.vdi」ファイルを「myvm.vmdk」という名前のファイルに変換する場合は、次のコマンドを実行します。

VBoxManage clonehd --format vmdk ~/Desktop/myvm.vdi ~/Desktop/myvm.vmdk

このコマンドは、変換したいVDIファイルのパスと、新しいVMDKファイルのパスを指定します。

以上の手順に従って、VirtualBoxで作成したVDI形式の仮想ディスクをVMDK形式に変換することができます。

2)VMDKファイルをDockerがサポートする形式に変換

VMDKファイルをRAWイメージに変換します。

qemu-img convert -f vmdk -O raw <vmdk-file> <raw-image-file>

ここで、 <vmdk-file> には変換するVMDKファイルのパスを、<raw-image-file> には出力するRAWイメージファイルのパスを指定します。

RAWイメージファイルをターアーカイブ形式に圧縮します。

tar -czvf <image-name>.tar.gz <raw-image-file>

ここで、 <image-name> にはイメージの名前を指定します。

  1. 圧縮されたターアーカイブをDockerにインポートします。
docker image import <image-name>.tar.gz <image-name>:<tag>

ここで、 <image-name> にはイメージの名前を、<tag>には任意のタグ名を指定します。タグ名を指定しない場合は、 latest が自動的に設定されます。

以上の手順を実行することで、VMDKファイルをDockerで使用可能なイメージ形式に変換して、イメージとしてDockerにインポートすることができます。