開発をしているといろんなモジュール、言語のバージョンなどなどが混合し自分のPCの状態がどうなってるか把握しづらくなってきますよね。そんな時は仮想環境を使いましょう。今回はDjangoでWebアプリケーションを作りたいという方向けにDockerで開発環境を作成する方法をまとめました!

(2019-10-13追記)nginxを入れて環境構築する方法を知りたい方はこちらの記事を参照してください。

前提

  • ホスト環境はMac
  • Dockerはすでにインストールされている

Dockerイメージ作成

ではまずPython + Djangoを使うためのDockerのイメージを作成していきましょう。

requirements.txt

django

Dockerfile

FROM python:3.7.4-alpine3.10 RUN mkdir -p /my_project ENV APP_PATH /my_project COPY requirements.txt $APP_PATH/ RUN pip install --no-cache-dir -r $APP_PATH/requirements.txt WORKDIR $APP_PATH
Code language: PHP (php)

やってること

  • 容量が少ない `alpine`を使用
  • requirementsに書いてあるモジュール群をインストール

イメージ作成実行

$ docker build -t my_app_django ./ Sending build context to Docker daemon 3.072kB Step 1/6 : FROM python:3.7.4-alpine3.10 ---> 930a7e894675 Step 2/6 : RUN mkdir -p /my_project ---> Running in f8217642fe43 Removing intermediate container f8217642fe43 ---> 1c6b25ab7d4f Step 3/6 : ENV APP_PATH /my_project ---> Running in 7bb92b8b8af3 Removing intermediate container 7bb92b8b8af3 ---> 53a2ccacc2b8 Step 4/6 : COPY requirements.txt $APP_PATH/ ---> ff35cbd63cc1 Step 5/6 : RUN pip install --no-cache-dir -r $APP_PATH/requirements.txt ---> Running in 21426a8d8c92 Collecting django (from -r /my_project/requirements.txt (line 1)) Downloading https://files.pythonhosted.org/packages/d6/57/66997ca6ef17d2d0f0ebcd860bc6778095ffee04077ca8985928175da358/Django-2.2.4-py3-none-any.whl (7.5MB) Collecting sqlparse (from django->-r /my_project/requirements.txt (line 1)) Downloading https://files.pythonhosted.org/packages/ef/53/900f7d2a54557c6a37886585a91336520e5539e3ae2423ff1102daf4f3a7/sqlparse-0.3.0-py2.py3-none-any.whl Collecting pytz (from django->-r /my_project/requirements.txt (line 1)) Downloading https://files.pythonhosted.org/packages/87/76/46d697698a143e05f77bec5a526bf4e56a0be61d63425b68f4ba553b51f2/pytz-2019.2-py2.py3-none-any.whl (508kB) Installing collected packages: sqlparse, pytz, django Successfully installed django-2.2.4 pytz-2019.2 sqlparse-0.3.0 Removing intermediate container 21426a8d8c92 ---> f2729b15bccd
Code language: JavaScript (javascript)

これでイメージが作成されました。確認してみましょう。

$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE my_app_django latest 06ba9479513d About a minute ago 129MB

my_app_djangoというイメージの作成が完了です。では次にコンテナ立ち上げ + Djangoプロジェクトの作成を行なっていきます。

$ docker run --rm --mount type=bind,src=$(pwd),dst=/my_project my_app_django:latest django-admin startproject this_is_my_app_name .
Code language: JavaScript (javascript)

lsしてみてください。新しくファイルが自動生成されていますよね。

$ ls Dockerfile manage.py requirements.txt this_is_my_app_name

これでdjangoプロジェクトらしくなってきましたね。では次にサーバをdockerで立ち上げて、ブラウザからアクセスできるようにします。後々のことを考えてここでは docker-composeを使ってやってみたいと思います。

docker-compose

version: '3.7' services: django: restart: always build: . volumes: - ./:/projects command: /bin/sh -c "cd /projects; python manage.py migrate; python manage.py runserver 0:8000" ports: - 8000:8000
Code language: PHP (php)

次のコマンドを実行してください。初回なので –buildを付与しています。

$ docker-compose up --build Creating network "django_docker_default" with the default driver Building django Step 1/6 : FROM python:3.7.4-alpine3.10 ---> 930a7e894675 Step 2/6 : RUN mkdir -p /my_project ---> Using cache ---> 1c6b25ab7d4f Step 3/6 : ENV APP_PATH /my_project ---> Using cache ---> 53a2ccacc2b8 Step 4/6 : COPY requirements.txt $APP_PATH/ ---> dc03e341253c Step 5/6 : RUN pip install --no-cache-dir -r $APP_PATH/requirements.txt ---> Running in dabcff60e15a Collecting django (from -r /my_project/requirements.txt (line 1)) Downloading https://files.pythonhosted.org/packages/d6/57/66997ca6ef17d2d0f0ebcd860bc6778095ffee04077ca8985928175da358/Django-2.2.4-py3-none-any.whl (7.5MB) Collecting sqlparse (from django->-r /my_project/requirements.txt (line 1)) Downloading https://files.pythonhosted.org/packages/ef/53/900f7d2a54557c6a37886585a91336520e5539e3ae2423ff1102daf4f3a7/sqlparse-0.3.0-py2.py3-none-any.whl Collecting pytz (from django->-r /my_project/requirements.txt (line 1)) Downloading https://files.pythonhosted.org/packages/87/76/46d697698a143e05f77bec5a526bf4e56a0be61d63425b68f4ba553b51f2/pytz-2019.2-py2.py3-none-any.whl (508kB) Installing collected packages: sqlparse, pytz, django Successfully installed django-2.2.4 pytz-2019.2 sqlparse-0.3.0 Removing intermediate container dabcff60e15a ---> 27d017bbd646 Step 6/6 : WORKDIR $APP_PATH ---> Running in 4d94101e1637 Removing intermediate container 4d94101e1637 ---> 24508d432658 Successfully built 24508d432658 Successfully tagged django_docker_django:latest Creating django_docker_django_1 ... done Attaching to django_docker_django_1 django_1 | Operations to perform: django_1 | Apply all migrations: admin, auth, contenttypes, sessions django_1 | Running migrations: django_1 | Applying contenttypes.0001_initial... OK django_1 | Applying auth.0001_initial... OK django_1 | Applying admin.0001_initial... OK django_1 | Applying admin.0002_logentry_remove_auto_add... OK django_1 | Applying admin.0003_logentry_add_action_flag_choices... OK django_1 | Applying contenttypes.0002_remove_content_type_name... OK django_1 | Applying auth.0002_alter_permission_name_max_length... OK django_1 | Applying auth.0003_alter_user_email_max_length... OK django_1 | Applying auth.0004_alter_user_username_opts... OK django_1 | Applying auth.0005_alter_user_last_login_null... OK django_1 | Applying auth.0006_require_contenttypes_0002... OK django_1 | Applying auth.0007_alter_validators_add_error_messages... OK django_1 | Applying auth.0008_alter_user_username_max_length... OK django_1 | Applying auth.0009_alter_user_last_name_max_length... OK django_1 | Applying auth.0010_alter_group_name_max_length... OK django_1 | Applying auth.0011_update_proxy_permissions... OK django_1 | Applying sessions.0001_initial... OK django_1 | Watching for file changes with StatReloader
Code language: JavaScript (javascript)

ここまで来たらOKです。では実際にアクセスできるかブラウザで localhost:8000を開いてみてください。下のような画面が出て来たら成功です!

最後まで読んでいただきありがとうございました!

By user