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

推薦する

mysql 3つのテーブルを接続してビューを作成する

3 つのテーブルが接続されています。テーブル A のフィールド a はテーブル B のフィールド b...

CSS3 でテキスト ストロークを実装する 2 つの方法 (要約)

質問最近、以下に示すように、テキストストローク効果を実現するという要件に遭遇しました。 解決策1まず...

Dockerを使用してクローンリポジトリを使用してGitイメージを構築する

概要私は 1 年以上 Docker を使用しています。最近、サービスをすばやくオーケストレーションし...

MySQL ルートパスワードエラー番号 1045 の解決方法

MySQLサービスを停止するWindowsでは、マイコンピュータを右クリック--管理--サービスと...

HTML 再利用テクニック

HTML の再利用は、あまり話題に上らない言葉です。今日は、この問題を次のようにまとめたいと思います...

Dockerfileの指示と基本構造の説明

Dockerfile を使用すると、ユーザーはカスタム イメージを作成できます。基本構造Docker...

MyCat を使用して Linux で MySQL マスター/スレーブの読み取り/書き込み分離を実装する方法

目次Linux - MyCat を使用して MySQL マスター スレーブの読み取り書き込み分離を実...

MYSQL開発パフォーマンス調査:バッチデータ挿入の最適化方法

1. どのような問題に直面しましたか?標準 SQL では、通常、次の SQL 挿入ステートメントを記...

Docker環境でJenkinsを設定すると、タスクをビルドするときにコンソールログに文字化けした中国語の文字が表示されます

目次1. 問題の説明: 2. Jenkins設定のトラブルシューティング3. コードログのエンコード...

dl、dt、dd はいつ使用するのが適切ですか?

dl:定義一覧定義リストdt:定義タイトルタイトルを定義するdd:定義説明定義の説明dt は情報のタ...

React + Threejs + Swiper パノラマ効果を実現するための完全なコード

パノラマビュー効果を見てみましょう: 住所を表示スクリーンショット: 体験してみると、周囲の環境がぐ...

Mac OS10.12 に mysql5.7.18 をインストールするチュートリアル

ウェブ全体を検索して、さまざまな落とし穴を見つけましたが、問題は解決しませんでした。ついに自分でも分...

JS でシンプルな画像カルーセル効果を実現

この記事では、シンプルな画像カルーセル効果を実現するためのJSの具体的なコードを参考までに紹介します...

MySQL 8.0.12 のインストールと設定方法のグラフィックチュートリアル (Windows 版)

1. はじめにプロジェクトではMySQLを使用しています。インターネット上の例を参考にインストール...

MySQL 接続制御プラグインの紹介

目次1. 接続制御プラグイン(connection_control)の紹介1.1 connectio...