Dockerコンテナの管理
tech docker
Lastmod: 2020-07-05

私の自宅サーバは,その多くの機能を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"
comments powered by Disqus