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

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 で起動します。次に、ブラウザを開いてhttp://localhost: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 で起動します。次に、ブラウザを開いて「http://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 ブラウザを開き、「http://localhost:8000」に移動します。これで、Django 開発ページが表示されるはずです。


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

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

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

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

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


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

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

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


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


- 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 アカウントを作成するには、次の手順に従う必要があります。


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

- 名前、メールアドレス、パスワードなどの必要な情報を入力します。

- Python などの主要な開発言語を選択します。

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

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


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


- [ 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 https://django-docker-app.herokuapp.com/ | https://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> Django Secret Key Generatorなどのツールを使用して生成できるランダムな文字列に置き換える必要があります。


あるいは、 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 ドキュメント: Docker の公式ドキュメント。ガイド、チュートリアル、参考資料などが見つかります。


- Django Documentation : Django の公式ドキュメント。トピック、ハウツー ガイド、参考資料などが掲載されています。