Docker で MySQL コンテナを作成する場合、コンテナの起動後にデータベースとテーブルが自動的に作成され、初期化データが自動的に入力されることを期待することがあります。つまり、コンテナの起動後、コンテナ内のデータベースに直接接続して、その中のデータを使用することができます。 実際、MySQL の公式イメージはこの機能をサポートしており、コンテナの起動時に指定された SQL スクリプトまたはシェル スクリプトを自動的に実行します。以下に示すように、MySQL の公式イメージの Dockerfile を見てみましょう。 ENTRYPOINT が設定され、 原理を理解したので、実践してみましょう。 docker で disconf 環境を構築する場合、mysql データベースを構築し、4 つの sql ファイルを順番に実行して、それぞれデータベース、テーブル、データを初期化する必要があります。これを行うには 2 つの方法があります。
#!/bin/bash mysql -uroot -p$MYSQL_ROOT_PASSWORD <<EOF ソース $WORK_PATH/$FILE_0; ソース $WORK_PATH/$FILE_1; ソース $WORK_PATH/$FILE_2; ソース $WORK_PATH/$FILE_3; シェルは非常にシンプルであることがわかります。mysql にログインし、指定された sql ファイルを実行します。MYSQL_ROOT_PASSWORD、WORK_PATH、FILE_0 はすべて環境変数です。 次のように、対応する Dockerfile の書き方を見てみましょう。 # disconf mysql の Docker イメージ # バージョン 0.0.1 # 著者: bolingcavalry #基本イメージはdaocloud.io/library/mysql:8を使用します daocloud.io/library/mysql:8 から #著者メンテナー BolingCavalry <[email protected]> #作業ディレクトリを定義する ENV WORK_PATH /usr/local/work #コンテナによって自動的に実行されるディレクトリを定義します ENV AUTO_RUN_DIR /docker-entrypoint-initdb.d #SQLファイル名を定義します ENV FILE_0 0-init_table.sql ENV FILE_1 1-init_data.sql 環境変数 FILE_2 20151225.sql 環境変数 FILE_3 20160701.sql #シェルファイル名を定義する ENV INSTALL_DATA_SHELL install_data.sh #フォルダを作成する RUN mkdir -p $WORK_PATH #データベース初期化データファイルを作業ディレクトリにコピーします COPY ./$FILE_0 $WORK_PATH/ コピー ./$FILE_1 $WORK_PATH/ コピー ./$FILE_2 $WORK_PATH/ コピー ./$FILE_3 $WORK_PATH/ #実行するシェルファイルを/docker-entrypoint-initdb.d/ディレクトリに置くと、コンテナは自動的にこのシェルを実行します コピー ./$INSTALL_DATA_SHELL $AUTO_RUN_DIR/ #実行ファイルに実行権限を追加する RUN chmod a+x $AUTO_RUN_DIR/$INSTALL_DATA_SHELL 0-init_table.sql、1-init_data.sql、20151225.sql、20160701.sql は実行する SQL ファイルであり、Docker イメージを構築するときにイメージ ファイルにコピーされます。 完全なコンテンツについては、私の github をクローンしてください: 次に、 データベースにアクセスして、データが本当に存在するかどうかを確認しましょう。docker ご覧のとおり、 要約する 以上が、Docker で MySQL が起動したときに SQL 文を自動的に実行する方法についてご紹介しました。お役に立てれば幸いです。ご質問がある場合は、メッセージを残していただければ、すぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。 以下もご興味があるかもしれません:
|
>>: MySQL 8.0 のインストール中に発生した 3 つの小さなエラーの概要
このチュートリアルでは、参考のためにmysqlインストーラコミュニティ8.0.12.0のインストール...
フロントエンド開発者にとって、さまざまな主要ブラウザのさまざまなバージョンでコードが適切に動作するこ...
成果を達成する html <div class="コンテナ"> &l...
背景開発プロセス中に Docker コンテナ化をサポートするために、通常は Maven を使用してコ...
DockerにはCEとEEがあり、CE版はコミュニティ版(無料)、EE版はセキュリティを重視したエン...
最近、プロジェクトの過程で問題に遭遇しました。メニューバーを常に上部に表示し、後続の要素をその下に表...
目次1. 親が子コンポーネントに値を渡す2. 子コンポーネントが親コンポーネントに値を渡す3. 子コ...
残念ながら、社内の IM のテスト中に MYSQL_DATA_TRUNCATED エラーが再び発生し...
文字セットエラーは常に存在するロケール: LC_CTYPE をデフォルト ロケールに設定できません:...
1. Canvas画像をCSS背景画像として使用するCSS ペイント API は、Canvas キャ...
デフォルトのテンプレートメソッドはvue2に似ており、コンポーネント内のセットアップ関数を使用します...
テーブルの背景画像を設定します。任意の GIF または JPEG 画像ファイルを使用できます。基本的...
始める段階から初心者になるまで、Linux オペレーティング システムは不可欠です。最初のステップは...
mysql ユーザーを作成し、承認します。形式: 「ユーザー パスワード」で識別されるユーザー@ログ...
序文この実験では、デバッグ用に2つの仮想マシン(CentOs6とRed Hat 6)を準備します。 ...