Docker で MySQL をデプロイする詳細なプロセス (Docker でデプロイされる一般的なアプリケーション)

Docker で MySQL をデプロイする詳細なプロセス (Docker でデプロイされる一般的なアプリケーション)

以前にも紹介しました: docker (一般的なアプリケーションのデプロイ): docker deploy nginx

Dockerはmysql:5.7.26をデプロイします

# イメージをダウンロード docker pull mysql:5.7.26

# イメージを表示する docker images|grep mysql

# コンテナイメージを起動します。/usr/local/workspace/mysql で次の docker run コマンドを実行することをお勧めします: docker run -p 13306:3306 --name my-mysql -v $PWD/conf:/etc/mysql -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.26

   # パスをハードコードすることをお勧めします docker run -p 13306:3306 --name my-mysql -v /usr/local/workspace/mysql/conf:/etc/mysql -v /usr/local/workspace/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.26

コマンドの説明:

-p 13306:3306 はコンテナのポート 3306 をホストのポート 3306 にマッピングします。

--name my-mysql コンテナは起動後にmy-mysqlという名前になります

-v $PWD/conf:/etc/mysql は、ホストの現在のディレクトリにある conf/ ディレクトリをコンテナの /etc/mysql にマウントします (conf ディレクトリは mysql の設定ファイルなので、マウントされていなくても問題ありません)

-v $PWD/logs:/logs は、ホストの現在のディレクトリの下の logs ディレクトリをコンテナの /logs にマウントします (logs ディレクトリは MySQL のログ ディレクトリであり、マウントされていない場合は効果がありません)

-v $PWD/data:/var/lib/mysql は、ホストの現在のディレクトリにあるデータ ディレクトリをコンテナの /var/lib/mysql にマウントします (データ ディレクトリは、mysql 用に設定されたデータ ファイルのストレージ パスです。データを格納するためにマウントすることをお勧めします。コンテナがシャットダウンされた場合、データを再度マウントできます)。

-e MYSQL_ROOT_PASSWORD=123456 ルートユーザーのパスワードを初期化する

コンテナの起動ステータスを確認する

[xxx@xxx-xx-xxx mysql]# docker ps|grep mysql
5291ed3fe987 mysql:5.7.26 "docker-entrypoint.s?? 5 分前 5 分前に起動 33060/tcp、0.0.0.0:13306->3306/tcp my-mysql

mysqlコンテナに入る

# コンテナにログイン [root@cbov10-sso55-xxx ~]# docker exec -it my-mysql bash
ルート@5291ed3fe987:/# ls
bin dev entrypoint.sh ホーム lib64 メディア opt root sbin sys usr
docker-entrypoint-initdb.d などを起動し、lib logs、mnt proc、srv tmp var を実行する
# ログイン mysqlroot@5291ed3fe987:/# mysql -uroot -p --default-character-set=utf8
パスワードを入力してください: 
MySQL モニターへようこそ。コマンドは ; または \g で終わります。
MySQL接続IDは2です
サーバーバージョン: 5.7.26 MySQL コミュニティサーバー (GPL)

Copyright (c) 2000, 2019, Oracle およびその関連会社。無断複写・転載を禁じます。

OracleはOracle Corporationおよびその関連会社の登録商標です。
その他の名称は各社の商標である場合があります。
所有者。

ヘルプを表示するには、「help;」または「\h」と入力します。現在の入力ステートメントをクリアするには、「\c」と入力します。

mysql> データベースを表示します。
+--------------------+
| データベース |
+--------------------+
| 情報スキーマ |
|mysql |
| パフォーマンススキーマ |
|システム|
+--------------------+
セット内の 4 行 (0.00 秒)

MySQLへのリモートログインを設定する

mysql> mysqlを使用する
テーブル名と列名の補完のためのテーブル情報の読み取り
-Aでこの機能をオフにすると起動が速くなります。

データベースが変更されました
mysql> ユーザーからホスト、ユーザーを選択します。
+-----------+---------------+
| ホスト | ユーザー |
+-----------+---------------+
| % | ルート |
| ローカルホスト | mysql.セッション |
| ローカルホスト | mysql.sys |
| ローカルホスト | ルート |
| ローカルホスト | テスト |
+-----------+---------------+
セット内の行数は 5 です (0.00 秒)

