[Docker] コンテナをGUIで管理できるPortainerを独自ドメイン+SSLで使う

Portainerは、コンテナやイメージ、レジストリの管理ができるサーバー上で動くWEBアプリです。今回は、nginx-proxyコンテナをフロントに置いて、独自ドメイン+SSLでPortainerを使ってみます。

Portainerって?

コンテナで気軽にアプリを立ち上げられるDockerですが、たくさんコンテナを立ち上げたり、複雑なクラスタ環境を組もうとするとコマンドラインだと煩雑になります。

そこで、コンテナの管理を便利にしてくれるのがPortainer。

Portainerの管理画面のスクリーンショット
出典:portainer.io

見やすい管理画面でクラスタの管理からプライベートレジストリの管理まで出来る高性能なアプリです。GUIでコンテナ管理ができるWEBアプリとしては、Shipyardが人気ですが、Portainerのほうが高機能です。

Portainerを立ち上げる(ローカル版)

まずは、Portainerをローカルで立ち上げてみます。

Dockerのインストールされているサーバー or PCで下記のコマンドを実行します。

docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer

あとは、「http://サーバー or PCのIPアドレス:9000」にアクセスすれば管理画面が表示されます。簡単ですね!

ただし、この状態ではサーバーならIPアドレスを直で、PCならローカルネットワークでしか使えません。ここから、独自ドメイン+SSL対応をしていきましょう。

独自ドメイン + SSLでPortainerを立ち上げる

まず、前提として、nginxプロキシと無料SSLのLet’s Encryptが使える「jwilder/nginx-proxy」+「jrcs/letsencrypt-nginx-proxy-companion」コンテナが立ち上がっていて、共有ネットワーク(ここでは「common_link」というネットワーク)につながっている状態にします。マシンの80番ポートと443番ポートが空いていることを確認しておいてください。

nginxプロキシと無料SSLのLet’s Encryptの立ち上げ方は下記にまとめました。
->プロキシサーバー(nginx-proxy)コンテナを立ち上げる | [WordPress] KUSANAGI Runs on DockerでLet’s EncryptのSSL付きマルチサイトを立ち上げる

また、Portainerを使うドメインのDNSで、サブドメイン(下記の例では「portainer.hoge.com」)がPortainerを起動させるマシンに向けておきます。

準備ができたら下記のコマンドを実行します。
※各変数は後ほど解説します

docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock --net common_link -e VIRTUAL_HOST=portainer.hoge.com -e VIRTUAL_PORT=9000  -e LETSENCRYPT_HOST=portainer.hoge.com -e LETSENCRYPT_EMAIL=admin@hoge.com -e LETSENCRYPT_TEST=false  portainer/portainer

これだけで、Portainerを独自ドメインで使えるようになりました!簡単ですね。

変数の解説

さて、それぞれのオプション変数についてみていきます。Dockerコマンドのオプションに詳しい方は上のコマンドを見ただけお分かりかと思いますので、下記は読み飛ばして構いません。

先ほどのコマンドを見やすく分解すると下記のようになります。

docker run \ 
-d \
-p 9000:9000 \
-v /var/run/docker.sock:/var/run/docker.sock \
--net common_link \
-e VIRTUAL_HOST=portainer.hoge.com \
-e VIRTUAL_PORT=9000 \
-e LETSENCRYPT_HOST=portainer.hoge.com \
-e LETSENCRYPT_EMAIL=admin@hoge.com \
-e LETSENCRYPT_TEST=false \
portainer/portainer

それぞれのオプションは、

オプション 今回のオプション 意味
docker run コンテナを起動
-p 9000:9000 マシンのポート:コンテナのポート
-v /var/run/docker.sock:/var/run/docker.sock ボリュームのマウント
–net common_link 参加するネットワーク
-e VIRTUAL_HOST portainer.hoge.com 使用するドメイン名
-e VIRTUAL_PORT 9000 転送先コンテナの接続ポート
-e LETSENCRYPT_HOST portainer.hoge.com SSLを取得するドメイン
-e LETSENCRYPT_EMAIL admin@hoge.com SSL管理者のメールアドレス
-e LETSENCRYPT_TEST false SSL認証のテストをするか
最後 portainer/portainer 基とするDockerイメージ

今回の独自ドメイン+SSLで必要なのは、太字のところです。

注意すべきは、nginx-proxyではよく「-e VIRTUAL_PORT=80」を指定しますが、Portainerはコンテナの9000番ポートを使うのでそちらに向ける点を注意してください。


GUIでコンテナやサービスの起動・停止・削除、コンテナイメージのダウンロードまでも出来てしまうPortainerを独自ドメインで使えるようになりました。外出先でDockerの管理をしたり、試しにコンテナを起動してみたりといろいろ便利なので、ぜひ使ってみてください。