Python Django アプリケーションを Docker 化する方法

Python Django アプリケーションを Docker 化する方法

Docker は、開発者やシステム管理者がアプリケーションを軽量コンテナとして構築およびパッケージ化し、どこでも実行するためのオープン プラットフォームを提供するオープン ソース プロジェクトです。 Docker は、ソフトウェア コンテナー内のアプリケーションの展開を自動化します。
Django は、MVC (モデル - ビュー - コントローラ) アーキテクチャに準拠した Python で書かれた Web アプリケーション フレームワークです。無料で、オープンソースライセンスに基づいてリリースされています。高速で、開発者ができるだけ早くアプリをオンラインにできるように設計されています。
このチュートリアルでは、Ubuntu 16.04 で既存の Django アプリケーション用の Docker イメージを作成する方法を段階的に説明します。 Python Django アプリケーションを Docker 化し、docker-compose スクリプトを使用してアプリケーションをコンテナーとして Docker 環境にデプロイする方法を学習します。
Python Django アプリケーションをデプロイするには、Web サーバー用の nginx Docker イメージとデータベース用の PostgreSQL イメージという他の Docker イメージが必要です。

私たちは何をすべきでしょうか?

  1. Docker-ceをインストールする
  2. Docker-composeをインストールする
  3. プロジェクト環境を構成する
  4. ビルドして実行する
  5. テスト

ステップ1 - Docker-ceをインストールする

このチュートリアルでは、docker リポジトリから docker-ce コミュニティ エディションをインストールします。 docker-ce コミュニティ エディションと docker-compose (compose ファイルのバージョン 3 をサポート) をインストールします。

docker-ce をインストールする前に、apt コマンドを使用して必要な docker 依存関係をインストールします。

sudo apt インストール -y
apt-トランスポート-https
ca証明書
カール
ソフトウェアプロパティ共通

次のコマンドを実行して、docker キーとリポジトリを追加します。

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key を追加 -
sudo aptリポジトリを追加します
"deb [arch=amd64] https://download.docker.com/linux/ubuntu
$(lsb_release -cs)
安定した"

Docker-ceをインストールする

リポジトリを更新し、docker-ce をインストールします。

sudo aptアップデート
sudo apt install -y docker-ce

インストールが完了したら、docker サービスを開始し、システムの起動時に毎回起動するようにします。

systemctl ドッカーを起動する
systemctl ドッカーを有効にする

次に、omar という名前の新しいユーザーを追加し、docker グループに追加します。

ユーザー追加 -m -s /bin/bash オマール
ユーザーmod -a -G docker オマール

Dockerを起動する

omarユーザーとしてログインし、以下のようにdockerコマンドを実行します。

スオマール
docker で hello-world を実行する

Dockerからhello-worldメッセージが届くことを確認する

Dockerのインストールを確認する

Docker-ceのインストールが完了しました。

ステップ2 - Docker-composeをインストールする

このチュートリアルでは、compose ファイルのバージョン 3 をサポートする最新の docker-compose を使用します。 docker-composeを手動でインストールします

curl コマンドを使用して、docker-compose の最新バージョンを /usr/local/bin ディレクトリにダウンロードし、chmod コマンドを使用して実行権限を付与します。

次のコマンドを実行します。

sudo カール -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-composeの最新バージョンがインストールされていることを確認してください: 1.21

Docker-composeをインストールする

Compose ファイルのバージョン 3 をサポートする最新バージョンの docker-compose がインストールされています。

ステップ3 - プロジェクト環境を構成する

このステップでは、Python Django プロジェクト環境を構成します。新しいディレクトリ guide01 を作成し、それを Dockerfile、Django プロジェクト、nginx 構成ファイルなどのプロジェクト ファイルのメイン ディレクトリにします。

omar ユーザーにログインします。

su - omar

新しいディレクトリ guide01 を作成し、そこに移動します。

mkdir -p ガイド01
CDガイド01/

次に、guide01 ディレクトリに、project と config という 2 つの新しいディレクトリを作成します。

mkdir プロジェクト/ config/

知らせ:

  • プロジェクト ディレクトリ: すべての Python Django プロジェクト ファイルはこのディレクトリに配置されます。
  • config ディレクトリ: nginx 構成ファイル、python pip の requirements.txt ファイルなどを含むプロジェクト構成ファイルのディレクトリ。

新しい requirements.txt ファイルを作成する