# どこからでもリモートでログインし、すべてのライブラリに対するすべての操作権限を持つように root ユーザーを設定します。(攻撃対象領域が広すぎるため、企業はこれを実行しないでください。) これはテスト用です。
mysql> GRANT OPTION を使用して、'123456' で識別される 'root'@'%' に *.* のすべての権限を付与します。
クエリは正常、影響を受けた行は 0 行、警告は 1 件 (0.00 秒)

# 権限を更新mysql> FLUSH PRIVILEGES;
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

# mysqlを終了 
mysql>終了
さよなら

MySQLの認証に関しては、Baiduで自分で検索することができます。ここに推奨事項があります

mysql 権限管理

MySQL 権限制御

リモートログインテスト

データベース接続ツールを使用して、ホスト IP とホストによって公開されているポートに接続します。

先ほどコンテナを起動したとき、-p13306:3306はホストポート13306がコンテナのポート3306にマッピングされていることを示しています。ホスト、つまりサーバーのIPアドレスが10.10.10.11の場合、

10.10.10.11:13306 に接続されたデータベースが接続されるはずです。次のように、テスト用に新しいテストデータベースを作成することをお勧めします。

Docker、MySQL 再起動の問題 (データは失われますか?)

# コンテナを表示 [root@cbov10-sso55-113 mysql]# docker ps | grep mysql
5291ed3fe987 mysql:5.7.26 "docker-entrypoint.s?? 4 時間前 4 時間前にアップ 33060/tcp、0.0.0.0:13306->3306/tcp my-mysql

# コンテナを停止します (5291ed3fe987 は mysql コンテナ ID です)
[root@cbov10-sso55-113 mysql]# docker stop 5291ed3fe987
5291ed3fe987


# コンテナを削除 [root@cbov10-sso55-113 mysql]# docker rm 5291ed3fe987
5291ed3fe987

元のマウントディレクトリに移動して確認します

マウントホストディレクトリは/usr/local/workspace/mysqlです。

[root@cbov10-sso55-xxx mysql]# cd data/
[root@cbov10-sso55-xxx データ]# ls
auto.cnf ca.pem クライアントキー.pem ibdata1 ib_logfile1 パフォーマンススキーマ 公開キー.pem サーバーキー.pem テスト
ca-key.pem クライアント証明書.pem ib_buffer_pool ib_logfile0 mysql プライベートキー.pem サーバー証明書.pem sys

データファイルはまだ残っています!再実行しましょう

# ディレクトリはマウントされたホストディレクトリと一致している必要があります。 最初に /usr/local/workspace/mysql で実行したコマンドも今回同じディレクトリにある必要があります。 # もちろん、固定パス [root@cbov10-sso55-xxx mysql] と書いても問題ありません。# docker run -p 13306:3306 --name my-mysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.26
74c91431533ebb9bbfd3a1123b3f910f54770a08ad08c3c37cbbb996d29e0428

# ここでコンテナ ID が変更されたことがわかります [root@cbov10-sso55-xxx mysql]# docker ps |grep mysql
74c91431533e mysql:5.7.26 "docker-entrypoint.s?? 16 秒前 15 秒前に起動 33060/tcp、0.0.0.0:13306->3306/tcp my-mysql

# コンテナに入る [root@cbov10-sso55-xxx mysql]# docker exec -it bash 74c91431533e
エラー: そのようなコンテナはありません: bash
[root@cbov10-sso55-xxx mysql]# docker exec -it 74c91431533e bash
ルート@74c91431533e:/#mysql -u ルート -p
パスワードを入力してください: 
MySQL モニターへようこそ。コマンドは ; または \g で終わります。
MySQL接続IDは2です
サーバーバージョン: 5.7.26 MySQL コミュニティサーバー (GPL)

Copyright (c) 2000, 2019, Oracle およびその関連会社。無断複写・転載を禁じます。

OracleはOracle Corporationおよびその関連会社の登録商標です。
その他の名称は各社の商標である場合があります。
所有者。

ヘルプを表示するには、「help;」または「\h」と入力します。現在の入力ステートメントをクリアするには、「\c」と入力します。


mysql> データベースを表示します。
+--------------------+
| データベース |
+--------------------+
| 情報スキーマ |
|mysql |
| パフォーマンススキーマ |
|システム|
| テスト |
+--------------------+
セット内の行数は 5 です (0.00 秒)

