paint-brush
Django アプリケーションを Docker 化してデプロイする技术 に@abrahamdahunsi
11,380 測定値
11,380 測定値

Django アプリケーションを Docker 化してデプロイする方法

Abraham Dahunsi 15m2023/10/14
Read on Terminal Reader

長すぎる; 読むには

このチュートリアルでは、Docker、Django、および Heroku を使用して Django アプリケーションを Docker 化してデプロイする方法を学習しました。 Docker がアプリケーション用に分離された再現可能な環境を作成するのにどのように役立つか、また Heroku がどのようにデプロイメントプロセスを簡素化できるかを見てきました。 また、Docker Compose を使用して複数のコンテナーとサービスを管理する方法と、さまざまな環境に合わせて Django 設定を構成する方法についても学習しました。
featured image - Django アプリケーションを Docker 化してデプロイする方法
Abraham Dahunsi  HackerNoon profile picture
0-item
1-item
Docker は、アプリケーションを構築、実行、配布するためのプラットフォームです。これにより、アプリケーションとそのすべての依存関係を 1 つのコンテナーにパッケージ化し、Docker がインストールされている相同のマシン上で実行できるようになります。


これにより、互換性の問題を気にせずにアプリケーションをある環境から別の環境に簡単に移動できるため、Docker は Web アプリケーションのデプロイに最適です。


每立方、Django は、強力でスケーラブルな Web アプリケーションを簡単に作为できる Python Web フレームワークです。 Django は、ユーザー認証システム、データベース抽象概念化レイヤー、テンプレート エンジンなど、すぐに使える多くの機能を作为します。


これにより、Django の应用を開始し、複雑な Web アプリケーションを十分迅速かつ簡単に構築できるようになります。


Django アプリケーションの Docker 化とデプロイは、比較的簡単なプロセスです。関係する主な手順は次のとおりです。


1. Django アプリケーションの Dockerfile を制成します。 2. Dockerfile から Docker イメージを構築します。 3. Docker イメージを実稼働環境にデプロイします。


この記事では、Django アプリケーションの Docker 化とデプロイに有必要な手順を詳しく説明します。また、実稼働環境に Django アプリケーションをデプロイするためのヒントとベスト プラクティスもいくつか出示します。

前提条件

このチュートリアルに従うには、次の基本前提因素が不必要です。


  • Python 3.9 以降
  • ピップ
  • ドッカー
  • Docker Compose
  • ギット


Django アプリケーションを運用環境にデプロイする場合は、AWS、Azure、Google Cloud Platform などのクラウド ホスティング プロバイダーも用不着になります。ただし、このチュートリアルでは Heroku を利用します。


情况条件をすべてインストールしたら、Django アプリケーションの Docker 化とデプロイを開始する準備が整います。

Django プロジェクトの作成

新しい Django プロジェクトを開始するには、 django-adminコマンドを使用する必要があります。このコマンドを使用すると、Django アプリケーションのプロジェクト ディレクトリといくつかの基本ファイルを作成できます。たとえば、 my_projectというプロジェクトを作成する場合は、ターミナルで次のコマンドを実行できます。


django-admin startproject my_project


これにより、次の構造を持つ `my_project` という名前のディレクトリが制成されます。



私のプロジェクト/


§── manage.py


━──プロジェクト/


§──初期化.py


§── settings.py


━── urls.py


manage.pyファイルは、開発サーバーの実行、データベース移行の作成、コードのテストなど、プロジェクトのさまざまなタスクを実行できるようにするスクリプトです。 project/ディレクトリには、プロジェクトの設定ファイルと構成ファイルが含まれています。


settings.pyファイルは、データベース接続、インストールされているアプリ、ミドルウェアなど、プロジェクトの主な設定を定義します。 urls.pyファイルは、プロジェクトの URL をアプリのビューにマップします。


新しい Django プロジェクトを作为した後、開発サーバーを実行してローカルでテストできます。開発サーバーは、マシン上で実行され、プロジェクト ファイルを能提供する単純な Web サーバーです。開発サーバーを起動するには、ターミナルで次のコマンドを実行します。


