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

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

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を使った形に変更しました。

関連カテゴリー記事

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com