Ubuntu で有名な Canonical 社が OSS として提供する仮想マシン管理ツール「Multipass」を利用して macOS 上で Docker 環境を構築してみた
はじめに
アノテーション テクニカルサポートチームの 川崎 です。
現在私は、クラスメソッド グループ、アノテーション株式会社で AWS のテクニカルサポートと、新卒メンバー向けの育成に携わっています。
チームメンバーがローカルのmacOS上で自由に開発できるDocker環境を探していたところ、「Multipass」という最適なツールを見つけましたので、ブログで共有します。
以前はDocker Desktopが無料で利用できましたが、一部有料化されたため、代替ソフトウェアを探していました。Multipass は OSS として提供されており、マルチプラットフォーム対応で、macOS、Windows、Linux で使えるのが魅力的です。
本記事では、macOS環境でMultipassを使ってDocker環境を構築する方法をご紹介します。
Multipassとは
Multipass は、Ubuntu仮想マシンを簡単に作成・管理できるツールです。以下がMultipassの主な特徴です。
- Canonical 社がオープンソースとして GitHub 上で開発(GPL-3.0ライセンス)
- 高速な起動と停止
- コマンドラインインターフェースによる簡単な操作
- クラウドイメージを使用した最新のUbuntu環境の提供
- ホストマシンとのシームレスな統合
これらの特徴により、Multipassは開発環境やテスト環境の構築に最適なツールとなっています。
Multipass については、こちらの記事もご覧ください。
インストール
今回は以下の環境で構築を行っています。
- macOS Ventura 13.6.6
- multipass 1.14.0+mac
macOSにMultipassをインストールするには、次の2つのオプションがあります。
- インストーラーを実行してインストール
- brewを利用してインストール
インストーラーを実行してインストール
公式サイトに各OSのインストール手順が掲載されていますので、macOS版のインストーラーをダウンロードしてインストールします。
brewを利用してインストール
Homebrewを使ってMultipassをインストールすることも可能です。
brew install multipass
インストールが完了したら、以下のコマンドでMultipassのバージョンを確認します。
Multipass のドキュメントはこちらで公開されています。
multipass version
実行結果:
multipass 1.14.0+mac
multipassd 1.14.0+mac
Docker環境の構築
Multipassのインスタンス作成
まずはインスタンス(仮想マシン)を作成します。
インスタンス作成前に、ブリッジネットワークの設定を行います。
macOS上のネットワーク・インターフェイス名を指定する必要があるため、事前に下記のコマンドで確認しておきます。
networksetup -listallhardwareports
実行結果(抜粋):
Hardware Port: Wi-Fi
Device: en0
Ethernet Address: xx:xx:xx:xx:xx:xx
...
VLAN Configurations
===================
インターフェイス名「en0」を確認しました。
ブリッジネットワークのインターフェイスとして「en0」を設定します。この後で実行するコマンドの前に、この設定が必要です。
multipass set local.bridged-network="en0"
設定された内容を確認します。
multipass get local.bridged-network
実行結果:
en0
Multipass の blueprint という仕組みを利用して、Docker環境を構築します。blueprint は、Ubuntuインスタンスを用途に応じてカスタマイズする仕組みです。
Docker blueprint を使用すると、Docker インストール済みの Ubuntu インスタンスを簡単に作成できます。インスタンス上で docker / docker-compose コマンドが利用可能です。
multipass launch [イメージ名] [オプション]
ブリッジネットワークを追加するオプションを指定して、Docker blueprint のインスタンスを作成します。
multipass launch docker --bridged
作成したインスタンスにシェルでアクセスします。
multipass shell docker
Ubuntuインスタンス上で、Dockerが正常にインストールされたことを確認します。
docker --version
実行結果:
Docker version 27.3.1, build ce12230
ここで、macOS側のシェルに戻り、Ubuntu インスタンスのIPアドレスを確認しておきます。
multipassコマンドは、macOS側で実行する必要があります。
multipass list
実行結果:
Name State IPv4 Image
docker Running 192.168.64.14 Ubuntu 22.04 LTS
192.168.0.140
172.17.0.1
上記のIPアドレス 192.168.64.14 が、Ubuntuインスタンスのアドレスになります。
サンプルアプリのデプロイ
上記の手順で Docker環境が構築できたので、次にサンプルアプリケーションを実行してみましょう。
サンプルアプリケーションの実行
まずは、簡単なHello Worldコンテナを実行します。
docker run hello-world
これで「Hello from Docker!」というメッセージが表示されれば成功です。
Webサーバのデプロイ
次に、もう少し実践的なWebサーバをデプロイしてみましょう。ここでは、nginxコンテナを使ってみます。
docker run --rm -d -p 8080:80 nginx
ブラウザでhttp://[UbuntuインスタンスのIPアドレス]:8080
にアクセスして、nginxのウェルカムページが表示されれば成功です。
まとめ
Multipassを使ったDocker環境の構築は、Docker Desktop に対する優れた代替ソリューションです。主な利点は以下の通りです。
- OSSとして提供されており、無料で利用可能
- マルチプラットフォーム対応
Docker Desktopと比較すると、GUIがないため初心者には少し扱いづらい面もありますが、コマンドラインに慣れた開発者にとっては非常に効率的なツールとなります。
ぜひMultipassを使ったDocker環境を構築して、その利便性を体験してみてください。開発ワークフローの効率化に大きく貢献するはずです。
以上で、macOS環境でのMultipassを使ったDocker環境の構築方法についてのご紹介を終わります。皆様のDocker開発が、より効率的で楽しいものになることを願っています。