python manage.py runserver


これにより、デフォルトでサーバーがポート 8000 で起動します。次に、ブラウザを開いてに移動し、デフォルトの Django ホームページを显示します。

Django プロジェクトの基本構造とファイル

Django プロジェクトは、Web アプリケーションの機能と外観を定義する複数のファイルとディレクトリで構成されます。 Django プロジェクトの主なコンポーネントは次のとおりです。


manage.py : アプリの作成、データベースの移行、コードのテストなど、プロジェクトを管理するためのさまざまなコマンドを提供するスクリプト。


project/ : プロジェクトの設定ファイルと構成ファイルが含まれるディレクトリ。このディレクトリ内の主なファイルは次のとおりです。

 `settings.py`: A file that defines the main settings for your project, such as the database connection, the installed apps, and the middleware. You can customize this file to suit your needs and preferences. `urls.py`: A file that maps the URLs of your project to the views of your apps. You can define different URL patterns for different parts of your web application.


apps/ : プロジェクトを構成するすべての Django アプリが含まれるディレクトリ。各 Django アプリは、Web アプリケーションに特定の機能を提供する個別の Python パッケージです。独自のアプリを作成することも、サードパーティ ソースからの既存のアプリを使用することもできます。

プロジェクトをローカルでテストする

プロジェクトをローカルでテストするには、開発サーバーまたは Django が出具するテスト フレームワークを安全使用できます。開発サーバーは、マシン上で実行され、プロジェクト ファイルを出具する単純な Web サーバーです。テスト フレームワークは、コードの単体テストを制成して実行できるツールです。


開発サーバーを的使用するには、ターミナルで次のコマンドを実行します。


python manage.py runserver


これにより、デフォルトでサーバーがポート 8000 で起動します。次に、ブラウザを開いて「//localhost:8000/」にアクセスし、デフォルトの Django ホームページを标识します。


テスト フレームワークを用到するには、ターミナルで次のコマンドを実行します。


python manage.py test


これにより、プロジェクトのすべての単体テストが実行されます。すべてのテストに通过率すると、次のようなメッセージが表达されます。



 Ran 1 test in 0.001s Ok


いずれかのテストが失敗した場合は、失敗の詳細を含むエラー メッセージが表示法されます。この情報を运行して、コードをデバッグおよび调整できます。


プロジェクトをローカルでテストし、結果に満足したら、実稼働環境にデプロイできます。

Django プロジェクトの Docker 化

Dockerfile とは何ですか?

Dockerfile は、Docker イメージの構築方案に関する指示箭头が含まれるテキスト ファイルです。 Docker イメージは、コード、ランタイム、システム ツール、システム ライブラリ、設定など、アプリケーションの実行に有必要なすべてが含まれる你完結型の実行可以パッケージです。


Dockerfile を制成するには、核心イメージ、有一定要的なパッケージをインストールするために実行するコマンド、およびアプリケーションを起動するために実行するコマンドを所选する有一定要的があります。

Django プロジェクトの Dockerfile の例

Django プロジェクトの Dockerfile の例を次に示します。


 FROM python:3.9 #Install Django and other required packages RUN pip install django # Copy the Django project files into the image COPY ./app # Set the working directory WORKDIR /app # Start the Django development server CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]



この Dockerfile は、Python 3.9、Django、および Django プロジェクト ファイルを含む Docker イメージを構築します。このイメージは、ポート 8000 で Django 開発サーバーを起動するように構成されます。

docker-compose.yml ファイルとは何ですか?

docker-compose.yml ファイルは、Docker 化アプリケーションを構成するサービスを定義する YAML ファイルです。サービスは、単一の Docker コンテナーまたは Docker コンテナーのグループにすることができます。


Django プロジェクトの docker-compose.yml ファイルを制成するには、Web サービスとデータベース サービスを定義する一定があります。 Web サービスは Django アプリケーションを実行し、データベース サービスは Django アプリケーションが安全使用するデータベースを実行します。