テストデータベースもそこにあることがわかりました。 MySQL コンテナを削除する前と削除した後のデータファイルのサイズも確認できます。読者は自分で試してみることができます。

ホストファイルが適切に保存されていれば、データは失われません。

例:

実際、本番環境はこのテストよりもはるかに複雑です。MySQL クラスタ、マスタースレーブ、データ同期、ネットワークなどの問題を Docker で解決するのは本当に困難です。

MySQL コンテナの管理やステートフル アプリケーションの管理には、より洗練されたツールである有名な Kubernetes プロジェクトが必要です。

推薦する

Docker公式サイト

Kubernetes公式サイト

これで、docker deploying mysql (docker deploying common applications) に関するこの記事は終了です。docker deploying mysql に関するその他の関連コンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • .Net6 プロジェクトを Docker にデプロイする
  • Docker を使用して Microsoft Sql Server を展開するための詳細な手順
  • Docker デプロイメント MySQL8 クラスター (マスター 1 台とスレーブ 2 台) の実装手順
  • Linux システム Docker への ASP.NET Core アプリケーションのデプロイのプロセス分析
  • Docker に MySQL をデプロイする例
  • Linux CentOS の Docker に Asp.Net Core (.Net6) をデプロイする
  • docker を使用して Asp.net コア アプリケーションをデプロイするための完全な手順
  • DockerはMysql、.Net6、Sqlserverなどのコンテナをデプロイします

<<:  Vue デフォルトスロットの理解とサンプルコード

>>:  HTML で点線の境界線を設定する方法

推薦する

一般的な Dockerfile コマンドの使用方法の紹介

目次01 CM 02 エントリーポイント03 ワークディレクトリ04 環境05 ユーザー06巻07 ...

JavaScriptプロトタイプチェーンの詳細な説明

目次1. コンストラクタとインスタンス2. プロパティプロトタイプ3. プロパティ __proto_...

Windows Server 2019 IIS10.0+PHP(FastCGI)+MySQL 環境構築チュートリアル

準備1. 環境の説明:オペレーティング システム: Windows Server 2019 PHP ...

JavaScript の実行コンテキストとコールスタックの詳細な説明

目次1. 実行コンテキストとは何か2. 実行コンテキスト スタックとは何ですか? 3. 実行コンテキ...

デスクトップ仮想化を実現するために Hyper-V を展開する手順 (グラフィック チュートリアル)

Hyper-V を展開するためのハードウェア要件は次のとおりです。 64 ビット プロセッサ、具体...

Win2008 サーバー セキュリティ チェック手順ガイド (日常のメンテナンス手順)

ドキュメントはしばらく前から書いていましたが、アップロードする勇気がありませんでした。サーバーのセキ...

Linux ネットワークプログラミングにおけるソケットオプションの実装

ソケットオプション機能機能: ソケットファイル記述子の属性の読み取りと設定に使用されるメソッド #i...

一定期間の日ごと、時間ごとの統計データを取得するMySQLの詳しい説明

毎日の統計情報を取得するプロジェクトを実行する際、プロジェクト ログを分析する必要があります。要件の...

Nginx プロキシ転送構成を通じてクロスドメイン API プロキシ転送を実装する方法

序文WEB 開発では、クロスドメイン リクエストが頻繁に発生します。クロスドメインの問題を解決する方...

MySQL マルチバージョン同時実行制御 MVCC の実装

目次MVCCとはMVCC 実装MVCC はファントム リードを解決しますか? MVCCとはMVCC ...

js を使用して数字推測ゲームを実装する

先週、先生が私に数字当てゲームをするちょっとした宿題を出しました。とても面白いと思ったので、適当に書...

Quickjs は JavaScript サンドボックスの詳細をカプセル化します

目次1. シナリオ2. 基盤となるAPIを簡素化する2.1 自動的に破棄を呼び出す2.2 VM値を作...

CocosCreatorメッセージ配信メカニズムの詳細な説明

概要この記事は、ゲームビジネスアーキテクチャに関連するコンテンツの紹介から始まります。ゲームビジネス...

Linux で scp コマンドを使用してファイルをリモートでコピーする方法の詳細な説明

序文scp は secure copy の略です。scp は、Linux システムの ssh ログイ...

Tomcat のセッションと Cookie の詳細な説明

序文HTTP はステートレスな通信プロトコルです。各リクエストは互いに独立しており、サーバーは以前の...