次に、vim コマンドを使用して、config ディレクトリに新しい requirements.txt ファイルを作成します。

vim config/要件.txt

次の設定を貼り付けます。

ジャンゴ==2.0.4
グニコーン==19.7.0
サイコップ2==2.7.4

保存して終了します。

Nginx仮想ホストファイルdjango.confを作成する
config ディレクトリの下に nginx 構成ディレクトリを作成し、仮想ホスト構成ファイル django.conf を追加します。

mkdir -p config/nginx/
vim config/nginx/django.conf

次の設定を貼り付けます。

上流ウェブ{
ip_ハッシュ;
サーバー web:8000;
}
#ポータル
サーバー{
位置 / {
プロキシパス http://web/;
}
8000を聴く;
server_name ローカルホスト;
場所 /static {
自動インデックスオン;
エイリアス /src/static/;
}
}

保存して終了します。

Dockerfileを作成する
guide01 ディレクトリに新しいファイル Dockerfile を作成します。

次のコマンドを実行します。

vim Dockerfile

次に、次の Dockerfile スクリプトを貼り付けます。

python:3.5-alpine より
環境変数 PYTHONUNBUFFERED 1
apkアップデートを実行&&
apk に --virtual build-deps gcc python-dev musl-dev && を追加します
apk postgresql-dev bash を追加
mkdir /configを実行します
/config/requirements.txt /config/ を追加します。
pip install -r /config/requirements.txt を実行します。
mkdir /src を実行
ワークディレクトリ /src

保存して終了します。

知らせ:

最小限の Linux ディストリビューションである Alpine Linux をベースに、Django プロジェクト用の Docker イメージを構築したいと考えています。私たちの Django プロジェクトは、Python 3.5 を搭載した Alpine Linux 上で実行され、PostgreSQL データベースをサポートするために postgresql-dev パッケージが追加されます。次に、python pip コマンドを使用して requirements.txt にリストされているすべての Python パッケージをインストールし、プロジェクト用の新しいディレクトリ /src を作成します。

Docker-compose スクリプトを作成する

vim コマンドを使用して、guide01 ディレクトリに docker-compose.yml ファイルを作成します。

vim docker-compose.yml

次の構成コンテンツを貼り付けます。

バージョン: '3'
サービス:
デシベル:
イメージ: postgres:10.3-alpine
コンテナ名: postgres01
nginx:
イメージ: nginx:1.13-alpine
コンテナ名: nginx01
ポート:
- 「8000:8000」
ボリューム:
- ./プロジェクト:/src
nginx の設定ファイルは次のようになります。
依存:
- ウェブ
ウェブ:
建てる: 。
コンテナ名: django01
コマンド: bash -c "p​​ython manage.py makemigrations && python manage.py migrate && python manage.py collectstatic --noinput && gunicorn hello_django.wsgi -b 0.0.0.0:8000"
依存:
-db
ボリューム:
- ./プロジェクト:/src
さらす:
- 「8000」
再起動: 常に

保存して終了します。

知らせ:

この docker-compose ファイル スクリプトを使用して、3 つのサービスを作成します。 alpine Linux バージョンの PostgreSQL を使用して db という名前のデータベース サービスを作成し、alpine Linux バージョンの Nginx を使用して再度 nginx サービスを作成し、Dockerfile から生成されたカスタム Docker イメージを使用して Python Django コンテナーを作成します。

プロジェクト環境を構成する

Django プロジェクトの設定

Django プロジェクト ファイルをプロジェクト ディレクトリにコピーします。

cd ~/django
cp -r * ~/guide01/プロジェクト/

プロジェクト ディレクトリに移動し、アプリケーション設定の settings.py を編集します。

cd ~/guide01/project/
vim hello_django/settings.py

知らせ:

「hello_django」という名前のシンプルな Django アプリケーションをデプロイします。

ALLOW_HOSTS 行に、サービス名 web を追加します。

ALLOW_HOSTS = ['web']

次に、データベース設定を変更します。PostgreSQL データベースを使用して、デフォルトのユーザー名とパスワードで db というサービスを実行します。

データベース = {
'デフォルト': {
'エンジン': 'django.db.backends.postgresql_psycopg2',
'名前': 'postgres',
'ユーザー': 'postgres',
'ホスト': 'db',
「ポート」: 5432,
}
}

STATIC_ROOT 構成ディレクトリについては、ファイルの末尾にこの行を追加します。

STATIC_ROOT = os.path.join(BASE_DIR, 'static/')

