新しいことにはウェルカム

技術 | 電子工作 | ガジェット | ゲーム のメモ書き

Docker Composeで、コンテナ毎にログをタブに分けて表示する方法

複数のコンテナを連携させたい時は、Docker Composeを使っています。

Docker Composeを実行すると、各コンテナのログが表示されるのですが、1画面に全てのコンテナのログが表示されます。

Docker Composeで、コンテナ毎にログをタブに分けて表示する方法

コンテナ毎にログを追いたいのですが、途中で他のコンテナのログが表示されて見辛いです。

そこで、コンテナ毎にDocker Composeのログをタブに分けて見れるようにしてみました。

方針

Ubuntuに標準でインストールされている、シェルをタブ切り替えできるようにする「Byobu」というアプリを使いました。

「Byobu」の使い方は別記事にまとめました。

www.kwbtblog.com

Byobu設定

Byobuをタブを設定して起動するには、まず、タブのセットを定義して、下記のファイルに保存しておきます。

  • ~/.byoku/windows.tmux.<タブのセット名>

そして、環境変数「BYOBU_WINDOWS」に「タブのセット名」をセットして、Byobuを起動すると、セットしたタブでByobuが起動されます。

$ BYOBU_WINDOWS=<タブのセット名> byobu

ファイルの書き方は下記のとおりです。

まずセッションを作成し、その後ウィンドウを追加していきます。

new-session -n <タブ名> <コマンド>
new-window -n <タブ名> <コマンド>
new-window -n <タブ名> <コマンド>
new-window -n <タブ名> <コマンド>
…

設定を動的生成

Byotuのタブ設定ファイルは静的ファイルなので、スクリプトで、Docker Composeのログを表示する度に内容を書き換えるようにします。

view-compose-logs.sh

#!/bin/bash

svcs=($(docker-compose config --services))
config=""
first_svc=1

for svc in "${svcs[@]}"
do
    if [ "$first_svc" = "1" ]; then
        config="new-session -n $svc docker-compose logs -f $svc;"
        first_svc=0
    else
        config="${config}\nnew-window -n $svc docker-compose logs -f $svc;"
    fi
done

if [ "$config" != "" ]; then
    echo -e "$config" > ~/.byobu/windows.tmux.docker_compose_log
    BYOBU_WINDOWS=docker_compose_log  byobu
fi

実行

docker-compose up -dでDocker Composeをログと切り離して起動した後、./view-compose-logs.shを実行します。

docker-compose up -d
./view-compose-logs.sh

例えば、Docker Composeで「Jenkins」「phpMyAdmin」「MySQL」を立ち上げた場合

Jenkins

Docker Composeで、コンテナ毎にログをタブに分けて表示する方法

phpMyAdmin

Docker Composeで、コンテナ毎にログをタブに分けて表示する方法

MySQL

Docker Composeで、コンテナ毎にログをタブに分けて表示する方法

と、タブが下に表示され、ログがタブに分けて表示されます。

タブの切り替えは「Alt+左右キー」で行い、「Ctrl+c」でタブを閉じます。

感想など

Ubuntuではデスクトップ環境にMATEを使っています。

今まで、Docker Composeのログをタブで分けて表示するのに、下記のようなスクリプトでMATEのターミナルをタブ表示して行っていました。

#!/bin/bash

svcs=($(docker-compose config --services))

for svc in "${svcs[@]}"
do
    mate-terminal --profile=hold -e "docker-compose logs -f $svc" -t $svc --tab
done

Docker Composeで、コンテナ毎にログをタブに分けて表示する方法

しかし、MATEターミナルが入っている環境でしか動かないので、SSH接続やWindowsのWSLなど、CUI環境でも使えるように、今回Byobuを使った形に変更しました。

関連カテゴリー(Docker)記事

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com