カスタムイメージの作成
多くの人は,ここまでの説明とmirakc/mirakc
イメージを使って録画システムを構築できたと思います.しかし,配布しているDockerイメージに含まれていないツール,例えばrecpt1
とrecdvb
以外のチューナーコマンドを使っている人は,この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"