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はカルーセルのフレームレート再生を実装します

推薦する

vue-element-adminフレームワークを使用して、バックエンドからメニュー機能を動的に取得します。

目次2. 詳しい説明2.1. asyncRoutesルーティングを追加する2.2. 新しいpermi...

Dockerの高可用性構成の詳細な説明

Docker の作成Docker Compose は、管理対象コンテナをプロジェクト、サービス、コン...

Vue3 (パート 2) Ant Design Vue の統合

目次1. Ant Design Vueを統合する2. コンポーネントの使用1. 完全な引用2. コン...

CentOS7 で MySQL 5.7.24 をコンパイルしてインストールする詳細なチュートリアル

目次依存関係をインストールするブーストをインストールMySQLをコンパイルしてインストールする構成依...

MySQLの詳細な説明Explain

日常業務では、実行に時間のかかる SQL ステートメントを記録するために、スロー クエリを実行するこ...

Linux ディスクデバイスと LVM 管理コマンドの詳細な例

序文Linux オペレーティング システムでは、デバイス ファイルは特別なタイプのファイルです。これ...

vue+django でファイルをダウンロードする例

目次1. 概要2. Django プロジェクト3. Vueプロジェクト1. 概要プロジェクトで、ダウ...

vue+element カスタムクエリコンポーネント

この記事では主に Vue プロジェクトを紹介します。要素の導入を前提として、コンポーネントを 2 回...

MacでMysqlのルートパスワードを忘れた場合の解決方法

長い間コンピューターで mysql を使用していなかったので、パスワードを忘れてしまいました。でも、...

MySQL における or、in、union、インデックス最適化の詳細な分析

この記事は、「1 分でインデックス作成スキルを学ぶ」という宿題から生まれました。注文ビジネス テーブ...

MySQL 5.7 解凍版のインストール、アンインストール、および文字化けしたコードの問題のグラフィック解決

1. 解凍版のインストール(1)圧縮パッケージをダウンロードし、ディスクの場所に解凍します。圧縮パッ...

CSS で text-align と margin: 0 auto を使用して中央に配置する例コード

CSSでtext-align、margin: 0 autoを使用して中央揃えにするtext-alig...

Webデザインチュートリアル(1):手順と全体レイアウト

<br />注:ウェブサイトの種類を示すものを除くすべてのテキストは、企業サイト用です。...

HTML マルチヘッダーテーブルコード

1. マルチヘッダーテーブルコードコードをコピーコードは次のとおりです。 <!DOCTYPE ...