Django プロジェクトの docker-compose.yml ファイルの例

Django プロジェクトの docker-compose.yml ファイルの例を次に示します。


 version: "3.9" services: web: build: ports: -"8000:8000" volumes -./:/app db: image: postgres:14.0-alpine volumes: -./postgres:/var/lib/postgresql/data



この docker-compose.yml ファイルは、 webdbという 2 つのサービスを定義します。 webサービスは、前のセクションで作成した Dockerfile から Docker イメージを構築します。 webサービスは、Django 開発サーバーにアクセスできるように、ホスト マシン上のポート 8000 も公開します。


dbサービスは、公式の PostgreSQL Docker イメージを使用します。 dbサービスは、ホスト マシン上のpostgresディレクトリをコンテナ内の/var/lib/postgresql/dataディレクトリにマウントします。これにより、コンテナーの再起動間でデータベース ファイルが確実に保持されます。

Docker コンテナの構築と実行

Docker コンテナを構築して実行するには、次のコマンドを动用できます。


docker-compose up -d


このコマンドは、`web` および `db` サービス用の Docker イメージを構築します (まだ存在着しない場合)。このコマンドは、`web` サービスと `db` サービスの Docker コンテナを起動します。

Docker化されたDjangoプロジェクトをローカルでテストする

Docker コンテナが実行されたら、Web ブラウザを的使用して Docker 化された Django プロジェクトをローカルでテストできます。 Web ブラウザを開き、「//localhost:8000」に移動します。これで、Django 開発ページが写出されるはずです。


//localhost:8000/admin/で Django 管理ページにログインすることもできます。デフォルトでは、ユーザー名とパスワードはadminadminです。

Django プロジェクトのデプロイ

次に、Git、GitHub、および Heroku を选择して、Django プロジェクトをクラウド プラットフォームにデプロイします。また、Web ブラウザを选择して、デプロイされた Web アプリケーションをテストします。

Git とは何ですか? なぜ必要ですか?

Git は、プロジェクトのソース コードの工作管理に役立つソフトウェア ツールです。コードに加えられた変更を追跡し、他の開発者と各自作業し、何か問題が発生した場合は十年前のバージョンに戻すことができます。


Git を利用すると、コードを GitHub などのリモート リポジトリにプッシュして、コードを保存文档して他のユーザーと分为することもできます。

GitHub リポジトリを作成してコードを GitHub にプッシュするにはどうすればよいですか?

すでに GitHub リポジトリを制作している場合は、下类を無視してください。


Django プロジェクトの GitHub リポジトリを作为するには、次の手順に従う必要条件があります。


- で無料アカウントを作为する


- プロフィール ページに移動し、 [リポジトリ]の横にある[新規]ボタンをクリックします。


- リポジトリにdjango-docker-appなどの名前を付け、必要に応じて説明を追加します。


- [リポジトリの作为]ボタンをクリックします。


これで、GitHub 上に空のリポジトリが做成されました。コードをこのリポジトリにプッシュするには、ターミナルで「git」コマンドを食用する必要条件があります。すでにローカル マシンに Git をインストールし、Django プロジェクト フォルダーで Git リポジトリを时候化していると仮定します。そうでない場合は、に従ってください。


コードを GitHub にプッシュするには、次の手順に従う需要があります。


- ターミナルで Django プロジェクト フォルダーに移動し、 git statusと入力してリポジトリの現在の状態を確認します。次のようなものが表示されるはずです。


 On branch main Your branch is up to date with 'origin/main'. Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: Dockerfile modified: docker-compose.yml modified: requirements.txt no changes added to commit (use "git add" and/or "git commit -a")


これは、コミット用にステージングされていない変更されたファイルがいくつかあることを意味します。コミットのためにステージングするには、 git addコマンドを使用する必要があります。


- git addと入力します。変更されたすべてのファイルをコミットのためにステージングします。あるいは、 git add Dockerfile docker-compose.yml requirements.txtなど、ステージングするファイル名を指定することもできます。


