Portainer で見る Docker Networks&Volumes

Docker 便利ですよね。万能ではないけど、とてもよく機能する場面が多いです。
ところで、同僚( @fsd-horikoshi )がこんな記事を書いていました。

https://qiita.com/fsd-horikoshi/items/840086f0f067e1c8e08c

これに触発されたので、同じ内容を Portainer を使って見てみようと思います。

# Portainer とは

> Portainer は単一のテクノロジーやベンダーに縛られないユニバーサルなコンテナ管理プラットフォームです。
> --- _[Why Portainer? - portainer.io](https://www.portainer.io/why-portainer)_

## 概要

Portainer はそれ自体がコンテナで提供されます(k8s 環境に追加したり Docker Swarm 環境にインストールすることもできます)。
![portainer-overview.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118632/d2efcd1f-f198-d2fe-5cc4-42c0f86a816d.png)

## 公式情報

[portainer.io](https://www.portainer.io/)

下記 2 つのエディションが提供されています。

- Community Edition
  OSS 版です。
- Business Edition
  商用サポートが提供されます。
  IAM 機能や RBAC(Role-Based Access Control)などエンタープライズ環境で情報システム管理等に必要な機能が利用できます。

ご参考：[Pricing](https://www.portainer.io/pricing)

## Docker Desktop との違い

|項目|Portainer|Docker Desktop|
|---|---|---|
|提供元|Portainer|Docker|
|形式|Containerized Application|Native Application|
|エディション|Community Edition<br>Business Edition|Windows <br> Mac for Apple Chip <br> Mac for Intel Chip <br> Linux|
|価格|Community Edition: Free <br> Home & Student: `$149`/yr <br> Professional: From `$3900`/yr <br> Enterprise: Contact Sales for Pricing|Personal: `$0`/month<br>Pro: `$5`/month<br>Team: `$9`/month\*user<br>Business: `$24`/month\*user|
|特性|Portainer 自身がコンテナ化したアプリケーションとして提供されるので環境依存が少なく、導入しやすいが、コンテナ環境を構築する必要がある。(※1)|デスクトップアプリケーションとして統合した状態で提供されるので OS が動作していれば導入できるが、OS の状態の影響を受ける。|

※1）Portainer が必要となった状態の方は既にコンテナを運用している可能性が高く、Portainer のためにコンテナ環境を構築しなければならないような方は少ないと思うので実質的な問題ではないと考えています。

# Portainer で見る Docker Networks & Volumes

Portainer の画面を使って実際に Networks と Volumes を見てみます。

## Networks

![portainer-networks.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118632/ed24acc3-4dc5-88f0-fd4e-5c4c91bb4c62.png)

この図でも、**System** としてマークされていますが、コンテナ環境で既定で作成される 3 つのネットワーク(bridge, host, none)を確認できます。
なお、 docker_mng_default というのは、筆者が常用しているコンテナ群を管理するため、 Docker Compose によって作成されたネットワークです。Portainer コンテナも docker_mng 環境で動作・管理しています。

### bridge

ここでは例として bridge ネットワークドライバの更に詳細を見てみます。

![portainer-bridge-detail.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118632/7c66d4e5-8041-916f-fdcc-1b3572f04880.png)

### docker network サブコマンドに相当する操作について

#### docker network ls

[Networks](#networks) の画面の内容に相当するので割愛。

#### docker network create [ネットワーク名]

![portainer-networks-create.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118632/3531e8e9-b49f-b2e3-8fb7-dcc59af1ba1c.png)
![portainer-networks-create-form.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118632/3d9737c2-9629-e524-1505-cd0cf6b2f071.png)

#### docker network inspect [ネットワーク名]

[bridge](#bridge) の画面の内容に相当するので割愛。

#### docker network rm [ネットワーク名]

![portainer-networks-rm.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118632/ea829e2d-ecf9-77cf-02fb-1796759f7366.png)

## Volumes

![portainer-volumes.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118632/224bc61f-c5c2-2367-965b-cea3e1f448f7.png)

この図では、4 つのボリュームを確認できます。
この環境では Data Volume しか作成していないです。
docker_mng_portainer_data ボリュームはここで使用している Portainer のためのボリュームです。
docker_mng_auzrenamingtoolvol は以前筆者が紹介した Azure Naming Tool のためのボリュームです。

Azure Naming Tool については、よければ下記の記事をのぞいてみてください。

https://qiita.com/fsd-sayhorn/items/a074da3663d9739a2e4e

### docker_mng_portainer_data

ここでは例として docker_mng_portainer_data ボリュームの更に詳細を見てみます。

![portainer-docker-mng-portainer-data-detail.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118632/20e4faff-8fc5-4672-5e3c-cf7d18b18567.png)

### docker volume サブコマンドに相当する操作について

#### docker volume ls

[Volumes](#volumes) の画面の内容に相当するので割愛。

#### docker volume create [ボリューム名]

![portainer-volumes-create.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118632/aff4f031-0585-93a6-6662-f87f7a4fe7cd.png)
![portainer-volumes-create-detail.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118632/0403a093-751c-beeb-0a7c-403bb8434f7c.png)

#### docker volume inspect [ボリューム名]

[docker_mng_portainer_data](#docker_mng_portainer_data) の画面の内容に相当するので割愛。

#### docker volume rm [ボリューム名]

![portainer-volumes-rm.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118632/70ca441f-b0ff-ed9a-af8f-5bebea736226.png)

# まとめ

ざざっと紹介しましたが、ここまでご紹介したように Portainer を使うと GUI で理解しやすい状態でコンテナ環境を管理できます。
CUI が苦手な人で Docker Desktop を使えない事情がある方は導入すると少し幸せになれるかもしれません。
筆者は CUI 苦手ではないですが、可読性高くデータを見たい場合には理解の速度が段違いなのでこうしたツールの力を借りることが多いです。

## 注意事項

本番運用環境などを今回ご紹介したような状態で使用するのは好ましくありません。
今回のご紹介では、筆者のローカル環境で手元のコンテナを管理することに特化した目的で Portainer を使用しています。
本番環境などでご利用になる場合、認証・認可の設定、アクセス制限、ロギングなど考慮すべき事項が多数存在しますので、要件に応じた適切な設計を行ってください。