Dockerを簡単に構築手順（Lumimer）

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にインストールされていることを確認してください。

1.  **Docker for Apple Silicon:**

      * まだインストールしていない場合は、こちらのリンクからダウンロードしてインストールしてください: [提供されたリンク]
      * インストール手順もリンク先に記載されていますので、それに従ってインストールを完了させてください。

2.  **Lume (仮想化CLI):**

      * ターミナルを開いて、以下のコマンドを実行してLumeをインストールします。
        ```bash
        /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/trycua/cua/main/libs/lume/scripts/install.sh)"
        ```
      * インストール後、Lumeはバックグラウンドサービスとしてポート7777で起動します。
      * もしポート7777がすでに使用されている場合は、インストールスクリプト実行時に `--port` オプションを使って別のポートを指定できます。例:
        ```bash
        /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/trycua/cua/main/libs/lume/scripts/install.sh)" --port 8888
        ```

**基本的な実行方法 (一時的なストレージ)**

VMの状態を保存せずに、一時的にmacOS VMを試したい場合は、以下のコマンドをターミナルで実行します。

```bash
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の状態をセッション間で保存したい場合は、以下の手順を実行します。

1.  まず、VMのデータを保存するディレクトリを作成します。ターミナルで以下のコマンドを実行してください。

    ```bash
    mkdir -p storage
    ```

2.  次に、永続ストレージを使用するようにDockerコンテナを実行します。

    ```bash
    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間でファイルを共有したい場合は、共有フォルダを設定します。

1.  まず、ストレージフォルダと共有フォルダの両方を作成します。

    ```bash
    mkdir -p storage shared
    ```

2.  次に、永続ストレージと共有フォルダの両方を使用するようにコンテナを実行します。

    ```bash
    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` という名前のスクリプトを配置します。

1.  `shared` フォルダ内に `lifecycle` ディレクトリを作成します。

    ```bash
    mkdir -p shared/lifecycle
    ```

2.  サンプルスクリプト `on-logon.sh` を作成します。

    ```bash
    cat > shared/lifecycle/on-logon.sh << 'EOF'
    #!/usr/bin/env bash
    # デスクトップにファイルを作成
    echo "Hello from Lumier!" > /Users/lume/Desktop/hello_lume.txt

    # 他のコマンドもここに追加できます
    # 例:
    # - 環境変数の設定
    # - アプリケーションの起動
    # - ネットワークドライブのマウント
    # - 開発環境のセットアップ
    EOF
    ```

3.  作成したスクリプトに実行権限を与えます。

    ```bash
    chmod +x shared/lifecycle/on-logon.sh
    ```

これで、VMが起動するたびに `on-logon.sh` スクリプトが自動的に実行されます。スクリプトはVMのコンテキスト内で実行され、`/Users/lume` ユーザーディレクトリや `/Volumes/My Shared Files` (共有フォルダ) などにアクセスできます。

**Docker Compose を使用する方法**

Docker Compose を使うと、設定ファイルを記述することでより簡単にLumierを実行できます。

1.  `docker-compose.yml` という名前のファイルを作成し、以下の内容を記述します。

    ```yaml
    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
    ```

2.  必要なディレクトリを作成します。

    ```bash
    mkdir -p storage shared
    ```

3.  以下のコマンドでLumierを起動します。

    ```bash
    docker-compose up -d
    ```

4.  ログを確認したい場合は、以下のコマンドを実行します。

    ```bash
    docker-compose logs -f
    ```

5.  コンテナを停止したい場合は、以下のコマンドを実行します。

    ```bash
    docker-compose down
    ```

**Lumierのビルドとカスタマイズ**

もしLumierコンテナをカスタマイズしたり、ソースコードからビルドしたい場合は、以下の手順を実行します。

1.  Lumierのディレクトリに移動します。

    ```bash
    cd libs/lumier
    ```

2.  Dockerイメージをローカルでビルドします。

    ```bash
    docker build -t lumier-custom:latest .
    ```

3.  カスタムビルドのイメージを使ってコンテナを実行します。

    ```bash
    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にプッシュできます。

```bash
# カスタムタグでビルド
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リポジトリ](
https://github.com/trycua/cua/tree/main/libs/lumier)：このURLは、LumierプロジェクトのGitHubリポジトリの一部です。具体的な内容については、検索結果から直接的な情報が得られませんでしたが、一般的にGitHubリポジトリは以下の情報を提供します。

ソースコード: Lumierを構成するコードが格納されています。
ドキュメント: プロジェクトの使い方、API、アーキテクチャなどが説明されています。
Issueトラッカー: バグ報告や機能要望が管理されています。
コントリビューションガイド: プロジェクトへの貢献方法が説明されています。