カスタムイメージの作成

多くの人は,ここまでの説明とmirakc/mirakcイメージを使って録画システムを構築できたと思います.しかし,配布しているDockerイメージに含まれていないツール,例えばrecpt1recdvb以外のチューナーコマンドを使っている人は,このDockerイメージだけでは録画システムを構築できません.自力でカスタムイメージを作成する必要があります.

カスタムイメージのネイティブビルド

カスタムイメージの作成はそれほど難しい作業ではありません.試しにHEALTHCHECKを追加してみます.

まず,以下のようなDockerfileを作成します.

FROM mirakc/mirakc:alpine

# 短時間でテストできるように,チェック間隔を10秒に設定しています
HEALTHCHECK --interval=10s --timeout=3s \
  CMD curl -fsSL http://localhost:40772/api/status || exit 1

次にカスタムイメージのビルド.

sudo docker build -t custom/mirakc .

あとは起動して動作確認.

sudo docker run -d --rm --name custom-mirakc \
  -v $(pwd)/config.yml:/etc/mirakc/config.yml custom/mirakc

# 10秒ごとにログが表示される
sudo docker events

sudo docker stop custom-mirakc

より実用的な例としては,以下のDockerfileを参考にしてください.

カスタムイメージのクロスビルド

ほとんどの場合,カスタムイメージを特定の実行環境上でビルド(ネイティブビルド)すると思います.しかし,カスタムイメージをクロスビルドすべき幾つかの状況が存在します.

  • Multi-Archイメージを作成したい
  • コンパイルが必要がツールをカスタムイメージに追加したいが,SBCでは時間がかかる

このような場合,ターゲットプラットフォームを指定したカスタムイメージのクロスビルドを行うことになります.

クロスビルドを行う場合,クロスビルドを実行するマシンとは異なるCPUアーキテクチャー用のプログラムを実行する場合があます.例えば,aptで追加のパッケージをインストールする場合です.このような場合,クロスビルド前にQEMUユーザーモードエミュレーションのための準備が必要です.macOS向けdocker desktopでは最初から有効になっているようですが,Linux環境では以下を実行する必要があります.

docker run --privileged --rm tonistiigi/binfmt --install all

詳細については,tonistiigi/binfmtを参照してください.

QEMUの準備ができたら,後はクロスビルドするだけです.試しに,linux/arm/v7向けイメージをmacOS(amd64)上でクロスビルドしてみます.

# 「カスタムイメージの作成」で使用したDockerfile
cat <<EOF >Dockerfile
FROM mirakc/mirakc:alpine

# 短時間でテストできるように,チェック間隔を10秒に設定しています
HEALTHCHECK --interval=10s --timeout=3s \
  CMD curl -fsSL http://localhost:40772/api/status || exit 1
EOF

docker build -t custom/mirakc:arm32v7 --platform=linux/arm/v7 .

クロスビルドに成功したか確認してみます.

$ docker image inspect custom/mirakc:arm32v7 | \
    jq '.[] | [.Os, .Architecture, .Variant] | join("/")'
"linux/arm/v7"

results matching ""

    No results matching ""