私の自宅サーバは,その多くの機能をdockerで運用している.
dockerで運用する理由は人それぞれあると思うし,デメリットもあるのでここでは触れ ない.
ともかくdockerで立てているサーバが10を越えてくると,そろそろ管理ツールが欲しく なってくるわけで,少し調べたものをメモに残しておく.
Docker Compose
いくつかのdockerコンテナを使って一つの系を動作させたい時に,まとめて定義・実行 するCLIツール. 例えば,nginxをフロントエンドにしてphpを動作させる場合,こんな感じでphpとnginx のコンテナの定義を書いておくと,依存関係も見ながら実行してくれたりする.
server/docker-compose.yml
をこんな風に書いて…
version: '3'
services:
php:
image: php:fpm-alpine
volumes:
- /path/to/public_html:/var/www/html
- /etc/localtime:/etc/localtime:ro
restart: unless-stopped
nginx:
image: nginx:stable
volumes:
- /path/to/etc/nginx:/etc/nginx
- /path/to/public_html:/var/www/html
- /etc/localtime:/etc/localtime:ro
depends_on:
- php
ports:
- 80:80
- 443:443
restart: unless-stopped
実行はこんな感じ.素のdockerでもできるけど,便利.
素のdockerと比べて不便な点は,docker-compose.yml
の置いてあるディレクトリまで
移動しないといけないこと.
docker-compose up -d # daemonとして実行
docker-compose stop nginx # nginxだけ止めたい時
docker-compose ps # docker composeの一覧
docker-compose exec nginx bash # nginxのコンテナ内でbashを実行
Portainer
dockerの起動や動作状態の把握などなどの操作をAWSとかopenstackとか…諸々のツール
と同様にweb UIベースで操作できるもの.
dockerdの状態を引くために /var/run/dockerd.sock
を叩いて情報を取得する.
そのため,portainer自体をdocker containerとしてデプロイして運用することもでき
る.
またdockerdのsocketをtcp/ipのportにバインドして,外部ホストからdockerdの状態を
引く方法もあるらしく(我が家は1台しかサーバを用意してないので試してない),クラ
スタ構成でも参照できるようだ.
最小構成は,管理したいdocker containerと同じホスト内で,
以下のdocker-compose.yml
を用意して実行するだけ.
実行して最初にアクセスした時に管理ユーザを作るので,デプロイしたら速攻で設定し
PWをかけること.
version: '3'
services:
portainer:
image: portainer/potainer
volumes:
- /var/run/docker.sock:/var/run/docker.sock
ports:
- 9000:9000
起動しているコンテナの停止や再起動などは良いとして,docker-composeを書き換えな いといけないような操作をしたくなった時,どうすれば良いかは不明.
Weave Scope
weaveworksというところが出している色々なdocker管理ツールの一つで, docker container間のリンクを可視化してくれる機能がついている... はずなんだけど,その時に通信が発生しているリンクしか表示してくれないのと, 並びがwebで検索してくるような綺麗なツリー状にならない. 正直期待外れ.
実行はこんな感じでいいらしいが,認証が走らないので少し心配.
リンクが常時貼られるわけではないので,疎通確認に使うにしても微妙な
気がする…
version: '3'
services:
scope:
image: weaveworks/scope
network_mode: "host"
pid: "host"
privileged: true
ports:
- 4040:4040
labels:
- "works.weave.role=system"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:rw"
command:
- "--probe.docker=true"