3
3

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 3 years have passed since last update.

Djangoの環境をDocker使って作ってみますか

Posted at

転載元

当記事は以下ブログからの転載です。
TECH BACK

はじめに

前回、Windows10 Home環境にDockerのインストールができたので、早速Django環境を作っていこうかと。 Dockerのページに、解説ページがあったので、そちらを参考にすすめていきます。
http://docs.docker.jp/v1.9/compose/django.html

プロジェクトの構成ファイル郡を作りましょう

プロジェクト用のフォルダ作成

コチラは適当に。分かりやすいのを作っとけばOKでしょ。 こんなフォルダでいいかな~ E:\docker\django_env

Dockerfileってのを作りましょう

作ったフォルダの直下に、Dockerfileという拡張子無しのファイルを作成します。 Djangoが動くサーバ(コンテナ)の設定を記載していきます。 そして、開いて編集

FROM python:3.8
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt
ADD . /code/

Documentだと、Python2.7でしたけど、今から作るなら3系ですね。 Python公式だと、https://www.python.org/ 3.8が最新っぽかったので、そちらに変更。 ### requirements.txtを作成

またまた、作ったフォルダに requirements.txt というファイルを作りましょう。 今ファイルには、上記で作ったDjangoが動くコンテナに、使用するライブラリを記載していきます。Django環境を作る際にPipコマンドでインストールするものを、ここに記載しておきます。 内容は

<span class="n">Django
psycopg2</span>

で、保存しておきましょう。まずは、動かすだけなので、コレでOKです。

今度は、docker-compose.ymlってファイルを作成

同じく、作ったフォルダ直下にdocker-compose.yml というファイルを作成 内容は、

db:
  image: postgres
web:
  build: .
  command: python manage.py runserver 0.0.0.0:8000
  volumes:
    - .:/code
  ports:
    - 8000:8000
  links:
    - db

で、保存

ファイルの構成

今までの流れをやっていくと、こんな感じですね。 作ったフォルダの直下に、ファイルを3つ作りました。

Djangoプロジェクト作成

コマンドプロンプトで、先程作ったフォルダに移動します。 > コマンドプロンプトでドライブ移動 ちょっと脱線しちゃいますが、、、 え~どうやるんだっけ~って、なったので一応記載。

> C:\>e:
> 
> e:\>
> 

移動したら、こんな感じね。

e:\docker\django_env>dir

e:\docker\django_env のディレクトリ

2020/05/24 02:21 <DIR> .
2020/05/24 02:21 <DIR> ..
2020/05/24 02:23 168 docker-compose.yml
2020/05/24 01:48 151 Dockerfile
2020/05/24 02:20 16 requirements.txt
3 個のファイル 335 バイト
2 個のディレクトリ 713,117,704,192 バイトの空き領域

e:\docker\django_env>

そしてフォルダに移動したら、コマンドを実行しましょう。 ちなみに、最後の「composeexample 」という所がプロジェクト名ね。今回は、サンプルのままで。

docker-compose run web django-admin.py startproject composeexample .

各種ダウンロードしますんで、結構時間かかります。。。 そして、実行後にフォルダを覗いて見ると ちゃんと、composeexampleフォルダができてますね。

データベースに接続

composeexampleフォルダの下に、setting.pyがあるので、そいつを編集。 DATABASESの箇所をこんな感じに。

DATABASES = {
  'default': {
  'ENGINE': 'django.db.backends.postgresql_psycopg2',
  'NAME': 'postgres',
  'USER': 'postgres',
  'HOST': 'db',
  'PORT': 5432,
  }
}

で、保存

いよいよ、動かす

コマンドを実行

docker-compose up

あら、、エラーが

Starting django_env_db_1 ... done
Creating django_env_web_1 ... error

ERROR: for django_env_web_1 Cannot start service web: Cannot link to a non running container: /django_env_db_1 AS /django_env_web_1/db

ERROR: for web Cannot start service web: Cannot link to a non running container: /django_env_db_1 AS /django_env_web_1/db
ERROR: Encountered errors while bringing up the project.

django_env_db_1 が、動いてませんぜ~ってことですね。 Docker Dashboardを開いて、django_env_db_1 のLogsを見てみると、、 まずDBのInitializeしろと。

docker-compose.yml にパスワードを追記してやります。

db:
  image: postgres
<span style="color:">  environment:</span>
<span style="color:">   POSTGRES_PASSWORD: Password</span>
web:
  build: .
  command: python manage.py runserver 0.0.0.0:8000
  volumes:
   - .:/code
  ports:
   - 8000:8000
  links:
   - db

settings.py にも、パスワードを追加します。

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'postgres',
'USER': 'postgres',
'HOST': 'db',
'PORT': 5432,
<span style="color:">'PASSWORD': 'Password'</span>
}
}

そして、再度

docker-compose up

ん、、、、今度はうまく行ったみたい。

http://localhost:8000/ に、アクセスしてみると。。。

感想とか

ん~思ったより早く行ったな。といった感想。 自分でイチから環境作った時は、結構時間掛かった記憶。(もう二度とやりたくないとか、ちょっと思ってるぐらい) これなら、思い立ったら簡単にプロトタイプ作っちゃおうかな~とか思ったりできるよね。

今後

自分のLocal環境にはDocker環境できましたんで、 1. ちょっとしたサンプルアプリをLocalで開発
2. AWSにDocker受け入れ環境を作って、デプロイ!

って感じでやってみますかね。

3
3
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
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?