Dockerを使用してDjango+MySQL8開発環境をデプロイする方法の詳細な説明

Dockerを使用してDjango+MySQL8開発環境をデプロイする方法の詳細な説明

しばらく前にシステムを再インストールしましたが、バックアップを取っていなかったので、コンピューター上の開発環境がすべて消えてしまいました。

Python 環境とデータベースのインストールを考えるのは頭の痛い作業ですし、インストール プロセス中にエラーが多数発生する可能性もあります。

現在、Docker を学習中です。これで現在の問題点が解決されるのではないでしょうか?また、今回だけでなく、将来的にも再インストールの心配はありません。Dockerfileとdocker-composeファイルさえあれば、どんな環境でもコマンド1つで簡単に実行できます。

以前は、Python 開発環境は virtualenv または Pipenv を使用してデプロイされていました。今回Dockerを使ってみて、Dockerの方が便利だということが分かりました。以下で詳しく紹介させていただきます。

Dockerファイル

Python:3.6.8 から

環境変数 PYTHONUNBUFFERED 1

mkdir -p /code を実行
コピー ./requirements.txt /code

WORKDIR /コード

sed -i "s/archive.ubuntu./mirrors.aliyun./g" /etc/apt/sources.listを実行します。
sed -i "s/deb.debian.org/mirrors.aliyun.com/g" /etc/apt/sources.list を実行します。

apt-get clean && apt-get -y update && \ を実行します。
 apt-get -y で libsasl2-dev 、 python-dev 、 libldap2-dev 、 libssl-dev 、 libsnmp-dev をインストールします。
pip3 install --index-url https://mirrors.aliyun.com/pypi/simple/ --no-cache-dir -r requirements.txt を実行します。

