ラジオ録音の更新でdockerを使用しようと計画しています。
- イメージが264MBある。減らしたい。
- イメージを減らすなら、alpine linux
- alpine linuxを使用したら、120MBも増えた
- マルチステージビルドを使ってみたら、50%以上の削減!
イメージが264MBある。減らしたい。
dockerのイメージが微妙に大きいので、小さくしてみようと思います。現状のDockerファイルだと、以下のように264MBです。ラジオを録音するだけなので、もう少し小さくしたいです。
# docker images REPOSITORY TAG IMAGE ID CREATED SIZE radio0 latest 26e62370a9c1 26 seconds ago 264MB
使用しているDockerファイル以下です。debian:9.5-slimをベースに作成したイメージです。
FROM debian:9.5-slim RUN apt-get update && apt-get -y upgrade && apt-get -y install \ rtmpdump \ swftools \ libxml2-utils \ ffmpeg \ libavcodec-extra \ wget \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* COPY ./rec_radiko.sh /usr/local/bin/ ENV TZ Asia/Tokyo WORKDIR /usr/volume
イメージを減らすなら、alpine linux
イメージのサイズを小さくするなら、alpine linuxを使うのが良いってじっちゃんが言ってました。
なので、alpine linuxを利用します。alpine linuxのバージョンは3.10.3です。
FROM alpine:3.10.3 RUN apk add \ --no-cache \ --repository http://dl-3.alpinelinux.org/alpine/edge/testing \ libtool automake autoconf nasm vips-dev fftw-dev gcc g++ make libc6-compat \ rtmpdump \ libxml2-utils \ ffmpeg \ wget RUN apk update \ && wget http://swftools.org/swftools-0.9.2.tar.gz \ && tar -xvf swftools-0.9.2.tar.gz \ && cd swftools-0.9.2 \ && LIBRARY_PATH=/lib:/usr/lib ./configure \ && make \ # Makefile includes rm with -o flag && sed -e 's/-o -L/#-o -L/' -i swfs/Makefile \ && make install \ && rm -rf /var/cache/apk/* \ && rm -rf /swftools-0.9.2 COPY ./rec_radiko.sh /usr/local/bin/ ENV TZ Asia/Tokyo WORKDIR /usr/volume
alpine linuxを使用したら、120MBも増えた
小さくなっていることを期待したのに、大きくなっていました
イメージ「radio1」がalpine:latestをベースとして作成したイメージで、387MBです。
約120MBも大きくなっています。
# docker images REPOSITORY TAG IMAGE ID CREATED SIZE radio1 latest 88758eecbac9 16 minutes ago 387MB
マルチステージビルドを使ってみたら、50%以上の削減!
swftoolsのコンパイルが必要で、コンパイル用のパッケージやソース等をダウンロードしているのが、イメージサイズを大きくした原因と考えました。
そこで、マルチステージビルドを利用して、swftoolsのコンパイルを分けてみました。
FROM alpine:3.10.3 as swftools RUN apk add \ --no-cache \ --repository http://dl-3.alpinelinux.org/alpine/edge/testing \ libtool automake autoconf nasm vips-dev fftw-dev gcc g++ make libc6-compat \ && wget http://swftools.org/swftools-0.9.2.tar.gz \ && tar -xvf swftools-0.9.2.tar.gz \ && cd swftools-0.9.2 \ && LIBRARY_PATH=/lib:/usr/lib ./configure \ && make \ # Makefile includes rm with -o flag && sed -e 's/-o -L/#-o -L/' -i swfs/Makefile \ && make install \ && rm -rf /var/cache/apk/* \ && rm -rf /swftools-0.9.2 FROM alpine:3.10.3 RUN apk add \ --no-cache \ --repository http://dl-3.alpinelinux.org/alpine/edge/testing \ rtmpdump \ libxml2-utils \ ffmpeg \ bash \ perl \ curl \ wget COPY --from=swftools /usr/local/bin/swfextract /usr/local/bin/ COPY ./rec_radiko.sh /usr/local/bin/ ENV TZ Asia/Tokyo WORKDIR /usr/volume
マルチステージビルドを利用したら、100MBになりました!初期の264MBから半分以下のサイズになりました。試しにこれを使って試運転していこうと思います。
# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker_rec_radiko latest 8fbb38e1bf95 23 hours ago 100MB