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 で点線の境界線を設定する方法

推薦する

Vue3.0 で Vuex 状態管理を開始する方法をすぐに習得します

Vuex は、Vue.js アプリケーション専用に開発された状態管理パターンです。集中型ストレージを...

CentOS 8 仮想マシンから Windows 10 ホスト フォルダーにアクセスする方法の簡単な分析

VMware Toolsをインストールすると、仮想マシンホスト間で①テキストをコピーして貼り付けるこ...

Linux システム Docker への ASP.NET Core アプリケーションのデプロイのプロセス分析

目次1. システム環境2. 運用プロセスと途中で遭遇した問題1. システム環境1. Tencent ...

MySQL 5.7 のスロークエリログの時間がシステム時間より 8 時間遅れている理由の詳細な説明

遅いクエリをチェックすると、時間が正しくなく、システム時間とちょうど 8 時間異なっていることがわか...

div間のギャップの解決策

HTMLのdivブロックを使用していて、ブロックの中央をしっかりと接続できず、解決できない場合1. ...

React+TS を使用したシンプルな Jira プロジェクトを実装するためのベスト プラクティス

トレーニングのための一連のプロジェクト反応+ts内容は少ないですが、フックのカプセル化、ts ジェネ...

MySQL の挿入およびバッチ ステートメントのいくつかの例の詳細な説明

目次序文1.無視を挿入2. 重複キーの更新時3. を置き換える4.存在しない場合は挿入する5. デー...

MySQL データベース インデックスが B+ ツリーの使用を選択するのはなぜですか?

MySQL データベース インデックスが B+ ツリーを使用する理由をさらに分析する前に、データ構...

Vueは適切なスライドアウトレイヤーアニメーションを実装します

この記事では、適切なスライドアウトレイヤーアニメーションを実装するためのVueの具体的なコードを例と...

なぜ IE6 が最も多くの人に使用されているのでしょうか?

まず第一に、私はウェブデザイナーです。具体的には、私は XHTML フロントエンド デザイナーです。...

nginx は画像表示の遅さとダウンロードの不完全さの問題を解決します

前面に書かれた最近、ある読者から、ブラウザからサーバーにアクセスすると、画像の表示が遅く、ブラウザに...

CentOS8 で MySQL 8.0 をインストールしてデプロイする方法

MySQL 8 の公式バージョン 8.0.11 がリリースされました。公式発表によると、MySQL ...

Vueフィルターの使い方

目次概要フィルターの定義フィルターの使用カスタムグローバルフィルターローカルフィルター予防例1(ロー...

Linux での tcpdump コマンド例の詳細な説明

序文簡単に言えば、tcpdump は、ネットワーク上のトラフィックをダンプし、ユーザーの定義に従って...

MySQL 5.7.18 インストーラーのインストール ダウンロード グラフィック チュートリアル

この記事では、MySQL 5.7.18インストーラーの詳細なインストールチュートリアルを参考までに記...