Portainer でらくらく!GUI Docker

こんにちは

BBSakura Networksの牧です。この記事は BBSakura Networksのアドベントカレンダー 6日目です。

RPiにUbuntu19.10をインストールして自宅サーバにしたかったのですが、RPiに乗るようないい感じのハイパバイザはまだないようなので、Dockerコンテナを PortainerGUIで管理して仮想サーバを立ててみます。

Portainerについてまとめた記事はたくさんありますが、この記事は自分がハマったところなど備忘録も兼ねてPortainerのインストールから簡単なことはじめまでをまとめています。(自分で書くと覚える)

こういう人にぴったりの記事です

この記事の out of focus

  • 他のコンテナオーケストレータとの比較
  • Windows版の手順への言及(Mac版については末尾で触れます)

Portainerについて

PortainerはDockerコンテナ上で動くOSSのDockerコンテナオーケストレータです。

PortainerはあくまでDockerコンテナをグラフィカルに表示するツールのため、Portainerが動いているコンテナをrmしたりPortainerを再設定しても 他のDockerコンテナやdocker networkなどDockerが持つ情報が削除されることはありません。

しかし、Portainerが持つ情報はリセットされる可能性があります。Portainerが持つ情報にはPortainerユーザアカウントPortainerユーザグループPortainerで設定したコンテナへのアクセス権限などがあります。

Portainerについて技術的な情報やその他詳しい情報は以下をご覧ください! - portainer.io - Portainer GitHub

機能

  • DockerをGUIで管理できる
  • Endpointを複数作成してクラスタリングできる
  • Portainerユーザによってコンテナへのアクセス権限をつけることができる
  • Portainerからコンテナのコンソールにログインできる

いいところ

  • GUIでモニタリングしやすい!
  • Dockerコマンドを打つめんどくささがなくなる!
  • docker stop しなくてもワンクリックでコンテナを潰せる!(内部では docker stop && docker rm している)

悪いところ

  • CUIのDockerが持つ機能を全て包含しているわけではない...(が大抵の基本的なことはできる)
    • DNSサーバの指定はまだGUIでできない(2019/12/5 時点)

1. Ubuntu19.10へのDockerのインストール

1.1. いつもの

# apt update && apt upgrade

1.2. 【確認事項】Ubuntu19.10のaptリポジトリについて

Dockerの2019年12月時点での最新メジャーバージョンは18です。

Docker 18は公式にはまだUbuntu19.10に対応していませんが、19.10の上でもとくに問題なく動くようです。(自宅なので気軽にOK) そのため19.10のaptリポジトリ設定を書き換えて、Docker 18をインストールします。

もし この作業をしないままDockerをインストールしてコンテナを上げる時にoci errorが出た場合は、これが原因の可能性があります。以下リンク先の記事をみてリポジトリを設定し、Docker 18をインストールしてください。 https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-18-04

1.3. インストール

# apt install docker-ce

2. Portainerのインストール

Docker Hubからportainer/portainerをpullしてコンテナを立てます。ポートはいい感じに適宜書き換えてください。 ※Portainer側のポートは9000である必要があります。

# mkdir -p /home/portainer/data
# docker container run -d -p 9000:9000 --name portainer -h portainer --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

ちゃんと上がっていることを確認してください。もし上がってなければ各関連ディレクトリの権限を確認してみてください。(👆で掘った/home/portainer/dataなど)

# docker ps
CONTAINER ID        IMAGE                 COMMAND             CREATED             STATUS              PORTS                    NAMES
xxxxxxxxxxxx        portainer/portainer   "/portainer"        2 seconds ago        Up 2 second    0.0.0.0:9000->9000/tcp   portainer

3. Portainerの初回設定

3.1. GUIへのアクセス&初回ログイン

ブラウザでPortainerが動いているDockerホストのIP:ポートを叩きます。ローカルに立てている場合は127.0.0.1:9000、RPiなどに立てている場合はそちらのIPを叩いてください。(IPをfixにしていた方がいいですね) 以下のような初回ログイン画面が出るはずなので、初回ログインを完了してください!

3.2. 管理したいDocker環境に接続

Portainerで管理したいDocker環境の形態を選択します。

今回は Portainerが動いているDocker環境のコンテナを管理したいのでLocalを選択します。

3.3. Endpointを選択

初回はすでにlocalという名前のendpointが作成されています。ここに入るとPortainerが動いているコンテナの存在を確認できます。再度endpoint選択画面に戻るには、左メニューからHomeを選択してください。

3.4. 注意点&おすすめ

  • Endpointに入った後、左メニューのContainersから、コンテナ管理(一覧、作成など)ができます。
  • コンテナを立てるときは、Command & loggingcommand/bin/bashConsoleInteractive & TTY (-i -t)を指定してください(コンテナが上がりません)
  • Portainerだけが動くendpointと、それ以外のコンテナが動くendpointを分けることで、Portainerを間違って削除しないようになどできます(それぞれの趣味に合わせて、、、)

以上で初期設定&アクセスは完了です。

Endpointの作成

Endpointを作成することで、コンテナのクラスタリングが可能になります。 今回はDocker APIを使うendpointの作成手順を記載します。

  • Endpoint URLにDockerホストのIP(ローカルのPortainerの場合、ループバックはだめ)と上で指定したポートを入力

  • Public IPにMacのIP(ループバックはだめ)を入力

  • + Add endpoint

Portainerのバージョンアップ方法

Portainerのバージョンアップは、GUIから行うことができません。(2019/12/5 時点)

  • Portainerのimagesメニューからイメージ管理画面に移動し、portainer/portainerもしくはportainer/portainer:latestをpullする(ターミナルからCUIでも可)

  • ターミナルでPortainerが動いているコンテナをdocker stopする

  • 上述の方法でターミナルでPortainerコンテナを立ち上げる

  • 正しく動くことを確認したら、旧バージョンのコンテナを消す(必要に応じてimageも消去)

Macでのインストール

Macでは以下のようにしてインストールしてください。Ubuntuよりやや手間が増えますが、何をしているかは上述の記事と適宜読み替えてください!(MacのIPは固定しといた方がよりうれしい) - Macの場合、/homeディレクトリ直下にはユーザがファイルを置けない(置けるけどめんどくさい)ので、新しくPortainer用にディレクトリを掘ります。

$ sudo mkdir -p proj/portainer/data && sudo chown -R <username>:admin proj
  • コンテナを立てる
$ sudo docker container run -d -p 9000:9000 --name portainer -h portainer --restart always --mount type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock --mount type=bind,src=/proj/portainer/data,dst=/data portainer/portainer
  • Docker APIのEndpointを作成するときはMac起動時に毎回以下コマンドを実行してください:smile: この作業をしないと、Docker for MacTCPリクエストを転送してくれません。(12345ポートに飛んできたリクエストを/var/run/docker.sockに飛ばしてくれる)
$ socat TCP-LISTEN:12345,reuseaddr,fork UNIX-CONNECT:/var/run/docker.sock
  • Endpointを作成 上記と同じようにGUIでEndpointを作成してください。

注釈

  • RPi4に公式で対応しているUbuntuのバージョンは19.10のみです(2019/12/5 現在)