Dockerfile

将来的にOSが変わったりしてライブラリで詰まったりしたら嫌だなぁ、と思い開発環境をDockerで整えることにした。

Docker

コンテナ作るやつ。カーネルはホストOSのものを使うからゲストOSが要らなくて計量らしい。

ライブラリ隔離だけならvenvだけでも良いんだけど、MacとかLinuxに変わった時に入らないライブラリがあると面倒だから、初めからコンテナで開発環境を隔離することにした。

Dockerfile

コンテナの原型となる「イメージ」の設計図。
(https://docs.docker.jp/develop/develop-images/dockerfile_best-practices.html, accessed on 2021/04/15)

FROM python:3.9.4-buster

WORKDIR /opt/app

COPY requirements.txt /opt/app
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
FROM イメージのベースを指定
LABEL イメージに付けるラベルの指定
RUN イメージの最上位のレイヤーで実行されるコマンドを設定
CMD コンテナ実行時のデフォルト処理を設定
EXPOSE コンテナがリッスンするポートを設定
ENV 環境変数の設定
COPY ローカルファイルをコンテナにコピー
ENTRYPOINT コンテナ起動時の処理
VOLUME イメージ内にデータを永続的に保持する際に使用する データベース、ストレージ、設定用ストレージetc...
USER 非ルートユーザへ変更
WORKDIR ワークディレクトリを設定 コマンドを実行する場所

VSCodeとの連携

Remote - Container

コンテナ内でVSCodeを使っているかのようにできる。
marketplace.visualstudio.com


実際にアプリケーションとしてデプロイする時はマルチステージビルドしてイメージを計量にしたり、実行ユーザーを変更したり、環境変数を整えたりしてから使う。