おうちサーバー構築報告：仮想マシンとDocker on Proxmox VE with ZFS

## 能書き

[おうちサーバー構築報告：予告](https://qiita.com/katz_engineer/items/471408eda1d09507c451)からのおうちサーバー構築です。[前回](https://qiita.com/katz_engineer/items/3cf9a545d4c8b7c77206)はLXCコンテナを構築しました。今回はQEMU/KVM仮想マシンを構築します。

### 目標

- Proxmox VE にQEMU/KVM仮想マシンを作成して、ゲストマシンを立ち上げる
    - OSは Ubuntu Server 24.04 LTS
- ゲストマシン内でdockerを動かす

### 参考文献

- [Proxmox VE環境へのUbuntu Server 22.04のインストールからssh接続まで - Qiita](https://qiita.com/yankee/items/495e80193070f6e70b65)
- [10. QEMU/KVM Virtual Machines - Proxmox VE Administration Guide](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#chapter_virtual_machines)


## ISOイメージの準備

まず、今回インストールしたい Ubuntu Server 24.04 LTS のISOイメージを準備します。方法としては、

1. ISOイメージをローカルにダウンロードしてからProxmoxにアップロードする
1. Proxmox上でISOイメージのダウンロードURLを指定し、直接ダウンロードする

という2種類があります。[以前](https://qiita.com/katz_engineer/items/bd96a26e0a65ceb28ff7)ダウンロードしたISOファイルがありますので、今回は1.の方法を試みます。

データセンター>primary（ProxmoxVEをインストールしたホスト名）>local (primary)/ISOイメージ の画面で`アップロード`ボタンをクリック。するとアップロードダイアログが表示されますので、ダウンロードされているISOイメージ ubuntu-24.04-live-server-amd64.iso を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/ee8feb78-dec5-ffde-7dcd-35747aad2411.png)

`アップロード`ボタンをクリックすると暫く待たされます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/498c21de-365d-81f5-65ee-949b9f1bf2bd.png)

Task Viewer: データのコピー ウィンドウに TASK OK が表示されたら完了…のようです。正直、どうしてこんなインターフェースになっているのか、よくわかりません…

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/eff4fe53-c2b2-bd53-bee0-11a31f5c15ec.png)

Task Viewer: データのコピー ウィンドウのクローズボタンをクリックして閉じると、アップロードしたISOファイルが表示されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/29250173-0665-a482-609b-7b3ed106f3b5.png)

## 仮想マシンの作成

画面右上の`VMを作成`ボタンをクリックします。そうすると「作成: 仮想マシン」ダイアログが表示されるので、必要な項目を埋めます。

- ノード: primary （ホストマシン名）
- VM ID: 102 （デフォルト値; このProxmox VEインストールでVMを識別するために使用される一意の番号、どうやらコンテナと合わせて一意になる模様）
- 名前: vm1 （コンテナのマシン名）
- リソースプール: all （[前回](https://qiita.com/katz_engineer/items/3cf9a545d4c8b7c77206#%E3%83%97%E3%83%BC%E3%83%AB%E4%BD%9C%E6%88%90)作ったプール）
- ブート時に起動: チェックを入れる
- 開始/停止順: any （デフォルト値）
- 開始時の遅延: default （デフォルト値）
- シャットダウンタイムアウト: default （デフォルト値）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/7d6e222f-7aec-d178-bebd-b3ae2ab78623.png)

`次へ`ボタンでOSの設定画面になります。

- CD/DVDイメージファイル(iso)を使用
    - ストレージ: local
    - ISOイメージ: ubuntu-24.04-live-server-amd64.iso （先程アップロードしたISOイメージ）
- ゲストOS:
    - 種別: Linux （デフォルト値）
    - バージョン: 6.x - 2.6 Kernel （デフォルト値）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/b1e1fdf4-1b58-93c8-f1ff-65c2f41e058b.png)

`次へ`ボタンでシステム設定画面になります。

- グラフィックカード: 既定 （デフォルト値）
- マシン: 既定 (i440fx) （デフォルト値）
- ファームウェア
    - BIOS: 既定 (SeaBIOS) （デフォルト値）
- SCSIコントローラ: VirtIO SCSI single （デフォルト値）
- Qemuエージェント: チェックを外す （デフォルト値）
- TPM追加: チェックを外す （デフォルト値）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/7b9b8548-508a-1f8c-dc29-edf63758b411.png)

`次へ`ボタンでディスク設定画面になります。

- ディスク
    - バス/デバイス: SCSI 0 （デフォルト値）
    - ストレージ: local-zfs （デフォルト値）
    - ディスクサイズ(GiB): 256
    - キャッシュ: 既定(キャッシュなし) （デフォルト値）
    - 中止: チェックを外す （デフォルト値）
    - IO thread: チェックを入れる （デフォルト値）
    - SSDエミュレーション: チェックを外す （デフォルト値）
    - リードオンリ: チェックを外す （デフォルト値）
    - バックアップ: チェックを入れる （デフォルト値）
    - 複製をスキップ: チェックを外す （デフォルト値）
    - 非同期IO: 既定(io_uring) （デフォルト値）
- 帯域幅
    - 読取り制限(MB/s): 無制限 （デフォルト値）
    - 書込み制限(MB/s): 無制限 （デフォルト値）
    - 読取り制限(ops/s): 無制限 （デフォルト値）
    - 書込み制限(ops/s): 無制限 （デフォルト値）
    - Read max burst (MB): 既定値 （デフォルト値）
    - Write max burst (MB): 既定値 （デフォルト値）
    - Read max burst (ops): 既定値 （デフォルト値）
    - Write max burst (ops): 既定値 （デフォルト値）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/8ca06ef4-56b4-cd52-8b52-262a3a315fc7.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/65f47fbf-2f55-0262-c342-838050fc1637.png)

`次へ`ボタンでCPU設定画面になります。

- ソケット: 1 （デフォルト値）
- コア: 4
- 種別: x86-64-v2-AES （デフォルト値）
- VCPUs: 4 （デフォルト値）
- CPUの上限: 無制限 （デフォルト値）
- CPUアフィニティ: すべてのコア （デフォルト値）
- CPUユニット: 100 （デフォルト値）
- NUMMAを有効化: チェックを外す （デフォルト値）
- Extra CPU Flags: →すべてデフォルト値とする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/8234cccb-2676-4282-69b7-d8d664f012fb.png)

`次へ`ボタンでメモリ設定画面になります。

- メモリ(MiB): 4096
- 最小メモリ値(MiB): 4096 （デフォルト値）
- Ballooningデバイス: チェックを入れる （デフォルト値）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/45efcd72-0732-8f2a-1aba-18ae4db75d5b.png)

`次へ`ボタンでネットワーク設定画面になります。

- ネットデバイスなし: チェックを外す （デフォルト値）
- ブリッジ: vmbr0 （デフォルト値）
- VLANタグ: no VLAN （デフォルト値）
- ファイアウォール: チェックを入れる （デフォルト値）
- モデル: VirtIO(準仮想化) （デフォルト値）
- MACアドレス: auto （デフォルト値）
- 切断: チェックを外す （デフォルト値）
- MTU: 1500 (1 = bridge MTU) （デフォルト値）
- Rateの制限値(MB/s): unlimited （デフォルト値）
- Multiqueue: （空欄） （デフォルト値）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/93ff9e6e-5599-3108-0954-db8f3f17aecc.png)

`次へ`ボタンで確認画面になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/723a14f3-22b0-80da-a95c-3f47c59558e7.png)

`完了`ボタンで仮想マシンが作成されますので、データセンター>primary>102(vm1) を選択し、画面右上の`開始`ボタンをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/5270a245-889b-0672-7b73-2592af640169.png)

データセンター>primary>102(vm1)/コンソール を選択すると、インストーラが動いている様子を確認できます。ここでUbuntuのインストーラを操作してインストールします。[インストール内容は一般的な内容にする](https://qiita.com/katz_engineer/items/bd96a26e0a65ceb28ff7#ubuntu)…つもりでしたが、唯一、dockerだけこの段階で仕込みを指定しました。詳細は省略。

（2025/03/23 追記ここから）
この段階でdockerを仕込んではいけません。そうするとsnapからインストールされて、何かと不自由をかこつ事になります。具体的には`/srv/gitlab`に`compose.yaml`を置いたら実行できないとか。
そこでここでは何も設定せず、仮想マシンが出来上がってからdockerをインストールします。
（2025/03/23 追記ここまで）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/4ae771c9-9482-dc6e-6094-351a2dcaa49a.png)

画面の下に [ Reboot Now ] が表示されたら、これを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/2b804c29-a4e6-9e28-74d2-9863c8599ed2.png)

CD-ROMの`unmount`に失敗しているようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/7690279f-94fb-0798-c8e2-b4554fa84d56.png)

手動でイジェクトしましょう。データセンター>primary>102(vm1)/ハードウェア/CD/DVDドライブ(ide2) を選択。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/5cb93672-e85c-34d1-2acb-0c0551370fc3.png)

`編集`ボタンをクリックするとダイアログが表示されるので、「メディアを使用しない」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/6c3c45b0-6de5-4696-23cd-ff019c17feab.png)

`OK`してコンソールを表示。右上の`シャットダウン`ボタンから`再起動`を選択すると確認ダイアログが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/9b9d40b2-6915-f917-4a29-a9aa0b930b89.png)

`はい`…利きませんね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/c1fecfcd-06f2-0e42-7851-78510baf3635.png)

右上の`シャットダウン`ボタンから`リセット`を選択してみます。同様に確認ダイアログが表示されるので`はい`します。すると今度は再起動します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/a563435a-76d8-49b6-1a2f-c4c544cadf11.png)

これで仮想マシンの作成は完了です。

## ssh接続

普段使いのクライアントマシンからsshで接続してみます。

```console:クライアントマシン
>ssh administrator@172.16.1.102
The authenticity of host '172.16.1.102 (172.16.1.102)' can't be established.
ED25519 key fingerprint is SHA256:AJtPhN8RIGVQxYM3mh4vl8XaLuGEKK0SfZ3vpictu3E.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '172.16.1.102' (ED25519) to the list of known hosts.
administrator@172.16.1.102's password:
Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.8.0-49-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sun Dec  8 12:34:23 PM UTC 2024

  System load:  0.06              Processes:              133
  Usage of /:   6.5% of 97.87GB   Users logged in:        0
  Memory usage: 7%                IPv4 address for ens18: 172.16.1.102
  Swap usage:   0%

Expanded Security Maintenance for Applications is not enabled.

138 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

Enable ESM Apps to receive additional future security updates.
See https://ubuntu.com/esm or run: sudo pro status



The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
```

接続できたようです。

## Docker確認

Dockerを仕込んでおいたので、確認してみます。

（2025/04/19 追記ここから）
Dockerは仮想マシン作成後に下記参考文献の通りインストールします。

- [おうちサーバー構築報告：Docker on ProxmoxVE - Qiita](https://qiita.com/katz_engineer/items/02301f9f013860d324a1)

（2025/04/19 追記ここまで）

```console:クライアントマシン
$ docker --version
Docker version 27.2.0, build 3ab4256
```

hello-worldもこの通り。

```console:クライアントマシン
$ sudo docker run hello-world
[sudo] password for administrator:
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
c1ec31eb5944: Pull complete
Digest: sha256:305243c734571da2d100c8c8b3c3167a098cab6049c9a5b066b6021a60fcb966
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/
```

## 削除

終わったら削除しましょう。

まず仮想マシンを止めます。

```console:クライアントマシン
sudo shutdown -h now
```

データセンター>primary>102 (vm1) の画面右上の`More`の中に「削除」があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/50cc2015-9a68-617d-7a03-3edb2895698a.png)

「削除」を選択すると確認ダイアログが表示されます。

- 確認のためIDを入力してください(102): 102 （画面に表示されているID）
- ジョブ設定から削除: チェックを外す（デフォルト値）
- ゲストによって所有されている未使用のディスクを破棄: チェックを外す（デフォルト値）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/961e7501-2a2a-fd1d-6e2e-fa7121a0a048.png)

何やらシステムログが表示されて、削除されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107218/9e79834b-f7ea-3be1-c4ba-9a85e382b069.png)

## 仕舞い

Proxmox VE 上でdockerを使える仮想マシンを作成できました！