コピー ./* /code/

Dockerfile を使用してイメージを作成し、Python バージョンは 3.6.8 で、ソース コードをコンテナー内の /code ディレクトリにコピーします。

docker-compose

バージョン: '3'

サービス:
 ウェブ:
 建てる:
  コンテクスト: 。
  dockerfile: Dockerファイル
 画像: ウェブ
 コンテナ名: ウェブ
 ホスト名: web
 再起動: 常に
 コマンド: python /code/manage.py runserver 0.0.0.0:8000
 ボリューム:
  - .:/ウェブ
 ポート:
  - 「8000:8000」
 依存:
  -MySQLについて 

 マイスク:
 画像: mysql
 コンテナ名: mysql
 ホスト名:mysql
 再起動: 常に
 コマンド: --default-authentication-plugin=mysql_native_password --mysqlx=0
 ポート:
  -3306:3306
 ボリューム:
  - ./db:/var/lib/mysql
 環境:
  -MYSQL_HOST=ローカルホスト 
  -MYSQL_PORT=3306 
  -MYSQL_DATABASE=デバイス
  -MYSQL_USER=デバイス
  -MYSQL_パスワード=123456
  -MYSQL_ROOT_PASSWORD=123456

docker-compose を使用してコンテナをオーケストレーションし、合計 2 つのサービスを開始します。Web サービスはバックグラウンドの Django サービスであり、mysql はデータベース サービスです。

注意すべき点は3つあります。

  • Web サービスは、depends_on コマンドを使用して、mysql サービスに依存していることを示します。
  • mysql サービスは --default-authentication-plugin=mysql_native_password コマンドを追加する必要があります。 MySQL 8.0 以降では、デフォルトの暗号化ルールで caching_sha2_password が使用されていますが、これはクライアントではサポートされていません。以前は、mysql_native_password が使用されていました。
  • ボリュームを使用してデータを永続化します。そうしないと、コンテナーが削除された後にデータが失われます。

要件

ジャンゴ==2.2.11
mysqlクライアント==1.4.6

Django に必要な pip パッケージを起動します。Django のバージョンは少なくとも 2.0 である必要があります。そうでない場合はエラーが報告されます。

Djangoの設定
データベース = {
 'デフォルト': {
  'エンジン': 'django.db.backends.mysql',
  '名前': 'dev',
  'ユーザー': 'dev',
  'パスワード': '123456',
  'ホスト': 'mysql',
  'ポート': '3306'
 }
}

Django 設定ファイルでデータベース情報を設定します。内容は docker-compose の内容と一致している必要があります。

注意すべき点は、HOST を docker-compose のサービス名として設定する必要があることです。私の場合は mysql です。 localhost や 127.0.0.1 などの他の値に設定すると、エラーが報告されます。

Docker は起動時にローカル ネットワークを設定するため、mysql を対応するサービスのコンテナーに解決できますが、対応するサービスは localhost 上にありません。

走る

ミラーを作成するには、次のコマンドを使用します。

$ docker-compose -f ./docker-compose.yml ビルド

前の手順をスキップして、次のコマンドを使用してサービスを直接開始することもできます。イメージがない場合は、最初にイメージが作成されてからサービスが開始されます。

$ docker-compose -f ./docker-compose.yml を起動します

トラブルシューティング

展開プロセス中に、基本的に構成エラーによって発生する次のエラーが発生する可能性があります。このような場合は、設定をよく確認してください。記事と同じであれば問題ありません。

  • 'プラグイン caching_sha2_password をロードできませんでした: /usr/lib/x86_64-linux-gnu/mariadb19/plugin/caching_sha2_password.so: 共有オブジェクト ファイルを開けません: そのようなファイルまたはディレクトリはありません'
  • django.core.exceptions.ImproperlyConfigured: MySQLdb モジュールの読み込み中にエラーが発生しました。
  • django.db.utils.OperationalError: (2002、「'db' の MySQL サーバーに接続できません (115)」)
  • django.db.utils.OperationalError: (2002、「ソケット '/var/run/mysqld/mysqld.sock' を介してローカル MySQL サーバーに接続できません (2)」)
  • django.db.utils.OperationalError: (2002、「'127.0.0.1' の MySQL サーバーに接続できません (115)」)
  • django.db.utils.OperationalError: (2002、「ソケット '/var/run/mysqld/mysqld.sock' を介してローカル MySQL サーバーに接続できません (2)」)

さらに難しい問題にも遭遇しました。

[警告] root@localhost は空のパスワードで作成されています。--initialize-insecure オプションをオフにすることを検討してください。

パスワードが間違って設定されていると思い、長い間確認しましたが、問題は見つかりませんでした。後でオンラインで説明を見つけたので、無視することにしました。

これは、データベース ファイルの初期化 (mysqld --initialize-insecure) 中に表示される警告です。パスワード付きの root ユーザーは、データベースが Unix ソケットのみでリッスンしているときに後で作成されます。

参考資料:

http://fusionblender.net/django-and-mysql-8-using-docker/
https://github.com/docker-library/mysql/issues/307…
https://www.jianshu.com/p/4eafa4f87fd5

Docker を使用して Django+MySQL8 開発環境をデプロイする方法についての記事はこれで終わりです。Django+MySQL8 の Docker デプロイに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL8 ベースの docker-compose デプロイメント プロジェクトの実装
  • Dockerを使用してMySQL 8.0をデプロイする方法の例
  • DockerにMySQL 8.0をインストールする方法
  • MySQL 5.7 の Docker バージョンを MySQL 8.0.13 にアップグレードし、データを移行する
  • DockerにMySQL8をインストールする方法
  • Docker デプロイメント MySQL8 クラスター (マスター 1 台とスレーブ 2 台) の実装手順

<<:  MySQL統計テーブルのサイズを説明する例

>>:  mysql データはどこに保存されますか?

推薦する

Linuxカーネルの浮動小数点演算のサポートに関する簡単な説明

現在、ほとんどの CPU は浮動小数点ユニット (FPU) をサポートしています。FPU は、プロセ...

MySQL の起動オプションとシステム変数の例の詳細な説明

目次ブートオプションコマンドラインパラメータの長い形式と短い形式設定ファイル構成グループシステム変数...

JavaScript Promise の徹底解説

目次1. Promise とは何ですか? 2. なぜ Promise が存在するのでしょうか? 3つ...

Vueのwatch、computed、methodsの違いのまとめ

目次1 はじめに2 基本的な使い方2.1 方法2.2 計算プロパティ2.3 リスナーを見る3 3つの...

中国語でのNginx設定パラメータの詳細な説明(負荷分散とリバースプロキシ)

PS: 最近、nginx を詳細に紹介している <<High-Performance ...

DockerはMariaDBのサブライブラリとサブテーブル、および読み書き分離機能を実装します

目次1. はじめに2. 環境整備1. 基本環境3.Mysqlマスタースレーブ構成をインストールする1...

固定、流動的、柔軟なウェブページレイアウトの長所と短所の分析

ウェブデザイナーを長い間悩ませてきた疑問があります。それは、固定レイアウト、流動的レイアウト、柔軟レ...

Vue マウスホイールスクロール切り替えルーティング効果を実装する方法

ルート ルーティング コンポーネント (アプリの下のルート ルーティング コンポーネント。子コンポー...

Ubuntu 14.04 で QT5 をインストール、設定、アンインストールするための詳細な手順

1. 以前 QT5.13 バージョンをダウンロードしましたが、インストール後、Qtcreator を...

React+TypeScriptプロジェクト構築事例解説

React プロジェクトの構築は非常に簡単ですが、Typescript と組み合わせると、実際にはそ...

MySQLは現在の日付と時刻を取得する関数の例の詳細な説明

現在の日付 + 時刻 (日付 + 時刻) を取得する関数: now() mysql> now(...

検証コード干渉を実装する js (動的)

この記事の例では、検証コードの動的干渉を実装するためのjsの具体的なコードを共有しています。具体的な...

Vue3とVue2の利点のまとめ

目次1. なぜ vue3 が必要なのでしょうか? 2. vue3の利点3. 応答原則の違い4. ライ...

mysqlはエクスポートされたデータのsqlファイルから指定されたテーブルのみをインポートすることを実装します

シナリオ昨日、システムは dbAll.sql.gz という名前の特定のデータベースのすべてのテーブル...

Dockerを使用してLaravelおよびVueプロジェクトの開発環境を構築する詳細な説明

この記事では、Docker で構築された Laravel および Vue プロジェクトの開発環境を紹...