Docker ケース分析: MySQL データベース サービスの構築

Docker ケース分析: MySQL データベース サービスの構築

データベースサービスを構築するには、公式の MySQL イメージを使用します。現在の最新バージョンはバージョン 8.0.19 に相当します。公式バージョンが更新された後の次の手順で互換性の問題が発生しないように、イメージを使用するときにバージョン 8.0.19 を指定できます。

1 設定ディレクトリとデータディレクトリを作成する

このマシン上に、MySQL の設定とデータを保存するディレクトリを作成します。

  • 設定ファイルディレクトリ: ~/docker/conf/mysql
  • データファイルディレクトリ: ~/docker/data/mysql
docker プル mysql

3 イメージからホストに構成ファイルをコピーする

イメージの内部構成ファイルは /etc/mysql ディレクトリに保存されます。構成ファイル ディレクトリをローカルの ~/docker/conf/ ディレクトリにコピーするための一時コンテナが作成されます。

# mysqlという名前のコンテナを作成します。docker run --name mysql -e MYSQL_ROOT_PASSWORD=crane -d mysql

# docker コンテナ内の設定ファイルをローカルの ~/docker/conf/mysql ディレクトリにコピーします。docker cp mysql:/etc/mysql /Users/crane/docker/conf/

# 一時コンテナを停止して削除する docker stop mysql
docker rm mysql

4 MySQLコンテナを作成して実行する

ホスト構成とデータ ファイル ディレクトリを Docker コンテナーにマウントし、ターミナルで次のコマンドを実行します。

# ~/docker/conf/mysql には mysql 設定ファイルが含まれています # ~/docker/data/mysql には mysql データファイルが含まれています # ローカルポート 3306 と 33060 は、それぞれ docker の 3306 と 33060 ポートにマップされています # データベースのルートパスワードは crane です
# -d バックグラウンドでdockerを実行する
docker run --name mysql -v ~/docker/conf/mysql:/etc/mysql/conf.d -v ~/docker/data/mysql:/var/lib/mysql -p 3306:3306 -p 33060:33060 -e MYSQL_ROOT_PASSWORD=crane -d mysql

5 ホストがデータベースに接続する

5.1 端末コマンド接続

前の手順でコンテナが正常に起動したら、ホスト端末で次のコマンドを実行してデータベースに接続します。

# 次のコマンドを入力してEnterキーを押し、データベースパスワードcraneを入力します
mysql -uroot -p --protocol=tcp

ここに画像の説明を挿入

上記のコマンドは、データベースへの接続にTCPを使用するように指定しています。--protocol=tcpを追加しない場合、デフォルトの接続はソケットになり、次のエラーが報告されます。

ここに画像の説明を挿入

5.2 データベースツール接続

DataGrip などのデータベース ツールを使用して接続し、関連するデータ操作を実行することもできます。

ここに画像の説明を挿入

ここに画像の説明を挿入

6 MySQLログを表示する

コンテナの通常の操作中は、次のコマンドを使用してログを表示できます。

docker ログ -f mysql

データのバックアップと移行を容易にするために、サービスを構築するときに外部にマウントされた構成とデータを使用します。同じバージョンの Docker イメージを使用して別のホストでコンテナを起動し、バックアップされた構成とデータをマウントすると、まったく同じデータベース構成とデータが得られます。

公式MySQLイメージを参照

上記は私の個人的な経験です。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Docker に MySQL をデプロイする例
  • Docker に MySQL インスタンスをインストールして実行する
  • Docker で MySQL クラスターを構築する方法の例
  • Docker で MySQL サービスをデプロイする方法と、遭遇する落とし穴

<<:  Web フロントエンドのパフォーマンス最適化の詳細説明: リソースのマージと圧縮

>>:  JS で async と await を使用する方法

推薦する

tomcat デプロイメント プロジェクトの実装と IDEA との統合

目次Tomcat でプロジェクトを展開する 3 つの方法プロジェクトをwebappsディレクトリに直...

IDEA が Docker を統合してリモート展開を実現するための詳細な手順

1. Dockerサーバーへのリモートアクセスを有効にするdocker が配置されているリモート サ...

ウィンドウとLinuxプロジェクトを展開する際のLinuxファイルパスに問題はありません

長い間ブログを書いていませんでした。先週、プロジェクトをテストしたところ、いくつかのバグが見つかりま...

JavaScript Canvas で三目並べゲームを実装

この記事では、JavaScript Canvasで三目並べゲームを実装するための具体的なコードを参考...

MySQL でコマンドを使用して階層検索を実現する方法の詳細な説明

序文この記事は主にMySQLコマンド階層検索ヘルプの使用に関する内容を紹介します。この記事のサンプル...

Linux で xargs コマンドを使用する詳細なチュートリアル

みなさんこんにちは。私は梁旭です。 Linux を使用しているときに、いくつかのコマンドを連結する必...

CSS3 で less のテキストの長い影を実装する

この記事では主に、CSS3 LESS で長いテキストの影を実装する方法を紹介し、皆さんと共有します。...

MySQLオンラインDDL gh-ostの使用の概要

背景: DBA として、大規模なテーブルの DDL 変更のほとんどは、Percona の pt-on...

Tomcat メモリ オーバーフロー問題の解決経験

少し前に、製品バージョンをテスト用にテスターに​​提出したのですが、テスト結果はまったく予想外のもの...

ネイティブjsは9マスグリッドのドラッグアンドドロップを実現します

ネイティブJSを使用して9つの正方形のグリッドを記述し、9つのグリッドの位置をドラッグして変更する効...

HTMLベースの複数画像アップロードのプレビュー機能を実装

最近、Web ページに複数の画像をアップロードするためのスクリプトを作成しました。これは非常に実用的...

TypeScript名前空間の説明

目次1. 定義と使用1.1 定義1.2 使用2. 複数のファイルに分割する3. エイリアス序文: T...

CSSで記事の区切り線のスタイルを実装するさまざまな方法のまとめ

この記事では、CSS で記事の区切り線を実装するさまざまな方法をまとめています。区切り線はページを美...

React+tsは二次リンク効果を実現します

この記事では、二次リンク効果を実現するためのReact+tsの具体的なコードを参考までに共有します。...

js キャンバスはランダムなパーティクル効果を実現します

この記事の例では、参考のためにjsキャンバスランダムパーティクルエフェクトの具体的なコードを共有して...