保存して終了します。

Django プロジェクトの設定

これで、Docker コンテナで Django プロジェクトをビルドして実行する準備が整いました。

ステップ4 - Dockerイメージをビルドして実行する

このステップでは、guide01 ディレクトリの設定を使用して、Django プロジェクト用の Docker イメージを構築します。

guide01ディレクトリに入ります。

cd ~/guide01/
次に、docker-compose コマンドを使用して Docker イメージをビルドします。

docker-compose build

Dockerイメージを実行する

docker-compose スクリプト内のすべてのサービスを開始します。

docker-compose up -d

Docker が Python イメージをビルドし、nginx および postgresql の Docker イメージをダウンロードするまで数分待ちます。

docker-composeを使用してイメージをビルドする

完了したら、次のコマンドを使用して実行中のコンテナを確認し、システム上の Docker イメージを一覧表示します。

docker-compose ps
docker-compose イメージ

これで、システム上で 3 つのコンテナーが実行され、以下に示すように Docker イメージがリストされます。

docke-compose ps コマンド

Python Django アプリケーションは現在、docker コンテナ内で実行されており、それを提供するための docker イメージが作成されています。

ステップ5 - テスト

Web ブラウザを開き、ポート 8000 のサーバー アドレスを入力します。私の場合は http://ovh01:8000/ です。

これで、デフォルトの Django ホームページが表示されます。

デフォルトの Django プロジェクトのホームページ

次に、URL に /admin パスを追加して管理ページをテストします。

http://ovh01:8000/admin/

Django 管理者ログイン ページが表示されます。

Django 管理

Python Django アプリケーションの Docker 化が正常に完了しました。

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • Docker で Django アプリケーションをデプロイする例
  • Docker実践: Pythonアプリケーションのコンテナ化
  • docker django が redis コンテナにアクセスできない問題の解決方法

<<:  Linux インストール MySQL チュートリアル (バイナリ配布)

>>:  Vueはカルーセルのフレームレート再生を実装します

推薦する

Docker-compose ネットワークの詳細な例

今日は Docker でのネットワーク設定を試し、後で忘れないようにプロセスを記録しました。 (シス...

サーバー上で selenium+chromedriver を実行するための詳細なチュートリアル

1. はじめにSelenium を使用して Web サイトからデータをスクレイピングしたいのですが、...

CSS インライン スタイル、埋め込みスタイル、外部参照スタイルを使用する 3 つの方法

3 つの方法を使用する簡単な例は次のとおりです。インラインスタイル: <!doctypehtm...

ウェブサイトメンテナンスページのリスト構築のヒント

また、多くの場合、メンテナンスのために Web サイトを少なくとも数分間オフラインにする必要がありま...

VMware+centOS 8 で http プロトコルに基づく Git サービスを構築する方法

目次1. 原因2. デバイス情報3. 準備4. Apacheをインストールする5. gitを設定する...

TypeScript ジェネリックパラメータのデフォルト型と新しい厳密なコンパイルオプション

目次概要コンポーネントクラスの型定義を作成するジェネリック型を使用してPropsとStateを定義す...

NexusはHTTPSプロトコルをサポートするためにnginxプロキシを使用します

背景すべての会社の Web サイトは HTTPS プロトコルをサポートする必要があります。Aliba...

ウェブページを最適化してメモリとCPUの使用率を削減

一部の Web ページは大きく見えなくても開くのに非常に時間がかかる場合があります。一方、他の We...

Dockerでローカルマシン(ホストマシン)にアクセスする方法

質問Docker でローカル データベースにアクセスするにはどうすればよいでしょうか? 127.0....

MySQL NULLがピットを引き起こした

比較演算子でNULLを使用する mysql> 1>NULLを選択します。 +------...

Linux ifconfig コマンドの使用

1. コマンドの紹介ifconfig (ネットワーク インターフェイスを構成する) コマンドは、ネッ...

MySQLで重複行を削除する方法

SQL文 /* MySQL で重複行を削除するいくつかの方法 ---Chu Minfei ---20...

HTML 5 スタイルシートのリセット

この CSS リセットは、Eric Meyers の CSS リセットに基づいて変更されており、特に...

メタを使用してトラフィックキャッシュをキャンセルし、ページにアクセスするたびにページを更新して簡単にデバッグできるようにします。

コードをコピーコードは次のとおりです。 <!-- ブラウザがローカル キャッシュからページにア...