LoginSignup
0
0

More than 1 year has passed since last update.

DockerでDjango開発環境を作成する

Last updated at Posted at 2021-12-17

Docker、Djangoの環境構築はよく使うので自分用にメモ。
何かあればコメントください。

結論

下記Dockerfile、requirements.txtを作成する。

#pythonのバージョン3.7-alpineイメージを使用する
FROM python:3.7-alpine

#プロジェクトの管理者が誰かを記載する。
LABEL maintainer = "samplejp<sample.com>"

#標準出力に出力されるバッファを無効化する('1'じゃなくてもいい)
ENV PYTHONBUFFERED 1

#ソース側のマシンにあるrequirements.txtをImage側のマシンへコピーする。
COPY ./requirements.txt /requirements.txt

#pipコマンドを最新にし、requirements.txtファイル内のパッケージをpipインストールする。
RUN pip install --upgrade pip && pip install -r /requirements.txt

# appディレクトリを作成しappディレクトリに移動。
# ソース側のマシンにあるappフォルダをImage側のマシンへコピーする。
RUN mkdir /app
WORKDIR /app
COPY ./app /app

# "user"ユーザーを作成する。
RUN adduser -D user
# 以降のコマンドの実行者を"root"から"user"ユーザーに変更する。
USER user
requirements.txt
# Django3.1
Django==3.1

# 他にインストールしたいものがあればここに記載する。
# 例:pythonでMySQLに接続するためのドライバ
mysqlclient

解説

FROM python:3.7-alpine

pythonのバージョン3.7-alpineイメージを指定。
もしNumpyやscikit-learnを使いたい場合はalpineよりslimの方が適している。
他のLinuxディストリビューションについてはこちらを参照
https://www.ted027.com/post/docker-debian-difference/

MAINTAINER Aquariummer App Developer Ltd

プロジェクトの管理者が誰かを記載する。オプショナルなので、なくても動作するがあったほうが良い。
[2021/12/18追記]docker 1.13以降はMAINTAINERではなくLABELを使用したほうが良いとのこと。

LABEL maintainer = "samplejp <sample.com>"

COPY ./requirements.txt /requirements.txt

ソース側のマシンにあるrequirements.txtをImage側のマシンへコピーする。
ADDではなくCOPYを使用する理由

RUN pip install --upgrade pip && pip install -r /requirements.txt

pipコマンドを最新にし、requirements.txtファイル内のパッケージをpipインストールする。
pipコマンドを最新化する理由はパッケージ管理で生じるエラーのリスクを軽減するため。

RUN adduser -D user

"user"ユーザーを作成する。
ユーザー名はなんでも良い。
root権限で作業すると外部からファイルが閲覧可能な状態となる。
セキュリティ的によろしくないので一般ユーザーを作成し、場合によっては別途権限を付与する。
useraddコマンドを使用する場合は-mが必須
例:RUN useradd -m ${USER}
adduserとuseraddの違いはこちら
https://qiita.com/amedama/items/f45677cd944c42cde839
一言で言うとadduserは対話的、useraddは独話的。自動で立ち上げたいファイルは独和的にやったほうが楽なのでuseraddを使用したほうが楽。

USER user

コマンドの実行者を"root"から"user"ユーザーに変更する。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0