pythonを使用した開発環境はpipenvやvenvなどを使用すれば簡単に構築できますが、
今回はDockerを使って、Ubuntu上にdjangoの開発環境を作ってみようと思います。
#前提
Dockerはインストール済み、Dockerのコマンドは使用経験があると想定して、それらの説明は省きます。
#環境
- Ubuntu 18.04
- python 3.6.5
- django 2.0.7
#構築
##ディレクトリ構成
構築前のディレクトリ構成は以下のようにします。
.
├── Dockerfile
├── requirements.txt
└── src # ソース用のディレクトリ
srcディレクトリはコンテナにマウントさせてホストと共有します。
##Dockerfileの作成
pythonはDocker Hubにオフィシャルのものがありますが、今回はあえてUbuntu上に作成するためpipのインストールなどが必要になります。
以下のDockerfileの例では基本的なことしか行っていませんので、必要があれば足してください。
FROM ubuntu:18.04
RUN apt-get -y update \
&& apt-get -y upgrade \
&& apt-get install -y locales curl python3-distutils \
&& curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py \
&& python3 get-pip.py \
&& pip install -U pip \
&& mkdir /code \
&& rm -rf /var/lib/apt/lists/* \
&& localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8
ENV LANG en_US.utf8
WORKDIR /code
ADD requirements.txt /code
RUN pip install -r requirements.txt # requirements.txtからパッケージのインストール
##requirements.txtの作成
djangoの開発に必要なパッケージをrequirements.txtに書きます。
また、requirements.txtはDockerfileと同じディレクトリに配置してください。
django
##イメージの作成
では、作成したDockerfileとrequirements.txtを基にイメージをビルドしていきしょう。
イメージ名はdjango
とします。
$ docker build -t django .
イメージの作成が終わったら、ちゃんとイメージができたか確認します。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
django latest xxxxxxxxx xxxxxxx xxxx
REPOSITORYの項目にdjango
という表示があれば成功です。
もしnone
だったり、ビルドの段階でエラーが起こったらDockerfileを見直して修正してください。
##コンテナの起動
作成したdjango
イメージをもとにコンテナを作成して起動させてみましょう。
djangoの開発用のサーバを動かすのを想定して、オプション-p
を使用してホストの8000番からコンテナの8000番へポートフォワーディングするようにします。
そしてホストとコンテナでsrcディレクトリを共有させたいので、オプション-v
を使用してマウントさせます。
作成するコンテナの名前はtest
とします。
$ docker run -itd -p 127.0.0.1:8000:8000 -v /path/to/src:/code --name test django
では、コンテナがちゃんと作成されて起動しているか確認します。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS ls PORTS NAMES
xxxxxxxxxxxx django "/bin/bash" xxxxxxxxx Up xxxxxx 127.0.0.1:8000->8000/tcp test
##djangoプロジェクトの作成
普通にプロジェクトを作成すると以下のような構成になってしますので、プロジェクトをsrcディレクトリに展開されるようにします。
src
└── project
├── manage.py
└── project
├── __init__.py
プロジェクト名はdjango-test
とでもしましょう。
$ cd src
$ docker exec test django-admin startproject django-test .
末尾のドットは忘れないようにしましょう。
ドットをつけることで上記のような入れ子構造になるのを防ぎます。
プロジェクトが作成できたら以下のような構成になります。
src
├── manage.py
└── django-test
├── __init__.py
├── __pycache__
│ ├── __init__.cpython-36.pyc
│ └── settings.cpython-36.pyc
├── settings.py
├── urls.py
└── wsgi.py
##djangoアプリの作成
todo
というアプリを作成します。
$ pwd
/path/to/src
$ docker exec test python3 manage.py startapp todo
これで一通り開発環境が出来上がりました。
最終的なディレクトリ構成は以下のようになります。
.
├── Dockerfile
├── requirements.txt
└── src
├── manage.py
├── todo
│ ├── admin.py
│ ├── apps.py
│ ├── __init__.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
└── django-test
├── __init__.py
├── __pycache__
│ ├── __init__.cpython-36.pyc
│ └── settings.cpython-36.pyc
├── settings.py
├── urls.py
└── wsgi.py
##開発用サーバを起動
最後にdjangoの開発用のサーバを起動させてみましょう。
$ docker exec test python3 manage.py runserver 0.0.0.0:8000
ブラウザでlocalhost:8000
にアクセスしてみてください。
以下のような表示が出てくると思います。
これで、djangoの開発環境は整いました。
お疲れ様でしたw
#参考