- git status再度入力すると、リポジトリの更新された状態が表示されます。次のようなものが表示されるはずです。


 On branch main Your branch is up to date with 'origin/main'. Changes to be committed: (use "git restore --staged <file>..." to unstage) modified: Dockerfile modified: docker-compose.yml modified: requirements.txt


これは、コミットのためにステージングされた変更がいくつかあることを意味します。それらをコミットするには、 git commitコマンドを使用する必要があります。


- git commit -m "Add Docker configuration files"実行内容を説明するメッセージとともに段階的な変更をコミットします。あるいは、 -mフラグを省略して、 git commitと入力した後に開くエディターに長いメッセージを入力することもできます。


- git status再度入力して、リポジトリの最終状態を確認します。次のようなものが表示されるはずです。


 On branch main Your branch is ahead of 'origin/main' by 1 commit. (use "git push" to publish your local commits) nothing to commit, working tree clean


これは、まだリモート リポジトリにプッシュされていないコミットが 1 つあることを意味します。プッシュするにはgit pushコマンドを使用する必要があります。


- 「 git push origin mainと入力して、ローカル コミットを GitHub 上のリモート リポジトリにプッシュします。


あるいは、 git push origin mainなど、プッシュするリモート名とブランチ名を指定することもできます。


自分企业を認証するために、GitHub のユーザー名とパスワードを入力するか、個人アクセス トークンを选择するように求められる場合があります。


- GitHub リポジトリ ページに移動し、ページを更行します。コードとコミットメッセージがページに说道されるはずです。


コードが GitHub に很正常にプッシュされました。これで、Django プロジェクトを Heroku にデプロイする次のステップに進むことができます。

Heroku とは何ですか? なぜ必要ですか?

Heroku は、Web アプリケーションのデプロイ、操作、拡張を有可能にするクラウド プラットフォームです。 Python、Django、PostgreSQL など、さまざまなプログラミング言語、フレームワーク、データベースをサポートしています。


また、ロギング、モニタリング、キャッシュ、セキュリティなど、Web 開発エクスペリエンスを強化するさまざまな機能やアドオンも提拱します。


Heroku を选择すると、デプロイメント プロセスが簡単かつ迅猛になるため、一定要です。 Heroku を选择すると、サーバー、ネットワーク、オペレーティング システムなどの基盤となるインフラストラクチャを気にせずに、Django プロジェクトをデプロイできます。


Heroku を使用的して、トラフィックと所需に応じて Web アプリケーションを拡張することもできます。 Heroku は、Web デプロイメントの複雑さと課題をすべて処理します。

Heroku アカウントを作成して Heroku CLI ツールをインストールするにはどうすればよいですか?

Heroku アカウントを作为するには、次の手順に従う必需があります。


- に移動し、 [サインアップ]ボタンをクリックします。

- 名前、メールアドレス、パスワードなどの必要的な情報を入力します。 - Python などの一般な開発言語を選択します。

- [無料アカウントの作为]ボタンをクリックします。

- メールを確認し、リンクをクリックしてアカウントを確認してください。


これで、無料の Heroku アカウントが制成されました。 Heroku CLI ツールをインストールするには、次の手順に従う重要性があります。


