以前作ったWebアプリをコンテナ化するために改良
修正のポイント
- コンテナ化するために軽量な「Alpine Linux」をベースとして選択する
- Jinja2のテンプレートを修正し全体のビジュアルを変更
- 追加インストールするLinuxコマンドを確認
- 追加するpythonのライブラリは、「pip freeze」コマンドでrequirements.txtにリストする
Flaskの簡易ウェブサーバー機能で動くように設定していので、Production環境では使わないように注意
ビルドするディレクトリ構成
pkg
├─ static
| ├─ css
| ├─ db
| └─ images
├─ templates (htmlファイルを格納)
├─ alpine_app.py
└─ Dockerfile
Dockerファイルの設定
# ベースイメージを指定する
FROM alpine:latest
# ADD/COPY、RUN実行時の作業ディレクトリを指定
WORKDIR /webapp
# イメージにファイルやフォルダを追加する
COPY . /webapp/
# イメージをビルドする際のコマンド(Alpineはapk)
RUN apk update \
&& apk add python3 \
&& apk add python3-dev \
&& apk add py3-pip \
&& apk add iproute2-ss \
&& apk add lsblk \
&& apk add procps
# pipでPythonライブラリをインストール
RUN pip install -U pip
RUN pip install -r /webapp/requirements.txt
# コンテナが外部と通信するポートを指定
EXPOSE 5555
# コンテナを起動するときに実行する既定のコマンドを指定
CMD ["python", "alpine_app.py"]
イメージをビルドする
docker build -t <Docker HUBユーザ名>/alpine_app:0.3 .
- -tでイメージを指定する際に、Dockerのユーザ名を指定しておかないとDocker HUBのリポジトリにpushできないので注意
mashcannu@mac:~/GitHub/AlpineApp/pkg$ docker build -t mashcannu/alpine_app .
[+] Building 25.2s (11/11) FINISHED
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 802B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/alpine:latest 0.0s
=> [1/6] FROM docker.io/library/alpine:latest 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 18.61kB 0.0s
=> CACHED [2/6] WORKDIR /webapp 0.0s
=> [3/6] COPY . /webapp/ 0.0s
=> [4/6] RUN apk update && apk add python3 && apk add python3-dev && 11.0s
=> [5/6] RUN pip install -U pip 7.4s
=> [6/6] RUN pip install -r /webapp/requirements.txt 4.5s
=> exporting to image 2.0s
=> => exporting layers 2.0s
=> => writing image sha256:5656a0860a8ed25d743c4d183f83eefe982e0ed46b6788b160e607 0.0s
=> => naming to docker.io/library/alpine_app 0.0s