こんにちは
BBSakura Networksの牧です。この記事は BBSakura Networksのアドベントカレンダー 6日目です。
RPiにUbuntu19.10をインストールして自宅サーバにしたかったのですが、RPiに乗るようないい感じのハイパバイザはまだないようなので、Dockerコンテナを Portainer のGUIで管理して仮想サーバを立ててみます。
Portainerについてまとめた記事はたくさんありますが、この記事は自分がハマったところなど備忘録も兼ねてPortainerのインストールから簡単なことはじめまでをまとめています。(自分で書くと覚える)
こういう人にぴったりの記事です
- Raspberry Pi 4 にUbuntu19.10 をインストールして自宅サーバを作りたい
- 物理サーバの上に仮想サーバをたくさん立てたい
- Kubernetes は
(発音が)むずかしいし、自宅だからそれほど大仰なオーケストレーションいらない - とりあえず手軽にはじめたい
この記事の out of focus
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
している)
悪いところ
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 & logging
のcommand
に/bin/bash
、Console
にInteractive & 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 MacにTCPリクエストを転送してくれません。(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 現在)