- [ に移動し、Windows、Mac OS X、Linux などのオペレーティング システムに適切なインストーラーを選択します。


- インストーラーをダウンロードして実行し、图片の显示灯に従います。


- ターミナルを開き、 heroku --versionと入力して、インストールが成功したことを確認します。次のようなものが表示されるはずです。


heroku/7.59.0 win32-x64 node-v12.21.0


これで、ローカル マシンに Heroku CLI ツールがインストールされました。このツールを利用して、ターミナルから Heroku と対話できます。

Heroku アプリを作成して必要な設定を行う方法は?

Django プロジェクト用の Heroku アプリを弄成するには、次の手順に従う必要条件があります。


- ターミナルで Django プロジェクト フォルダーに移動し、 heroku loginと入力して、Heraku CLI ツールを使用して Heroku アカウントにログインします。電子メールとパスワードを入力するか、Web ブラウザを使用して認証を行うよう求められる場合があります。


- heroku create django-docker-appと入力して、 django-docker-appという名前の新しい Heroku アプリを作成します。あるいは、名前を省略して Heroku にランダムな名前を生成させることもできます。次のようなものが表示されるはずです。


 Creating ⬢ django-docker-app... done //django-docker-app.herokuapp.com/ | //git.heroku.com/django-docker-app.git


これは、Web URL と Git URL を食用して新しい Heroku アプリを制成したことを代表着します。 Web URL はデプロイされた Web アプリケーションにアクセスできる場所であり、Git URL はコードを Heroku にプッシュできる場所です。


- 「 heroku config:set SECRET_KEY=<your_secret_key> 、Django プロジェクトのSECRET_KEY設定の環境変数を設定します。 <your_secret_key> などのツールを使用して生成できるランダムな文字列に置き換える必要があります。


あるいは、 settings.pyファイルにある既存の秘密キーを使用することもできますが、これはセキュリティ上の理由からお勧めできません。


- 「 heroku addons:create heroku-postgresql:hobby-devと入力して、無料の PostgreSQL データベース アドオンを Heroku アプリに追加します。これにより、Django プロジェクトの新しいデータベースが作成され、Django プロジェクトのDATABASE_URL設定の環境変数が設定されます。次のようなものが表示されるはずです。

 Creating heroku-postgresql:hobby-dev on ⬢ django-docker-app... free Database has been created and is available ! This database is empty. If upgrading, you can transfer ! data from another database with pg:copy Created postgresql-curved-12345 as DATABASE_URL Use heroku addons:docs heroku-postgresql to view documentation


これは、名前がPostgreSQL-curved-12345 、URL がDATABASE_URL のPostgreSQL データベース アドオンを追加したことを意味します。


- heroku configと入力すると、Heraku アプリに設定した環境変数のリストが表示されます。次のようなものが表示されるはずです。


 === django-docker-app Config Vars DATABASE_URL: postgres://<username>: <password>@<host>:<port>/<database> SECRET_KEY: <your_secret_key>


これは、Django プロジェクト設定で使用できる 2 つの環境変数DATABASE_URLSECRET_KEYがあることを意味します。


Heroku アプリを弄成し、Django プロジェクトに必要的な設定を構成したので、次のステップに進むことができます。これは、Django プロジェクトを Heroku にデプロイすることです。


heroku 」コマンドを使用して Django プロジェクトを Heroku にデプロイするにはどうすればよいですか?


herokuコマンドを使用して Django プロジェクトを Heroku にデプロイするには、次の手順に従う必要があります。


- ターミナルで Django プロジェクト フォルダーに移動し、 heroku container:loginと入力して Heroku CLI ツールを使用して Heroku Container Registry にログインします。これにより、Docker イメージを Heroku にプッシュできるようになります。


- 「 heroku container:push web -a django-docker-app入力して、Docker イメージをビルドして Heroku にプッシュします。 Heroku アプリの名前を指定する必要があります。この場合はdjango-docker-appです。次のようなものが表示されるはずです。


 === Building web (Dockerfile) Sending build context to Docker daemon 1.024kB Step 1/9 : FROM python:3.9-slim ---> 7f5b6ccd03e9 Step 2/9 : ENV PYTHONUNBUFFERED 1 ---> Using cache ---> 64b5d0e40a22 Step 3/9 : RUN mkdir /code ---> Using cache ---> 4d8c638f2b6c Step 4/9 : WORKDIR /code ---> Using cache ---> e69c02a028cd Step 5/9 : COPY requirements.txt /code/ ---> Using cache ---> 8f0f3e0f2d8c Step 6/9 : RUN pip install -r requirements.txt ---> Using cache ---> 0f7b497d81ed Step 7/9 : COPY . /code/ ---> Using cache ---> c0a8e9a32b16 Step 8/9 : EXPOSE 8000 ---> Using cache ---> a1d36a4a2da4 Step 9/9 : CMD ["gunicorn", "django_docker.wsgi", "--bind", "0.0.0.0:8000"] ---> Using cache ---> f7f3c0418a1d Successfully built f7f3c0418a1d Successfully tagged registry.heroku.com/django-docker-app/web:latest === Pushing web (Dockerfile) The push refers to repository [registry.heroku.com/django-docker-app/web] f7f3c0418a1d: Pushed latest: digest: sha256:6cbbf22cf6aa60e0343e6d8e7c4c2eeb2e cb8fd5e82a42dfe5f4aeeb15af89ec size: 528 Your image has been successfully pushed. You can now release it with the 'container:release' command.


これは、Docker イメージをビルドして Heroku にプッシュしたことを代表します。


- heroku container:release web -a django-docker-app入力して、Docker イメージを Heroku アプリにリリースします。次のようなものが表示されるはずです。


 Releasing images web to django-docker-app... done


これは、Docker イメージを Heroku アプリにリリースしたことを后果します。


- heroku run python manage.py migrate -a django-docker-app入力して、Heraku アプリでデータベース移行を実行します。これにより、Django プロジェクトに必要なテーブルとインデックスが PostgreSQL データベースに作成されます。次のようなものが表示されるはずです。


 Running python manage.py migrate on ⬢ django-docker-app... up, run.1234 (Free) Operations to perform: Apply all migrations: admin, auth, contenttypes, sessions, polls Running migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying admin.0003_logentry_add_action_flag_choices... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying auth.0008_alter_user_username_max_length... OK Applying auth.0009_alter_user_last_name_max_length... OK Applying auth.0010_alter_group_name_max_length... OK Applying auth.0011_update_proxy_permissions... OK Applying auth.0012_alter_user_first_name_max_length... OK Applying polls.0001_initial... OK Applying sessions.0001_initial... OK


これは、Heraku アプリでデータベース移行を実行したことを后果します。


- heroku open -a django-docker-app入力して、デプロイした Web アプリケーションを Web ブラウザで開きます。 Django プロジェクトが Heroku 上で実行されているのが確認できるはずです。


herokuコマンドを使用して、Django プロジェクトが Heroku に正常にデプロイされました。これで、Web アプリケーションを楽しんだり、他のユーザーと共有したりできるようになります。

結論

このチュートリアルでは、Docker、Django、および Heroku を施用して Django アプリケーションを Docker 化してデプロイする最简单的方法を学習しました。 Docker がアプリケーション用に分離された再現或者な環境を做成するのにどのように役立つか、また Heroku がデプロイメントプロセスをどのように簡素化できるかを見てきました。


また、Docker Compose を的使用して複数のコンテナーとサービスを治理する方式技巧と、さまざまな環境に合わせて Django 設定を構成する方式技巧についても学習しました。


Django アプリケーションの Docker 化とデプロイには、次のような多くの利点があります。


- 開発とテストのサイクルの短縮- コラボレーションとコードの总共有が最易になります- プラットフォーム間で一貫した信頼性の高いパフォーマンス- リソースの拡張性と柔軟性- セキュリティと依存関係の分離


次を読む: CI/CD は、迅速かつ信頼性の高いソフトウェア配信に不可欠です。 CI/CD パイプラインを最適化して効率を最大化するには、適切なツールを選択し、ワークフローを合理化し、自動テストと QA を使用し、ビルドを並列化し、モニタリングとフィードバック ループを使用し、セキュリティ チェックを実行し、パイプラインを継続的に改善します。続きを読む

関連記事: DockerCon 2023 で学んだすべて続きを読む

追加リソース

- : Docker の函数ドキュメント。ガイド、チュートリアル、参考资料資料などが見つかります。


- : Django の函数ドキュメント。トピック、ハウツー ガイド、考生資料などが掲載されています。
바카라사이트 바카라사이트 온라인바카라