この記事では、以前に紹介したDockerを使ったNginxとWSGI構成によるFlaskアプリのデプロイの記事中のNginx+Gunicorn+Flask構成に、BusyBox を追加する方法を解説します。
BusyBoxは、軽量なツールで、さまざまなLinuxコマンドを1つのバイナリに統合しています。
コンテナ内で便利なユーティリティを使用できるようにするため、追加手順を紹介します。
BusyBoxを追加する
準備:現在の構成の確認
以下は、現在の記事で紹介されている構成です。
Dockerfile:
Flaskアプリ用のPython環境を設定しています。
# ベースイメージを指定
FROM python:3.8-slim
# 作業ディレクトリを設定
WORKDIR /app
# 必要なファイルをコピー
COPY requirements.txt /app
COPY app.py /app
COPY gunicorn_config.py /app
# Flaskアプリの依存関係をインストール
RUN pip install --no-cache-dir -r requirements.txt
# GunicornでFlaskアプリを起動
CMD ["gunicorn", "--config", "gunicorn_config.py", "app:app"]
docker-compose.yml:
FlaskアプリとNginxを連携する構成です。
services:
flask-app:
build:
context: .
ports:
- "5000:5000"
networks:
- frontend
restart: always
nginx:
image: nginx:latest
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
ports:
- "80:80"
depends_on:
- flask-app
networks:
- frontend
networks:
frontend:
driver: bridge
BusyBoxを追加する理由
BusyBoxは軽量で多機能なユーティリティツールです。
コンテナ内で次のような用途で便利です。
- デバッグ: ファイル操作やネットワーク診断に便利なコマンドを手軽に利用可能。
- 軽量性: 他のツールを追加する必要がなく、コンテナサイズを最小化。
Dockerfileを修正してBusyBoxを追加
以下のようにDockerfileを修正し、BusyBox をPythonイメージに統合します。
修正版Dockerfile:
# ベースイメージとしてBusyBoxを取得
FROM busybox AS busybox_stage
# ベースイメージを指定
FROM python:3.8-slim
# BusyBoxをコピー
COPY --from=busybox_stage /bin/busybox /bin/busybox
# 作業ディレクトリを設定
WORKDIR /app
# 必要なファイルをコピー
COPY requirements.txt /app
COPY app.py /app
COPY gunicorn_config.py /app
# Flaskアプリの依存関係をインストール
RUN pip install --no-cache-dir -r requirements.txt
# GunicornでFlaskアプリを起動
CMD ["gunicorn", "--config", "gunicorn_config.py", "app:app"]
docker-compose.ymlは修正不要
BusyBoxを追加しても、docker-compose.yml には変更は必要ありません。
そのまま利用できます。
services:
flask-app:
build:
context: .
ports:
- "5000:5000"
networks:
- frontend
restart: always
nginx:
image: nginx:latest
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
ports:
- "80:80"
depends_on:
- flask-app
networks:
- frontend
networks:
frontend:
driver: bridge
ビルドと実行
以下の手順でBusyBoxを統合した構成をビルド・実行します。
イメージをビルド
docker-compose build
コンテナを起動
docker-compose up -d
動作確認
Flaskアプリが正常に動作していることを確認します。
curl http://localhost
BusyBoxの確認方法
BusyBoxが正常に追加されているか、コンテナ内で以下の手順で確認します。
コンテナにログイン Flaskアプリのコンテナにアクセスします。
docker exec -it flask-app sh
BusyBoxコマンドを試す
busybox
または、個別のBusyBoxコマンドを実行します。
busybox ls
busybox ping 8.8.8.8
BusyBoxの活用例
以下は、BusyBoxを使用して簡単にできることの例です。
ファイル一覧の表示
busybox ls
ネットワーク診断
busybox ping 8.8.8.8
まとめ
この記事では、Nginx+Gunicorn+Flask構成にBusyBoxを統合する手順を紹介しました。
BusyBoxを利用することで、軽量なデバッグツールやユーティリティを手軽に使用できます。
特にリソースが限られた環境やDockerコンテナ内で役立つため、ぜひ活用してみてください!

