c0d3man52

Docker

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

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

公開日: 2017.9.8

Portainerって?

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

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

見やすい管理画面でクラスタの管理からプライベートレジストリの管理まで出来る高性能なアプリです。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 [email protected] -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 [email protected]
-e LETSENCRYPT_TEST=false
portainer/portainer

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

オプション今回のオプション意味
docker runコンテナを起動
-p9000:9000マシンのポート:コンテナのポート
-v/var/run/docker.sock:/var/run/docker.sockボリュームのマウント
–netcommon_link参加するネットワーク
-e VIRTUAL_HOSTportainer.hoge.com使用するドメイン名
-e VIRTUAL_PORT9000転送先コンテナの接続ポート
-e LETSENCRYPT_HOSportainer.hoge.comSSLを取得するドメイン
-e LETSENCRYPT_EMAIL[email protected]SSL管理者のメールアドレス
-e LETSENCRYPT_TESTfalseSSL認証のテストをするか
最後portainer/portainer基とするDockerイメージ

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

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


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