Proxmoxでお手軽にDocker環境を作る

Dockerのベース環境としては、for DesktopやWSL2などがありますが、今回はProxmoxにミニマルなLinux VMを立てて、その上に構築してみます。

# 使用する環境

- Proxmox VE
- Turnkey Core （Debianベース。軽いのと初期設定が少ないので気に入ってます）
- Docker
- Portainer （DockerをGUIで管理するミドルウェア）

# 結論

DockerをProxmox VMの上に構築することで、バックアップやスナップショットの便利さを得つつ、Portainerで手軽なデプロイができるので、検証環境としてオススメです。

# VMの作成

Turnkey CoreのVMをISOから作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/955a1eb5-0c66-5d4a-caec-db594405a896.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/4052bf18-2d44-a7ac-016d-0cfadef44215.png)

# Turnkey Core Linuxの設定
基本的にはウィザードの標準設定を進めていけば問題ありません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/9d76c8c0-f897-2568-7ba9-467eb96e6968.png)
Guidedを選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/f7718c97-69fd-b913-cf84-8601722f861b.png)
rootパスワードを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/24828c56-58d0-6124-4663-86dd3e9a6505.png)
カーネルやセキュリティのアップデートをします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/c87e9b20-4288-3b38-8902-e6435325a5d9.png)
こちらのIPアドレスで起動が完了しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/53f09ed4-6137-7fef-c336-c2686b145bea.png)
# Dockerのインストール
SSHで接続し、以下のコマンドから自動インストールします。
```
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
```

起動の確認
```
systemctl status docker
```
RunningになっていればOKです。
（省略しましたが、Turnkey Core Linuxのタイムゾーンは前もってJSTにしておいたほうがいいと思います。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/beb59fe8-005f-4e54-950d-af2ceca2ab94.png)


# Portainerのインストール

DockerをGUIで管理するミドルウェアです。こちらのマニュアル通りに行います。
https://thehomelab.wiki/books/docker/page/installing-docker-and-portainer-to-use-with-the-edge-agent

```
docker run -d \
--name="portainer" \
--restart on-failure \
-p 9000:9000 \
-p 8000:8000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest
```
**Status: Downloaded newer image for portainer/portainer-ce:latest**
という結果になっていれば成功です。


# Portainerにアクセス
**＜DockerベースVMのIPアドレス＞:9000**にアクセスします。

初期パスワードを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/f2737fd1-9124-2021-5e84-cde055e88005.png)

Get Startedを選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/5771f888-42f5-4d09-9d8a-f2a8124c7eb9.png)

EnvironmentsでLocalを選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/f84d81ee-e23a-ffda-a241-6a34a8d94ca8.png)

コンテナ一覧が表示されます。右の「Add Containter」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/8b045320-63b3-1165-0e46-842fe561f038.png)

# コンテナのデプロイ
今回、Apacheをデプロイしてみます。検索フォームからapacheで検索すると、httpdという名前であることが分かったので、再入力しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/f711b7de-aa5e-732e-d8bc-3b3f3b505632.png)

NAT用のポートをランダムにして、デプロイ開始。ポートは手動で指定することもできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/3ff6dc91-9b9a-e19d-3f75-4322dae7caab.png)

Apacheが追加されました。右のPublished Portが「外部ポート：内部ポート」のNATの値になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/2e74bb82-6322-0a53-a1fe-0f0abd234be8.png)


# 動作確認
**＜DockerベースVMのIPアドレス＞:32768**にアクセスします。ポート番号は適宜変更してください。

Apacheが動作していたら完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/8f470c4a-5b1f-94be-8bca-be49707b57d1.png)

# まとめ & メモ
- DockerをProxmox VMの上に構築することで、バックアップやスナップショットの便利さを得つつ、Portainerで手軽なデプロイができるので、検証環境としてオススメです。
- 今回コンテナのNATポートをランダムにしましたが、ProxmoxでのベースVMリストア後、ポートが変わってしまう現象がありました。ポートは手動で設定するのが良いかもしれません。

# 参考にさせていただいたサイト

Docker in Proxmox V7 LXC with Turnkey Core - Lower Resources by 80% Compared to VMs
https://www.youtube.com/watch?v=gXuLiglJceY

Installing Docker and Portainer to use With the Edge Agent
https://thehomelab.wiki/books/docker/page/installing-docker-and-portainer-to-use-with-the-edge-agent