【Python】使用Docker构建Django开发环境

使用Docker和Docker-compose,构建Django和postgreSQL的开发环境,直到访问http://localhost:8000并显示下图的界面为止。

スクリーンショット 2020-08-28 13.44.31.png

Django安装

如果您已经安装了Django,则不需要再做任何操作。

pip install Django

安装Docker

从这里开始安装Docker

确认版本

$ docker --version
Docker version 18.09.2

安装Docker-compose

使用以下的命令来安装Docker-compose。

$ curl -L https://github.com/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

$ chmod +x /usr/local/bin/docker-compose

确认版本

$ docker-compose --version
docker-compose version 1.23.2

创建一个用于Django的目录。

$ mkdir docker-demo-with-django && cd docker-demo-with-django
$ mkdir app && cd app

在app中创建Pipfile文件

$ vi Pipfile

/app/Pipfile 可以用中文簡短地描述為一個應用程式的 Pipfile 文件。

[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]

[packages]
Django = "==3.1"

[requires]
python_version = "3.7.5"

引入pipenv

请使用以下命令进行安装并登录。

$ pip install pipenv
$ pipenv install
$ pipenv shell

开始Django项目

用以下的命令,从项目开始到服务器启动进行操作。

$ django-admin.py startproject django_demo .
$ python manage.py migrate
$ python manage.py runserver

构建Docker容器

接下来,我们开始进行Docker容器的设置。

Dockerfile:Docker文件

创建Dockerfile。

$ vi Dockerfile

应用程序/ Dockerfile

# 公式からpython3.7 on alpine linuxイメージをpull
FROM python:3.7-alpine

# 作業ディレクトリを設定
WORKDIR /usr/src/app

# 環境変数を設定
# Pythonがpyc filesとdiscへ書き込むことを防ぐ
ENV PYTHONDONTWRITEBYTECODE 1
# Pythonが標準入出力をバッファリングすることを防ぐ
ENV PYTHONUNBUFFERED 1

# psycopg2のインストール
RUN apk update \
    && apk add --virtual build-deps gcc python3-dev musl-dev \
    && apk add postgresql-dev \
    && pip install psycopg2 \
    && apk del build-deps

# Pipenvをインストール
RUN pip install --upgrade pip \
&& pip install pipenv

# ホストのpipfileをコンテナの作業ディレクトリにコピー
COPY ./Pipfile /usr/src/app/Pipfile

# pipfileからパッケージをインストールしてDjango環境を構築
RUN pipenv install --skip-lock --system --dev

# ホストのカレントディレクトリ(現在はappディレクトリ)を作業ディレクトリにコピー
COPY . /usr/src/app/

# entrypoint.shを実行
ENTRYPOINT ["/usr/src/app/entrypoint.sh"]                 

创建docker-compose.yml文件

vi ./../docker-compose.yml

docker-demo-with-django/docker-compose.yml 的中文释义如下:
Docker演示与Django的docker-compose配置文件。

version: '3.7'

services:
    # サービス名は自由に設定
    django:
        # appディレクトリの中から`Dockerfile`を探す
        build: ./app
        # サービス起動後に入力されるコマンドを設定
        command: python manage.py runserver 0.0.0.0:8000
        # データを永続化させる場合の設定。`host:container`でパスを記載
        volumes:
            - ./app/:/usr/src/app/
        # 開放するポートを指定。`host:container`でポートを記載
        ports:
            - 8000:8000
        # 環境変数を指定
        environment:
            # 1ならデバックモード
            - DEBUG=1
            - SECRET_KEY=hoge
            - DATABASE_ENGINE=django.db.backends.postgresql
            - DATABASE_DB=django_db
            - DATABASE_USER=django_db_user
            - DATABASE_PASSWORD=password1234
            - DATABASE_HOST=postgres
            - DATABASE_PORT=5432
        # 接続するサービスを指定
        depends_on:
            - postgres

    postgres:
        # 公式からイメージをpull
        image: postgres:11.4-alpine
        # データベースの永続化
        # ホストのディレクトリにマウントしない様に、先頭に`./`をつけない
        volumes:
            - postgres_data:/var/lib/postgresql/data
        # su権限を持つ、指定されたユーザーと同じ名前のデータベースを作成
        # valueはdjangoサービスで指定したものと同じ様に記載する
        environment:
            - POSTGRES_USER=django_db_user
            - POSTGRES_PASSWORD=password1234
            - POSTGRES_DB=django_db

# トップレベルに書く「名前付きvolumes」は複数サービスから参照できる
volumes:
    postgres_data:         
#!/bin/sh

if [ "$DATABASE" = "postgres" ]
then
    echo "Waiting for postgres..."

    while ! nc -z $DATABASE_HOST $DATABASE_PORT; do
      sleep 0.1
    done

    echo "PostgreSQL started"
fi

python manage.py flush --no-input
python manage.py migrate

exec "$@"

构建和启动

$ docker-compose up -d --build

连接到以下URL,如果连接成功,则表示构建完成
http://localhost:8000

广告
将在 10 秒后关闭
bannerAds