背景
少し前に、Python FastAPI で WebApp を作りました。
これを動作させる Dockerfile
を作ってみたらめっちゃ良かった、というだけの話です。
Docker 無しのセットアップ手順
mozjpeg-webui を動かすには、mozjpeg の実行ファイルを /opt/mozjpeg/bin/
に置いておく必要があります。(正確には jpegtran
さえあればいい。)
sudo apt install cmake nasm
# リポジトリ外の、どこか適当なディレクトリで
wget -O - https://github.com/mozilla/mozjpeg/archive/refs/tags/v4.1.1.tar.gz | tar -xzv -C ./
cd mozjpeg-4.1.1
mkdir build && cd build
cmake -G"Unix Makefiles" -DPNG_SUPPORTED=0 ../
sudo make -j5 install
それと、Python のパッケージを pip
で入れる必要もあります。
# ここからリポジトリルートで
pip install -r assets/requirements.txt
これで起動および動作できます。
cd src
python3 main.py
バイナリのビルドもあって、セットアップは少々手間。
Docker を用いたら
Docker をめっちゃ雑に一言で言うと、「素早く仮想環境用意して、色々動かせるヤツ」です。「こういうのが用意されたこんな環境 (= Dockerfile 及び Docker イメージ)」を事前に用意しておけば、それを呼び出すだけでサッと専用マシン (= Docker コンテナ) 起動。
Docker の詳しい解説は山ほど出回っているので、ここではカット。
先のような手順を、すべて Dockerfile
に示すことができます。
# mozjpeg building stage
FROM python:3.13-slim AS build
WORKDIR /home/build
RUN apt update
RUN apt install -y wget cmake nasm
RUN wget -O - https://github.com/mozilla/mozjpeg/archive/refs/tags/v4.1.1.tar.gz | tar -xz -C ./
WORKDIR /home/build/mozjpeg-4.1.1
RUN cmake -G"Unix Makefiles" -DPNG_SUPPORTED=0 ./
RUN make -j5 jpegtran-static
# Only jpegtran is necessary, then static linked executable is easy to setup
# Production deployment stage
FROM python:3.13-slim
WORKDIR /home/mozjpeg-webui
COPY --from=build /home/build/mozjpeg-4.1.1/jpegtran-static /opt/mozjpeg/bin/jpegtran
COPY assets/requirements.txt /home/mozjpeg-webui/requirements.txt
COPY src /home/mozjpeg-webui/src
RUN pip install -r requirements.txt
WORKDIR /home/mozjpeg-webui/src
CMD ["python3", "main.py"]
上のファイルさえあれば、ビルドして起動するのみ。打つコマンドはたったこれだけ。
docker build -t mozjpeg-webui .
docker run --rm -it -p 8000:8000 mozjpeg-webui
これら全てがコンテナ (仮想環境) 上で動作するので、実環境が汚れる心配も全くなし。何なら、apt 使える環境限定 (つまり Debian 系 Linux) だったところが、Docker さえあれば使用 OS 問わず使えるように!
おわり
多分、知ってる人からしたら「逆に何でやってなかったの?」と言われる。