2019年時点で、Dockerのニーズは高まる一方ですが、使いこなすまでに覚えることが多く、大手のクラウド基盤に見られるように、Dockerにも直観的でわかりやすい管理画面が求められています。
DockerコンテナをGUIで操作し、管理・監視するためのツールはいくつもリリースされていますが、今回はその中から、Portainer というツールをCentOS 7環境への導入する方法を紹介します。
Portainerは、Webブラウザを使ったDockerのGUI管理ツールです。直観的なユーザーインターフェースとなっているので、操作に迷うことなくDockerイメージやコンテナを管理することができます。
インストール前に確認すること
まず初めに今回紹介する方法でPortainerをインストールするには、Dockerのバージョンが重要になります。
理由は後ほど利用する-mountオプションのdocker runサポートがDocker 17.06以降でのみ導入されているためです。
現在、無償版のDocker は Docker CE(コミュニティエディション)が正式名になります。
CentOS7環境でDockerを yum install docker といったコマンドでインストールしている場合は、開発が終わった低いバージョン(Docker 1.13.1など)がインストールされていますので、もしそれらのバージョンのDockerが既にインストールされており、そのDocker環境を初期化して問題なければ、下記のコマンドでアンインストールしてください。
|
# yum remove docker docker-common docker-selinux docker-engine |
Docker CE のインストール
必要なパッケージのインストールを行います。
|
# yum install -y yum-utils device-mapper-persistent-data lvm2 |
Docker CEのリポジトリを設定します。
|
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo |
開発者向けのDocker CE Edgeのリポジトリを無効にします。
|
# yum-config-manager --disable docker-ce-edge |
yum パッケージ・インデックスを更新します。
Docker CEをインストールします。
|
# yum install -y docker-ce docker-ce-selinux |
Unit設定ファイルを変更したので変更内容をsystemdに認識させます。
|
# systemctl daemon-reload |
Dockerを起動します。
Portainerのインストール
ここまでの準備が終わっていればインストールは簡単です。下記のコマンドでPortainerをインストールします。
|
# mkdir -p /home/portainer/data # docker container run -d -p 9000:9000 --name portainer01 -h portainer01 --restart always --mount type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock --mount type=bind,src=/home/portainer/data,dst=/data portainer/portainer |
※-p 9000:9000 の部分を変えれば、9000番ポート以外を指定してインストールすることも可能です。
Portainerが組み込まれたコンテナが起動しているか確認します。
|
# docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a14b9af63173 portainer/portainer "/portainer" 2 minutes ago Up 2 minutes 0.0.0.0:9000->9000/tcp portainer01 |
これで、Portainerが利用可能になりました。
管理対象のDocker ホストの設定
Portainer の管理対象であるDocker ホストでは、Dockerデーモンの設定変更が必要です。
|
# cp /usr/lib/systemd/system/docker.service /root/ # vi /usr/lib/systemd/system/docker.service 変更前 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock 変更後 ExecStart=/usr/bin/dockerd -H unix:// -H tcp://0.0.0.0:12345 # systemctl daemon-reload # systemctl restart docker # netstat -lntp | grep dockerd tcp6 0 0 :::12345 :::* LISTEN 5753/dockerd |
Portainer による管理
Portainer にアクセスするには、WebブラウザでPortinerのコンテナが稼働するホストOSのIPアドレス、または、FQDNに9000番ポートを指定します。
Webブラウザに指定するURLは下記のような形式になります
http://PortainerのDockerコンテナが稼働するホストOSのFQDN:9000/
or
http://PortainerのDockerコンテナが稼働するホストOSのIPアドレス:9000/
管理ユーザの登録
まず初めに管理ユーザの登録をします。

入力したら、画面左下の「Create user」をクリックします。
管理対象 Docker ホストの登録
次に、管理対象のDockerホストを登録します。管理対象のDockerホスト側では、dockerd デーモン起動時のポート番号の設定として、「-H tcp://0.0.0.0:12345」に設定した場合は、画面上のEndpoint URLの入力欄に「管理対象ノードのIPアドレス:12345」を入力し、「Connect」をクリックします。

現在、稼働している管理対象のDockerホストなどの情報が表示されています。

Portainer ダッシュボードが管理対象とするDockerホストをクリックします。すると、管理対象となっているDockerのホストにおけるDockerイメージやコンテナの情報が表示されます。

サンプル用Dockerイメージの入手
「Images」ボタンをクリックします。すると、ホストOSに現在登録済みのDockerイメージの一覧が表示されますが、現時点で登録されているDockerイメージは無いので表示されていません。
ここで、サンプル用にCentOS 6.10 のDockerイメージを入手します。画面上の下にある[Image]に[centos:6.10]を入力します。右横のRegistryで[DockerHub]が選択されていることを確認したら、[Pull the image] をクリックします。

CentOS 6.10 のDocker イメージの入手に成功したら、画面下部に入手したDockerイメージが表示されます。

コンテナの起動
入手したイメージを使ってCentOS 6.10を起動してみましょう。
Portainer の管理画面左上の[Containers]をクリックします。すると、コンテナのリストが表示されますが、現時点では、管理対象のDockerホストの稼働しているDockerコンテナは存在しないため、リストには、コンテナが表示されていません。
画面上の[+ Add container]をクリックして、[Create container]の画面に切り替えます。

Name欄にコンテナ名として、[test]、Image欄に、[centos:6.10]を入力します。

画面を下にスクロールして、[Advanced container settings]という項目の中に[Command & logging]というタブがありますのでクリックします。
その下にあるCommand欄に[/bin/bash]と入力し、Console の項目は[Interactive & TTY (-i -t)]を選択します。

以上でコンテナ実行の準備が整いましたので、画面中断にある[Deploy the container]をクリックします。

コンテナのリストの画面に自動的に戻ります。すると、現在稼働中のコンテナが表示されています。

これで、Potainerを使って、Dockerコンテナを起動することが出来ました。
コンソール接続
最後に起動したコンテナtestのコンソールにアクセスしてみましょう。コンテナリスト上のQuick actionsの下にある、[>_]アイコンをクリックします。

[Container console]の画面に移るので、Commandで[/bin/bash]を選択したら、[Connect]をクリックします。

Docker コンテナ test のコンソール画面が表示されるので、操作出来るか確認してみましょう。

通常通り、コマンドラインで作成したDockerコンテナもPotainerで管理することができます。
httpdというコンテナ名でwebサーバApache2.4を起動します。
|
# docker run -d --name httpd -p 80:80 httpd:2.4 |
[Containers]の画面を表示してみると、httpd というコンテナが表示されていますね。

なお、[Containers]の画面からは各コンテナの起動や停止、削除といったことも可能です。

以上、Portainerの導入方法の紹介でした。