Dockerは、開発者とシステム管理者が軽量のコンテナーとしてどこにいてもアプリケーションを構築、パッケージ化、実行するためのオープンプラットフォームを提供するオープンソースプロジェクトです。 Dockerは、ソフトウェアコンテナ内のアプリケーションのデプロイを自動化します。
Djangoは、MVC(Model-View-Controller)アーキテクチャーに従うPythonで記述されたWebアプリケーションフレームワークです。これは無料で利用でき、オープンソースライセンスの下でリリースされます。高速で、開発者がアプリケーションをできるだけ早くオンラインにするのに役立つように設計されています。
このチュートリアルでは、Ubuntu16.04で既存のDjangoアプリケーションプロジェクトのDockerイメージを作成する方法を段階的に説明します。 Python Djangoアプリケーションのドッキングについて学習し、docker-composeスクリプトを使用してアプリケーションをコンテナーとしてdocker環境にデプロイします。
Python Djangoアプリケーションをデプロイするには、追加のDockerイメージが必要です。ウェブサーバー用のnginxdockerイメージと、データベース用のPostgreSQLイメージが必要です。
何をしますか?
- Docker-ceをインストールします
- Docker-composeをインストールします
- プロジェクト環境の構成
- ビルドして実行
- テスト
このチュートリアルでは、dockerリポジトリからdocker-ceコミュニティエディションをインストールします。作成ファイルバージョン3をサポートするdocker-ceコミュニティエディションとdocker-composeをインストールします。
docker-ceをインストールする前に、aptコマンドを使用して必要なdocker依存関係をインストールしてください。
sudo apt install -y \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
次に、以下のコマンドを実行して、Dockerキーとリポジトリを追加します。
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
リポジトリを更新し、docker-ceをインストールします。
sudo apt update
sudo apt install -y docker-ce
インストールが完了したら、Dockerサービスを開始し、システムの起動時に毎回起動できるようにします。
systemctl start docker
systemctl enable docker
次に、「omar」という名前の新しいユーザーを追加して、dockerグループに追加します。
useradd -m -s /bin/bash omar
usermod -a -G docker omar
omarユーザーとしてログインし、以下に示すようにdockerコマンドを実行します。
su - omar
docker run hello-world
Dockerからhello-worldメッセージを受け取るようにしてください。
Docker-ceのインストールが完了しました。
このチュートリアルでは、composeファイルバージョン3の最新のdocker-composeサポートを使用します。docker-composeを手動でインストールします。
最新バージョンのdocker-composeを使用してcurlコマンドを「/usr/ local / bin」ディレクトリにダウンロードし、chmodを使用して実行可能にします。
以下のコマンドを実行します。
sudo curl -L https://github.com/docker/compose/releases/download/1.21.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
次に、docker-composeバージョンを確認します。
docker-compose version
また、最新バージョンのdocker-compose1.21を入手してください。
docker-composeファイルバージョン3をサポートする最新バージョンがインストールされています。
このステップでは、PythonDjangoプロジェクト環境を構成します。新しいディレクトリ「guide01」を作成し、Dockerfile、Djangoプロジェクト、nginx構成ファイルなどのプロジェクトファイルのメインディレクトリにします。
'omar'ユーザーにログインします。
su - omar
新しいディレクトリ「guide01」を作成し、そのディレクトリに移動します。
mkdir -p guide01
cd guide01/
'guide01'ディレクトリ内に、新しいディレクトリ'project'と'config'を作成します。
mkdir project/ config/
注:
- ディレクトリ'プロジェクト':すべてのPythonDjangoプロジェクトファイルがそのディレクトリに配置されます。
- Directory'config':nginx構成ファイル、pythonpip要件ファイルなどを含むプロジェクト構成ファイルのディレクトリ。
次に、vimコマンドを使用して「config」ディレクトリ内に新しいファイル「requirements.txt」を作成します。
vim config/requirements.txt
以下の設定を貼り付けてください。
Django==2.0.4
gunicorn==19.7.0
psycopg2==2.7.4
保存して終了します。
Nginx仮想ホストファイルdjango.confを作成します
configディレクトリの下に、「nginx」構成ディレクトリを作成し、仮想ホスト構成ファイルdjango.confを追加します。
mkdir -p config/nginx/
vim config/nginx/django.conf
次の構成をそこに貼り付けます。
upstream web {
ip_hash;
server web:8000;
}
# portal
server {
location / {
proxy_pass http://web/;
}
listen 8000;
server_name localhost;
location /static {
autoindex on;
alias /src/static/;
}
}
保存して終了します。
Dockerfileを作成する
'guide01'ディレクトリ内に新しい'Dockerfile'を作成します。
以下のコマンドを実行します。
vim Dockerfile
次に、Dockerfileスクリプトを下に貼り付けます。
FROM python:3.5-alpine
ENV PYTHONUNBUFFERED 1
RUN apk update && \
apk add --virtual build-deps gcc python-dev musl-dev && \
apk add postgresql-dev bash
RUN mkdir /config
ADD /config/requirements.txt /config/
RUN pip install -r /config/requirements.txt
RUN mkdir /src
WORKDIR /src
保存して終了します。
注:
Linuxの最小サイズであるAlpineLinuxに基づいて、DjangoプロジェクトのDockerイメージをビルドしたいと考えています。 Djangoプロジェクトは、Python3.5がインストールされたAlpineLinuxを実行し、PostgreSQLデータベースをサポートするためのpostgresql-devパッケージを追加します。次に、python pipコマンドを使用して、「requirements.txt」ファイルにリストされているすべてのpythonパッケージをインストールし、プロジェクト用に新しい「/src」を作成します。
Docker-composeスクリプトを作成
以下のvimコマンドを使用して、「guide01」ディレクトリの下に「docker-compose.yml」ファイルを作成します。
vim docker-compose.yml
次の構成をそこに貼り付けます。
version: '3'
services:
db:
image: postgres:10.3-alpine
container_name: postgres01
nginx:
image: nginx:1.13-alpine
container_name: nginx01
ports:
- "8000:8000"
volumes:
- ./project:/src
- ./config/nginx:/etc/nginx/conf.d
depends_on:
- web
web:
build: .
container_name: django01
command: bash -c "python manage.py makemigrations && python manage.py migrate && python manage.py collectstatic --noinput && gunicorn hello_django.wsgi -b 0.0.0.0:8000"
depends_on:
- db
volumes:
- ./project:/src
expose:
- "8000"
restart: always
保存して終了します。
注:
このdocker-composeファイルスクリプトを使用して、3つのサービスを作成します。 PostgreSQL alpineLinuxを使用して「db」という名前のデータベースサービスを作成し、Nginx alpine Linuxを使用して「nginx」サービスを再度作成し、Dockerfileから生成されたカスタムdockerイメージを使用してpythonDjangoコンテナを作成します。
Djangoプロジェクトファイルを「project」ディレクトリにコピーします。
cd ~/django
cp -r * ~/guide01/project/
'project'ディレクトリに移動し、アプリケーション設定'settings.py'を編集します。
cd ~/guide01/project/
vim hello_django/settings.py
注:
'hello_django'アプリと呼ばれる単純なDjangoアプリケーションをデプロイします。
「ALLOW_HOSTS」行に、サービス名「web」を追加します。
ALLOW_HOSTS = ['web']
次に、データベース設定を変更します。デフォルトのユーザーとパスワードで「db」という名前のサービスとして実行されるPostgreSQLデータベースを使用します。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'postgres',
'USER': 'postgres',
'HOST': 'db',
'PORT': 5432,
}
}
また、「STATIC_ROOT」構成ディレクトリの場合は、この行をファイルの行の最後に追加します。
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
保存して終了します。
これで、Dockerコンテナの下でDjangoプロジェクトをビルドして実行する準備が整いました。
このステップでは、「guide01」ディレクトリの構成を使用して、DjangoプロジェクトのDockerイメージをビルドします。
'guide01'ディレクトリに移動します。
cd ~/guide01/
次に、docker-composeコマンドを使用してdockerイメージをビルドします。
docker-compose build
docker-composeスクリプト内ですべてのサービスを開始します。
docker-compose up -d
DockerがPythonイメージをビルドし、nginxおよびpostgresqldockerイメージをダウンロードするまで数分待ちます。
完了したら、次のコマンドを使用して、実行中のコンテナーを確認し、システム上のDockerイメージを一覧表示します。
docker-compose ps
docker-compose images
これで、以下に示すように、3つのコンテナーが実行され、システム上のDockerイメージのリストが表示されます。
Python DjangoアプリケーションがDockerコンテナ内で実行され、サービスのDockerイメージが作成されました。
ウェブブラウザを開き、ポート8000でサーバーアドレスを入力します。私のものは次のとおりです。 http:// ovh01:8000 /
これで、デフォルトのDjangoホームページが表示されます。
次に、URLに「/admin」パスを追加して管理ページをテストします。
http:// ovh01:8000 / admin /
そして、Django管理者ログインページが表示されます。
DockerizingPythonDjangoアプリケーションは正常に完了しました。