142
147

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Djangoの開発環境をDockerで作ってみた

Last updated at Posted at 2018-07-16

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の例では基本的なことしか行っていませんので、必要があれば足してください。

example
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と同じディレクトリに配置してください。

requirements.txt
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にアクセスしてみてください。
以下のような表示が出てくると思います。
Screenshot from 2018-07-16 21-58-27.png

これで、djangoの開発環境は整いました。
お疲れ様でしたw

#参考

142
147
2

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
142
147

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?