🎞️

youtube-dlのコンテナイメージをBuildahで作成してPodmanで実行する

2021/01/11に公開

youtube-dlをコンテナで実行する

Docker Hubに数多くコンテナイメージは公開されていますが、その中から下記の項目を参考に良さげなのをピックアップしました。

  • 更新日時が新しい
  • Dockerfileが公開されている
  • GitHubリポジトリがある

https://hub.docker.com/r/kijart/youtube-dl
https://github.com/kijart/docker-youtube-dl

上記の公開済みコンテナイメージをそのまま使うこともできますが、今回はローカルでコンテナイメージをビルドします。
docker-youtube-dlをローカルにgit cloneします。Dockerfileyoutube-dl.confに若干修正をしてコンテナイメージをビルドします。

実行環境

CentOS Stream上でPodman、Buildahを実行します

$ cat /etc/redhat-release 
CentOS Stream release 8
$ uname -a
Linux narrative 4.18.0-259.el8.x86_64 #1 SMP Mon Dec 21 21:05:36 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
$ podman -v
podman version 2.2.1
$ buildah -v
buildah version 1.16.7 (image-spec 1.0.1-dev, runtime-spec 1.0.2-dev)

ソースファイル

Dockerfile: --merge-output-formatを使うためにffmpegを追加

Dockerfile
FROM python:alpine
LABEL maintainer="Shion Tanaka / Twitter(@tnk4on)"
RUN pip install --upgrade pip
RUN pip install youtube_dl
RUN apk add --update --no-cache ffmpeg
COPY ./youtube-dl.conf /etc/youtube-dl.conf
WORKDIR /media
ENTRYPOINT ["youtube-dl"]

youtube-dl.conf: ファイル名が「タイトル.拡張子」になるようにオプションを変更

youtube-dl.conf
# save all outputs under /media directory
-o /media/%(title)s.%(ext)s

作業詳細

  • コンテナイメージの作成にbuildahを使います
Buildahコマンド
$ buildah bud -t tnk4on/youtube-dl .
Buildahでビルドしたログ
$ buildah bud -t tnk4on/youtube-dl .
STEP 1: FROM python:alpine
STEP 2: LABEL maintainer="Shion Tanaka / Twitter(@tnk4on)"
STEP 3: RUN pip install --upgrade pip
Requirement already satisfied: pip in /usr/local/lib/python3.9/site-packages (20.3.3)
STEP 4: RUN pip install youtube_dl
Collecting youtube_dl
  Downloading youtube_dl-2021.1.8-py2.py3-none-any.whl (1.9 MB)
     |████████████████████████████████| 1.9 MB 5.9 MB/s 
Installing collected packages: youtube-dl
Successfully installed youtube-dl-2021.1.8
STEP 5: RUN apk add --update --no-cache ffmpeg
fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/community/x86_64/APKINDEX.tar.gz
(1/44) Installing sdl2 (2.0.12-r1)
(2/44) Installing libxau (1.0.9-r0)
(3/44) Installing libbsd (0.10.0-r0)
(4/44) Installing libxdmcp (1.1.3-r0)
(5/44) Installing libxcb (1.14-r1)
(6/44) Installing libx11 (1.6.12-r0)
(7/44) Installing aom-libs (1.0.0-r1)
(8/44) Installing alsa-lib (1.2.2-r0)
(9/44) Installing brotli-libs (1.0.9-r1)
(10/44) Installing libpng (1.6.37-r1)
(11/44) Installing freetype (2.10.4-r0)
(12/44) Installing fontconfig (2.13.1-r2)
(13/44) Installing fribidi (1.0.9-r0)
(14/44) Installing libass (0.14.0-r0)
(15/44) Installing libdav1d (0.7.0-r0)
(16/44) Installing gmp (6.2.0-r0)
(17/44) Installing nettle (3.5.1-r1)
(18/44) Installing p11-kit (0.23.22-r0)
(19/44) Installing libtasn1 (4.16.0-r1)
(20/44) Installing libunistring (0.9.10-r0)
(21/44) Installing gnutls (3.6.15-r0)
(22/44) Installing lame (3.100-r0)
(23/44) Installing opus (1.3.1-r0)
(24/44) Installing libssh (0.9.4-r1)
(25/44) Installing libogg (1.3.4-r0)
(26/44) Installing libtheora (1.1.1-r14)
(27/44) Installing libjpeg-turbo (2.0.5-r0)
(28/44) Installing v4l-utils-libs (1.20.0-r0)
(29/44) Installing libxext (1.3.4-r0)
(30/44) Installing libxfixes (5.0.3-r2)
(31/44) Installing libpciaccess (0.16-r0)
(32/44) Installing libdrm (2.4.102-r0)
(33/44) Installing wayland-libs-client (1.18.0-r4)
(34/44) Installing libva (2.7.1-r0)
(35/44) Installing libvdpau (1.4-r0)
(36/44) Installing libvorbis (1.3.6-r2)
(37/44) Installing libvpx (1.8.2-r0)
(38/44) Installing x264-libs (20191119-r1)
(39/44) Installing libgcc (9.3.0-r2)
(40/44) Installing libstdc++ (9.3.0-r2)
(41/44) Installing x265-libs (3.3-r1)
(42/44) Installing xvidcore (1.3.7-r1)
(43/44) Installing ffmpeg-libs (4.3.1-r0)
(44/44) Installing ffmpeg (4.3.1-r0)
Executing busybox-1.31.1-r19.trigger
OK: 72 MiB in 80 packages
STEP 6: COPY ./youtube-dl.conf /etc/youtube-dl.conf
STEP 7: WORKDIR /media
STEP 8: ENTRYPOINT ["youtube-dl"]
STEP 9: COMMIT tnk4on/youtube-dl
Getting image source signatures
Copying blob 777b2c648970 skipped: already exists  
Copying blob c4cd3bcee4dc skipped: already exists  
Copying blob 412ecdf509e8 skipped: already exists  
Copying blob 83b122a5e1e1 skipped: already exists  
Copying blob 6963ca800cca skipped: already exists  
Copying blob 84570c04c706 done  
Copying config ef6be9c22e done  
Writing manifest to image destination
Storing signatures
--> ef6be9c22ec
ef6be9c22ec4529af1d99f5a5e469cb6020e9bd66c354f66554bb573690dcd97
  • コンテナイメージの作成後は、Podmanコマンドでイメージの確認および実行を行います
イメージ確認
$ podman images
REPOSITORY                           TAG     IMAGE ID      CREATED         SIZE
localhost/tnk4on/youtube-dl          latest  ef6be9c22ec4  5 minutes ago   125 MB
動作確認
$ podman run --rm youtube-dl --version
2021.01.08
  • 問題なく動作したら.bashrcにエイリアスを指定しておくとコマンド入力が減るのでオススメです
.bashrc
alias youtube-dl="podman run --rm youtube-dl"

まとめ

youtube-dlをコンテナで実行するための環境を整えてみました。公開されているコンテナイメージをそのまま使うこともできますが、Dockerfileが公開されている場合は自分の利用用途に合わせてカスタマイズを行うことができます。
自分の場合は実行環境のサーバーを最近CentOS Streamに移行したので、動かすアプリケーションは可能な限りコンテナで実行しOS環境をクリーンに保つようにしています。CentOS Srtreamでは標準でPodman、Buildahが搭載されていますので既にあるDocker向けの資産を再利用することが可能です。

CentOS 7からCentOS Streamへの移行に関する情報は下記のスクラップにまとめています。参考にしてください。
https://zenn.dev/tnk4on/scraps/f0c29f704e3fd6

Discussion