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

推薦する

新しい CSS display:box プロパティの詳細な説明

1. ディスプレイボックス;要素にこのプロパティを設定すると、display:inline-bloc...

CentOS7 での PostgreSQL 11 の詳細なインストールと設定のチュートリアル

1. 公式ウェブサイトアドレス公式サイトではインストールの参考手順が紹介されています。公式サイトを見...

フレックスレイアウトは、1行あたりの固定行数と適応レイアウトを実現します。

この記事では、1行あたりの固定行数+アダプティブレイアウトを実現するフレックスレイアウトを紹介し、皆...

TypeScript 環境を構築して VSCode にデプロイする詳細な手順

目次TypeScript環境の構築ステップ1: Taobaoミラーをダウンロードするステップ2: T...

JavaScript デザインパターン プロキシパターンの学習

目次概要実装保護エージェント仮想エージェント画像の遅延読み込みを実現する仮想プロキシ概要プロキシ パ...

フロントエンドAIカットのコツ(体験談)

AI 画像の切り取りは PS と連携する必要があります。まず、スライスするレイヤーを選択し、それを...

process.env.NODE_ENV 本番環境モードを設定する方法

始める前に、process.env.NODE_ENV にはデフォルトで開発と本番の 2 つの状態しか...

Linux 7.6 バイナリに MySQL 8.0.27 をインストールする詳細な手順

目次1. 環境整備1.1 オペレーティング システムのバージョン1.2 ディスク容量1.3 ファイア...

MySQL トランザクション自動コミット自動コミット操作

MySQL のデフォルトの動作モードは自動コミット モードです。つまり、明示的にトランザクションを開...

html2canvas で破線境界線を実装する例

html2canvas は、HTML 要素からキャンバスを生成するライブラリです。描画されるキャンバ...

Jmeterはデータベースプロセスダイアグラムに接続します

1. MySQL jdbc ドライバー (mysql-connector-java-5.1.28.j...

ウェブページのテキストデザインは、服を着た賢い女の子のようであるべきだ

<br />「この世に醜い女性はいない、あるのは怠惰な女性だけだ」これは女性の美のバイブ...

JavaScriptのvar let constの違いは何ですか?

目次1. 繰り返し宣言1.1 変数1.2 しましょう1.3 定数2. 可変プロモーション2.1 変数...

Linux システムの .bash_profile ファイルの詳細な説明

目次1. 環境変数$PATH: 2. 環境変数を変更します。 3. bash_profileの目的要...

Vueインスタンスで$refsを使用する際の注意点

開発の過程では、インスタンスの vm.$refs(this.$refs) を使用して、ref で登録...