Dockerをだれでも手軽にコンテナ利用できる環境構築
コンテナを用いてアプリケーションを構築・テスト・デプロイできるソフトウェアプラットフォームのDockerで、Mac向けOSであるmacOSを実行できるインターフェース「Lumier」が登場したのでやってみました。
強味
LumierはDockerコンテナを利用してmacOS仮想マシンをより簡単に、そして効率的に実行するためのツールであると言えます。
実装環境
・pc:macbook pro 13
・cpu:m2
・memory:8gb
・strage:256gb
サポートされている環境
OS macOSとLinux
仮想マシンに Docker コンテナを構築。
Lumimerの構築手順
Lumierを使うには、大きく分けて以下のステップが必要です。
前提条件
始める前に、以下の2つがあなたのMacにインストールされていることを確認してください。
-
Docker for Apple Silicon:
- まだインストールしていない場合は、こちらのリンクからダウンロードしてインストールしてください: [提供されたリンク]
- インストール手順もリンク先に記載されていますので、それに従ってインストールを完了させてください。
-
Lume (仮想化CLI):
- ターミナルを開いて、以下のコマンドを実行してLumeをインストールします。
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/trycua/cua/main/libs/lume/scripts/install.sh)"
- インストール後、Lumeはバックグラウンドサービスとしてポート7777で起動します。
- もしポート7777がすでに使用されている場合は、インストールスクリプト実行時に
--port
オプションを使って別のポートを指定できます。例:/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/trycua/cua/main/libs/lume/scripts/install.sh)" --port 8888
- ターミナルを開いて、以下のコマンドを実行してLumeをインストールします。
基本的な実行方法 (一時的なストレージ)
VMの状態を保存せずに、一時的にmacOS VMを試したい場合は、以下のコマンドをターミナルで実行します。
docker run -it --rm \
--name macos-vm \
-p 8006:8006 \
-e VM_NAME=macos-vm \
-e VERSION=ghcr.io/trycua/macos-sequoia-cua:latest \
-e CPU_CORES=4 \
-e RAM_SIZE=8192 \
trycua/lumier:latest
-
-it --rm
: コンテナをインタラクティブに実行し、終了時に自動的に削除します。 -
--name macos-vm
: 作成するコンテナにmacos-vm
という名前を付けます。 -
-p 8006:8006
: ホストマシンのポート8006をVMのポート8006にフォワードします。これにより、WebブラウザからVMにアクセスできるようになります。 -
-e VM_NAME=macos-vm
: VMの名前をmacos-vm
に設定します。 -
-e VERSION=ghcr.io/trycua/macos-sequoia-cua:latest
: 使用するmacOSイメージを指定します。ここでは Sequoia の最新版を指定しています。 -
-e CPU_CORES=4
: VMに割り当てるCPUコア数を4に設定します。 -
-e RAM_SIZE=8192
: VMに割り当てるメモリサイズを8192MB (8GB) に設定します。 -
trycua/lumier:latest
: 使用するLumierのDockerイメージを指定します。
このコマンドを実行後、Webブラウザ(例えば http://localhost:8006
)でmacOS VMにアクセスできるはずです。
注意: この基本的な設定では、コンテナを停止するとVMの状態はリセットされ、VM内で行った変更はすべて失われます。永続的にVMの状態を保存したい場合は、次の手順に進んでください。
VMの状態を保存する方法 (永続的なストレージ)
VMの状態をセッション間で保存したい場合は、以下の手順を実行します。
-
まず、VMのデータを保存するディレクトリを作成します。ターミナルで以下のコマンドを実行してください。
mkdir -p storage
-
次に、永続ストレージを使用するようにDockerコンテナを実行します。
docker run -it --rm \ --name lumier-vm \ -p 8006:8006 \ -v $(pwd)/storage:/storage \ -e VM_NAME=lumier-vm \ -e VERSION=ghcr.io/trycua/macos-sequoia-cua:latest \ -e CPU_CORES=4 \ -e RAM_SIZE=8192 \ -e HOST_STORAGE_PATH=$(pwd)/storage \ trycua/lumier:latest
-
-v $(pwd)/storage:/storage
: ホストマシンの現在のディレクトリにあるstorage
フォルダを、コンテナ内の/storage
フォルダにマウントします。これにより、VMのデータがホストマシンに保存されます。 -
-e HOST_STORAGE_PATH=$(pwd)/storage
: ホストマシンのstorage
フォルダのパスを環境変数としてコンテナに渡します。
-
これで、コンテナを停止して再起動しても、VMの状態は storage
フォルダに保存され、維持されます。
ホストマシンとVM間でファイルを共有する方法
ホストマシンとVM間でファイルを共有したい場合は、共有フォルダを設定します。
-
まず、ストレージフォルダと共有フォルダの両方を作成します。
mkdir -p storage shared
-
次に、永続ストレージと共有フォルダの両方を使用するようにコンテナを実行します。
docker run -it --rm \ --name lumier-vm \ -p 8006:8006 \ -v $(pwd)/storage:/storage \ -v $(pwd)/shared:/shared \ -e VM_NAME=lumier-vm \ -e VERSION=ghcr.io/trycua/macos-sequoia-cua:latest \ -e CPU_CORES=4 \ -e RAM_SIZE=8192 \ -e HOST_STORAGE_PATH=$(pwd)/storage \ -e HOST_SHARED_PATH=$(pwd)/shared \ trycua/lumier:latest
-
-v $(pwd)/shared:/shared
: ホストマシンの現在のディレクトリにあるshared
フォルダを、コンテナ内の/shared
フォルダにマウントします。 -
-e HOST_SHARED_PATH=$(pwd)/shared
: ホストマシンのshared
フォルダのパスを環境変数としてコンテナに渡します。
-
この設定により、ホストマシンの shared
フォルダに置いたファイルは、VM内の /Volumes/My Shared Files
フォルダからアクセスできるようになります。VM内から /Volumes/My Shared Files
に保存したファイルは、ホストマシンの shared
フォルダに反映されます。
起動時にスクリプトを自動実行する方法 (on-logon.sh)
VM起動時にスクリプトを自動的に実行したい場合は、shared
フォルダ内の lifecycle
ディレクトリに on-logon.sh
という名前のスクリプトを配置します。
-
shared
フォルダ内にlifecycle
ディレクトリを作成します。mkdir -p shared/lifecycle
-
サンプルスクリプト
on-logon.sh
を作成します。cat > shared/lifecycle/on-logon.sh << 'EOF' #!/usr/bin/env bash # デスクトップにファイルを作成 echo "Hello from Lumier!" > /Users/lume/Desktop/hello_lume.txt # 他のコマンドもここに追加できます # 例: # - 環境変数の設定 # - アプリケーションの起動 # - ネットワークドライブのマウント # - 開発環境のセットアップ EOF
-
作成したスクリプトに実行権限を与えます。
chmod +x shared/lifecycle/on-logon.sh
これで、VMが起動するたびに on-logon.sh
スクリプトが自動的に実行されます。スクリプトはVMのコンテキスト内で実行され、/Users/lume
ユーザーディレクトリや /Volumes/My Shared Files
(共有フォルダ) などにアクセスできます。
Docker Compose を使用する方法
Docker Compose を使うと、設定ファイルを記述することでより簡単にLumierを実行できます。
-
docker-compose.yml
という名前のファイルを作成し、以下の内容を記述します。version: '3' services: lumier: image: trycua/lumier:latest container_name: lumier-vm restart: unless-stopped ports: - "8006:8006" # VNCアクセスのためのポート volumes: - ./storage:/storage # VMの永続ストレージ - ./shared:/shared # VM内でアクセス可能な共有フォルダ environment: - VM_NAME=lumier-vm - VERSION=ghcr.io/trycua/macos-sequoia-cua:latest - CPU_CORES=4 - RAM_SIZE=8192 - HOST_STORAGE_PATH=${PWD}/storage - HOST_SHARED_PATH=${PWD}/shared stop_signal: SIGINT stop_grace_period: 2m
-
必要なディレクトリを作成します。
mkdir -p storage shared
-
以下のコマンドでLumierを起動します。
docker-compose up -d
-
ログを確認したい場合は、以下のコマンドを実行します。
docker-compose logs -f
-
コンテナを停止したい場合は、以下のコマンドを実行します。
docker-compose down
Lumierのビルドとカスタマイズ
もしLumierコンテナをカスタマイズしたり、ソースコードからビルドしたい場合は、以下の手順を実行します。
-
Lumierのディレクトリに移動します。
cd libs/lumier
-
Dockerイメージをローカルでビルドします。
docker build -t lumier-custom:latest .
-
カスタムビルドのイメージを使ってコンテナを実行します。
docker run -it --rm \ --name lumier-vm \ -p 8006:8006 \ -e VM_NAME=lumier-vm \ -e VERSION=ghcr.io/trycua/macos-sequoia-cua:latest \ -e CPU_CORES=4 \ -e RAM_SIZE=8192 \ lumier-custom:latest
カスタマイズのオプション
Dockerfile
にはいくつかのカスタマイズポイントがあります。
- ベースイメージ: デフォルトでは Debian Bullseye Slim が使われています。必要に応じて変更できます。
-
インストール済みパッケージ:
apt-get install
のリストにパッケージを追加または削除できます。 -
フック:
/run/hooks/
ディレクトリには、VMのライフサイクルの特定の時点で実行されるスクリプトがあります。 -
設定:
/run/config/constants.sh
にデフォルト設定が記述されています。
変更を加えた後、カスタムイメージをビルドしてDocker Hubにプッシュできます。
# カスタムタグでビルド
docker build -t yourusername/lumier:custom .
# Docker Hubにプッシュ (docker login 後)
docker push yourusername/lumier:custom
設定オプション
Lumierを実行する際には、いくつかの設定を行う必要があります。
-
ポートフォワーディング (
-p 8006:8006
): VMのVNCインターフェースをWebブラウザからアクセスできるようにします。ポート8006がすでに使用されている場合は、-p 8007:8006
のように別のポートを使用できます。 -
環境変数 (
-e
): VMの設定を行います。-
VM_NAME
: 仮想マシンの名前 -
VERSION
: 使用するmacOSイメージ -
CPU_CORES
: 割り当てるCPUコア数 -
RAM_SIZE
: 割り当てるメモリサイズ (MB) -
HOST_STORAGE_PATH
: VMの状態を保存するホストマシンのパス (永続ストレージを使用する場合) -
HOST_SHARED_PATH
: 共有フォルダのホストマシンのパス (オプション)
-
-
バックグラウンドサービス: ホストマシンで
lume serve
サービスが実行されている必要があります (install.sh
スクリプトでLumeをインストールすると自動的に起動します)。
これで、Lumierを日本語で構築し、実行するための基本的な手順と設定について理解できたかと思います。
URL
Gitリポジトリ:このURLは、LumierプロジェクトのGitHubリポジトリの一部です。具体的な内容については、検索結果から直接的な情報が得られませんでしたが、一般的にGitHubリポジトリは以下の情報を提供します。
ソースコード: Lumierを構成するコードが格納されています。
ドキュメント: プロジェクトの使い方、API、アーキテクチャなどが説明されています。
Issueトラッカー: バグ報告や機能要望が管理されています。
コントリビューションガイド: プロジェクトへの貢献方法が説明されています。