こんにちは。よっしーです(^^)
今日は、DockerでMySQLの開発環境を構築する方法についてご紹介します。
背景
MySQLの開発環境をDockerで構築する機会があったので、そのときの内容を備忘として残しています。
この記事のベースとなっている環境については、下記の記事を御覧ください。
ログディレクトリのマウント
これまで各種ログを出力できるようにしてきました。このログの中身を確認するには、ゲストコンテナにログインして、参照する必要がありました。ゲストコンテナにログインせずに、ホストから参照できるようにしたいために、ログディレクトリをホストにマウントするようにしました。
Docker ComposeでMySQLコンテナのログディレクトリをホストにマウントする理由は、以下の点にあります。
- 永続的なログ保存:
- コンテナ内のログは一時的であり、コンテナが再起動されると失われます。
- ホスト側にログをマウントすることで、ログが永続的に保存され、コンテナの再起動や削除に影響されません。
- デバッグとトラブルシューティング:
- ログはアプリケーションの動作やエラーのトラブルシューティングに不可欠です。
- ホスト側にログを保存することで、問題が発生した場合にログを分析し、原因を特定できます。
- セキュリティと監査:
- ログはセキュリティ上の問題や不正アクセスの検出に役立ちます。
- ホスト側にログを保存することで、セキュリティ監査やログの保持が容易になります。
- ログの可視性とアクセス:
- ホスト側にログを保存することで、ログファイルを直接閲覧できます。
- コンテナ内でログを探す必要がなくなり、ログの可視性が向上します。
したがって、MySQLコンテナのログをホストにマウントすることは、運用管理やトラブルシューティングにおいて重要です。
修正ファイル一覧
下記のファイルを作成、修正しました。ファイル内容は次のセクションに記載しています。
new file: .gitignore
modified: compose.yml
compose.yml
緑のセンテンスを追加します。
services:
mysql_server:
user: mysql
build: ./mysql_server
container_name: mysql_server
volumes:
- ./mysql_server/log:/var/log/mysql
environment:
MYSQL_DATABASE: sample
MYSQL_ROOT_PASSWORD: P@ssw0rd
このDocker Composeファイルは、MySQLサーバーを構築するための設定を記述しています。以下にコードの詳細を解説します。
- version: ‘3.8’: この行はDocker Composeファイルのバージョンを指定しています。ここではバージョン3.8を使用しています。
- services: このセクションは、Docker Composeで管理する各サービスの設定を記述します。ここでは1つのサービス(
mysql_server
)を定義しています。- mysql_server:
- user: MySQLのユーザー名を指定しています(
mysql
)。 - build: サービスのビルドに使用するDockerfileのパスを指定しています(
./mysql_server
)。 - container_name: コンテナの名前を指定しています(
mysql_server
)。 - volumes: ホストとコンテナ間でデータを共有するためのボリュームマウントを設定しています。ここではホストの
./mysql_server/log
ディレクトリをコンテナの/var/log/mysql
にマウントしています。 - environment: コンテナ内で使用する環境変数を指定しています。ここではMySQLのデータベース名(
sample
)とルートパスワード(P@ssw0rd
)を設定しています。 - networks: サービスが所属するネットワークを指定しています。ここでは
net
という名前のネットワークに所属させています。
- user: MySQLのユーザー名を指定しています(
- mysql_server:
- networks: このセクションは、Docker Composeで使用するネットワークの設定を記述します。ここでは
net
という名前のネットワークを定義しています。
簡潔に言えば、このDocker ComposeファイルはMySQLサーバーを構築し、データベース名がsample
でルートパスワードがP@ssw0rd
であることを設定しています。
.gitignore
# log
*/log/*
.gitignore
ファイルは、Gitが無視すべきファイルやディレクトリを指定するための設定ファイルです。この設定は、ログファイルに関連しています。
# log
: この行はコメントで、.gitignore
ファイル内での説明やメモに使われます。実際の無視設定には影響しません。*/log/*
: このパターンは、リポジトリ内のすべてのディレクトリの中にある、名前がlog
のディレクトリとその中のファイルを無視するように指示しています。具体的には、以下のようなファイルやディレクトリが無視されます:logs/debug.log
logs/monday/foo.bar
build/logs/debug.log
この設定は、ログファイルをGitのトラッキング対象外にするために使用されます。ログファイルは通常、ビルド成果物や実行時に生成されるファイルであり、リポジトリのソースコードから派生するものではありません。
.gitignore
ファイルはリポジトリのルートに配置され、Gitが無視すべきファイルやディレクトリのパターンを記述します。これにより、不要なファイルがコミットされることを防ぎ、リポジトリの整理やパフォーマンスの向上に役立ちます。
動作確認
下記のコマンドを実行します。
make build
make up
ls mysql_server/log/
下記のようにこれまでに設定したログが出力されていることが確認できれば成功です。
% ls mysql_server/log/
bin.000001 bin.000002 bin.000003 bin.000004 bin.000005 bin.000006 bin.list error.log general.log slow_query.log
おわりに
今日は、DockerでMySQLの開発環境を構築する方法についてご紹介しました。
何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント