proxmoxのVMにDocker乗せるまで
これは何?
proxmox上にDockerのホストになるUbuntuをインストールする方法まとめ
特にPortainerが便利なのに仲間内で知られてなかったのがショックだったため作成した。
べんりだからもっと使って広まって
やることの流れ
proxmoxのインストール

-
Graphicalを選択。
CUIで行うと正しくオプションを設定しているのに
インストールに失敗することがあるため、
凝ったことをするならGUIで行いましょう。
-
I agreeを押す。
インストールオプション
-
proxmoxホストの容量を制限できる機能がある。
一度拡張したホスト容量は縮小できないため慎重に設定を行う必要がある。 -
デフォルトでは16GBだが8GBでも問題ない。
但しホスト側でないとうまく動かないLXC設定周りを弄るのであれば64GBは欲しい所。-
-- -- 8GBで足りる例 -- --
例)SMB/CIFSを非特権LXCで操作
例)ホストでFUSEを動かし、それをLXCにディレクトリとして読ませてあれこれする
例)VM用にBIOSイメージをコンパイルする -
-- -- 8GBで足りない例 -- --
例)pytorchなどをホストで動かしてしまう
例)isoイメージファイルをホストに保管する(※デフォルト設定)
例)ゲストイメージをホストストレージのqcow2ファイルで管理する
(※VM設定を誤ると起こる事故)
-

デフォルトの改変
ホストとゲストイメージ、LXCを同パーティションで管理し、ボリュームグループを分ける場合
OSインストール後はWebUIデータセンターからストレージ管理にて編集が可能。
hdsize : 最大
maxroot : proxmox本体の容量を割り当て(8~)
他 : 無し
別パーティションで管理する場合
この場合、OSインストール後pvcreate -> vgcreate -> lvcreateを
ホストシェルにて手動で行い、ゲストイメージのボリュームを作成する必要がある[1]。
hdsize : proxmox本体の容量を割り当て(8~)
swapsize: 適宜。4GBでは心もとないイメージ。
他 : 無し
ぜんぶ一緒
この場合、ゲストイメージ、LXCのストレージを別途用意する、
もしくはraw,qcow2ファイルでの管理となる。
hdsize : 最大 - swap
swapsize: 適宜。4GBでは心もとないイメージ。
他 : 無し
- 全般 - そのまま
Nextへ - 地域設定
jを入力してjapanをクリックすると自動で設定されるのでNextへ
- パスワード
ユーザー名はrootで固定のため、root用のパスワードを設定する。
EmailはLinuxの風習のようなもの。そのままだとNextにいけないので
a@b.comなど、できれば通じるメールアドレスを設定。 - ネットワーク
この時点でDHCPからIPを受け取っていれば自動で入力されている。
Hostname : そのサーバーがバックアップを取るときに使用される名前。
IPaddress : 絶対に固定IPとなるので被らないものを入力
Gateway : いわゆるルーターIP
DNSserver : 名前解決が出来ないとproxmoxはかなり不安定になり、
VM,LXCを見えなくしてしまうことがあります。
- Summary
設定再確認の場。 IP CIDRは必ず被っていないことを確認 (2敗)
問題なければinstallで勝手に再起動してWebUIのアドレスが表示される。
proxmoxインストール後の初期設定
その後はシェルで以下を叩いても良いし、WebUIでアップデートを行っても良い。
sudo apt update
sudo apt -y upgrade
オプション
Proxmox VE Helper-Script[2]にて
上記 +「有効なサブスクリプションがありません」ダイアログ
を消すことのできるスクリプトが公開されている。
proxmoxホストのシェルにてHelper-Scriptを実行すると疑似GUIで案内される。
最後の質問はproxmoxを再起動するため、問題があれば最後はnoとする。
スクリプト制作者的には全てyesを選択することを推奨しているようだ。
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/pve/post-pve-install.sh)"
isoファイルのダウンロード
VM作成前に行うこと。
Windowsの場合はvirtio-win.isoのダウンロードも忘れずに。
2種類方法がある。
- NASに保存しているisoを読みに行くか
- proxmoxのローカルに保存する方法か
NASに保存

データセンター -> ストレージ -> 追加を押し、SMB/CIFSを選択。

id : なんでも良い
サーバ : NASのIPアドレス
ユーザ名 : NASのアカウント
パスワード : NASのアカウント
ここまで入力するとShareを選択できるようになる。
内容 : ディスクイメージとコンテナ以外をおすすめする。
NASに保存されたイメージディスクは、
VM起動時にシンクライアントじみた遅さを発揮する。
サブディレクトリ: proxmoxは内容で選んだものに応じたフォルダを
複数展開するため汚れるのが嫌であれば`/pve`などを設定。

ローカルに保存

データセンター下部ツリーのlocal -> ISOイメージ -> アップロード
ファイルを選択し、アップロードを押すことでisoファイルをproxmoxへコピーできる。
VM作成 & Ubuntuインストール
右上水色のVMを作成からウィザードが開始される。
画像では25.04だが、ROCmなどAMD関連を使用する場合は24.10までに抑える必要がある。
Dockerホストは何でも良い風潮があるが、メンテナンスしやすいUbuntuを選択した。
Dietpiで運用していたがカーネルの問題で乗り換えた。
- 全般
VMid : 今後proxmoxサーバーを追加することがあれば、
全てのサーバーと重複しない番号を割り当てる必要がある。
名前 : 自分がわかるようにつける。
日本語、アンダーバー、スペースは使用できない。
ブード時に起動 : proxmoxが起動するときに一緒に起動されるオプション。
開始停止順 : 1にすると真っ先に起動し、
最後まで残ってからシャットダウンされる。
- OS
イメージファイルを使用 : 先の手順でNASを選んだ場合、
ストレージはNASの名前。ローカルの場合はlocal
isoイメージ : インストールするOSのイメージ。
ゲストos : Windowsの場合は種別、バージョンを変更し、
virtIO-win.isoも選択しておくこと。
- システム
グラフィックカード : 既定で良い。もしパススルーするにしてもPCIデバイスのドライバが無いため初期インストールは既定で進めたほうが安定する。
マシン : 古いOSならi440、最近のならq35。どちらもインテルのマシンを仮想化している。
ファームウェアbios : 古いOSはSMBIOS、つまりBIOSでないと起動画面にすら行けない。最近のOSであればOVMF(UEFI)で良い。Windows10以降はUEFI。
scsiコントローラ : SCSI singleが最も高速
Qemuエージェント : チェックを入れておくとWebUIでIPアドレスが見れたりする。
- ディスク
Dockerインストールのため、VMホストが壊れてもなんとかできるよう、SATA1を追加して/var/libをそこに保存する設定にしている。
ディスク作成時は少しだけ容量を変えると後のインストール時に分かりやすい。
バスデバイス : SATAが良いかと。
ストレージ : proxmoxホストと同じマシンのプールを選択すること
ディスクサイズ : 32GBだと心もとない。64GBは必要かと
キャッシュ : unsafeが最速。但し停電時にproxmoxも不調になるがVMもロールバックしたり不調になる。また公式ではWrite back(unsafe)を使う場合はext4 barrier ON(デフォルト)を推奨している。もちろんOFFにすると速度は上がる。
ssdエミュレーション : SATA/NVMeのSSDであればONにすると高速。
非同期io : threadsが良いらしい
ディスク周りの参考:
- CPU
基本的にはソケット1、コア=スレッド数。但しMacOSの場合は1,2,4,8のどれかとコア数に制限がある。
種別 : 基本的にはhostが安定。もし動かない時は対応する
Skylake以前のCPUを指定する。
cpuの上限 : 何%まで使用するかを制限できる。
extraCPUFlags : 基本はAuto。
Spectreなどのマイクロコード機能を使用するかどうか。
- メモリ

メモリに最大容量、最小メモリに最小容量を追記する。
Ubuntu24.04以降は最大6GBは無いとOut of Memoryとなってしまう現象が
あったため6144MiBとしている。 - ネットワーク
MACアドレスにはproxmoxのベンダIDが割り振られる。好きなMACアドレスに変更する場合は追記
- 確認
問題なければ完了。
左下に設定反映後自動起動するオプションが有る。
Ubuntuのインストール

- VMを起動したら
VM名->コンソールから画面を見ることができる。
Try or Install Ubuntu ServerのままEnter
- Type of installation:

UbuntuServerは後からminimizedを解除できるため、最初はminimizedを選択した。 - archive mirror:

通信が終わってからDoneを押したほうが後々楽。 - Guided storage configuration:

/var/libを別ディスクにインストールしたいためCustomを選択。
24.10まではLVMにチェックが入ってなかったはずだが、
25.04からはデフォルトがLVMボリュームインストールになる。
VM上でLVMの復旧は困難を極めるためチェックを外しておくと楽。 - Storage configuration


Add GPT Partition->設定->Createを繰り返す流れ。
分かりづらいのでVM作成時にそれぞれの容量を少し変えてやると分かりやすい。
- 25.04の場合、/bootを明示してやらないと先に進めない。
1GBでいいのでroot側にしたい方でCreate

同じディスクで/を指定してCreate
- 次に
/var/libに設定したいディスクを選択し、
下のMount:を/var/libにしてCreate。

すべての設定が済めばDone -> Continue
-
Profile

以下を入力- お名前
- サーバー名(avahi,mDNSで使用)
- ユーザー名(ログイン時に使用)
- パスワード(ログイン時に使用)
- 確認のパスワード
-
SSH

デフォルトでOFFとなっているので☑にする。
下のImport SSH Keyを利用すると画像のようになりGithubから取得できる。
但しAllow password ~の☑が外れ、公開鍵認証しかログインできなくなるので
☑を付け直してDone -
Featured server snap

文字通りsnapを利用したサードパーティのインストール。
- Installation

Reboot Nowの表示が出るまでしばらく待ち、Enterを押すことで再起動される。

再起動前にcdromがアンマウントできないって言ってくるので、

proxmoxのWebUIからVM名->ハードウェア->CD/DVDドライブを
「メディアを使用しない」に変更し
改めてコンソールからEnterを押す。
Ubuntu初期設定
sudo apt update
sudo apt -y upgrade
LiveInstallerなので恐らく爆速で完了する。
proxmox VMではqemu-guest-agentを入れることで
とてつもなく読みにくいWebUIのIPアドレスを読まなくても
サマリーで見やすくなる。
sudo apt -y install qemu-guest-agent
sudo qemu-ga &
もしsshd_configを弄るのであればこの時に触っておくと楽。
(US/UKキーボードでは日本語109キーボードのShift+=で_が打てる。
/etc/sshd入力後Tabキー押したほうが楽。)
ここからはSSHで操作している。
キーボードレイアウトがJPに対応していないので面倒だから。
Windowsの民なのでrlogin.exeを使用している。
Dockerと周辺のインストール
Dockerのインストール
curl https://get.docker.com | sudo sh
なにも表示されないまま止まるが、パスワードを入力すると進む。
(SSHにログインしてすぐに、nanoやらvimやらemacsやら
好きなアプリをインストールしてから行うとスムーズ。)
参考:
docker-composeのインストール
dockerのインストールとdocker-composeのインストール。
(当時はv2.38.2が最新版。latestで引っ張ってきたいね。無いけど。)
COMPOSERVER=2.38.2
sudo wget -O /usr/local/bin/docker-compose https://github.com/docker/compose/releases/download/v$COMPOSERVER/docker-compose-linux-x86_64
※上の1行だけ先に行い、以下はコピペで連続行処理できる。
sudo chmod +x /usr/local/bin/docker-compose
docker-compose -v
sudo usermod -aG docker $USER
sudo service docker restart
参考:
Portainerのコンテナデプロイ
Portainerは他のホストと接続する時に
ポート番号を弄ると面倒なことになるのでデフォルトが使い易い。
他のホストと連携して1つのWebUIで複数のホストを管理できるようになる。
sudo docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:lts
後は以下のサイトのようにWebUIからアカウントを作成して使用する。 URLは
https://192.168.<IP>:9443

デフォルトでadminとなってるが好きに変えて良い。
アカウントを作ったら英語でなにやら言ってるので、portainerコンテナを再起動する。
sudo docker restart portainer
Portainerの使い方
-
get startを押して
見るからにココっていうデカいクジラのマークを押す
すると今動いているDockerの管理画面に出る。
よく使う項目
-
Containersを押して各コンテナの操作が可能となる。
もし表示されない時はStacksから該当のコンテナを選択すれば表示できる。
(なぜ表示されたりされなかったりするかは不明。)
Container details

-
Start,Stop,Kill,Restart,Pause,Resume,Removeは見たまんま。
-
Recreateはdocker exec等で弄りすぎたときに作り直すやつ。 -
Duplicate/Editはdocker-compose.yamlを弄らなくてもお手軽にWebで完結した設定が可能。
お手軽にlatestバージョンのイメージをpullするときにも使う。
但し、設定は控えておかないと後々で何やったか忘れて復元できなくなる。(6敗)
Container status
Logs
dmesgとはまた異なる?感じのログを見ることができる。
どうやってlogに出力してるのかは分からない。
linuxserver.ioのイメージが詳細に教えてくれるため愛用している。
inspect
コンテナの設定が確認できる。docker-compose.yamlを作るときの参考にできる。
大体はどのポートに設定したか忘れたときに見る項目。
stats
まるでVMのようにどれだけリソースを使ってるか確認できる。
異常に帯域を食ってる時に確認する項目。
✨️console✨️
🎉超便利機能🎉
>_を押すとConnectと出るので押すとDocker内の環境に9割方入ることができる。
apt updateなりapt installなり好きに動かせるが、コンテナを作り直すと消えるので
やったことはメモに書き残してDockerfileに整形してないと泣きを見る羽目になる。(20敗以上)
images

-
一番使うのは下部の使っていないイメージを一目で分かる機能。
Unusedなidのイメージを☑付けてRemoveするだけで簡単にストレージの整理ができる。 -
あらかじめコンテナイメージをpullできたりする。
-
tarで包まれたコンテナイメージも
importで操作ができるようだ。(使ったことはない。) -
exportではブラウザにコンテナイメージをダウンロードするので容量には注意。
内容はtarで包まれたイメージ。
他のDockerホストとの連携
一つのUIでまとまるから便利。

-
左側
Environment-relatedからEnvironmentsをクリック、右上 +Add environmentを押す。 -
通常のDockerであれば
Docker Standaloneを選択。環境によってチェックボックスを変える
下のStart Wizardをクリック。

-
どの方法で接続するかのチェックボックスはデフォルトの
Agentにしている。
これはportainer agentコンテナを追加する方法。
すると下部にコマンドが表示されているのでこれを此方側、相手方の両方で入力する。

終わったら分かりやすい名前で相手方の名前を付けて、
Environment addressに<相手方のIP>:9001を入力する。
するとConnectが押せるようになるので押したらHomeに追加される。
あとがき
長い作業お疲れ様でした。
-
lvcreateの設定例
lvcreate -T -n thin --poolmetadatasize 1024M --chunksize 256 --addtag base -l 100%FREE pve
参考:
https://qiita.com/minoden_works/items/ecd8d4d7d767917409f2 ↩︎ -
このサイトには他にも簡単にLXCコンテナ、VMを作成できるスクリプトがあり、お世話になっている。
スクリプトのインストール初回はproxmoxホストで行う必要がある。
Upgradableなスクリプトはコンテナ/VM内部でインストールスクリプトを実行することで自動でアップデートができる。
特にTailScaleを使う場合は使いたいゲスト内部でスクリプトを動かすだけで簡単にインストールができるようになっている。 ↩︎
Discussion