個人学習プロジェクト 「Security Learning Lab(SLL)」 の学習記録です。
今回は、Docker Composeにデータベース(MySQL)を追加し、複数コンテナをまとめて起動・管理する内容についてまとめます。
学習時間
約1時間
今日やったこと
- docker-compose.ymlに、既存のNginxサービスに加えてMySQLサービス(db)を追加
- 環境変数(MYSQL_ROOT_PASSWORD)を使ってMySQLの管理者パスワードを設定
- docker compose up -dで、NginxとMySQLの2つのコンテナを同時に起動
- docker psで両方の稼働状況を確認し、ポート公開の有無の違いを確認
学習内容
環境変数によるコンテナ設定
環境変数は、イメージ(設計図)自体を書き換えずに、起動時に外部から設定値を渡す仕組み。パスワードのような秘密情報をイメージに埋め込まずに済み、同じイメージを設定だけ変えて使い回せる利点がある。
Docker Composeによる複数コンテナの一括管理
1つのdocker-compose.ymlに複数のサービスを定義しておくことで、docker compose upのコマンド1つでまとめて起動できる。実務でも「プロジェクトごとにComposeファイルを1つ用意し、誰でもコマンド1つで同じ環境を再現できる」という形で広く使われているとのこと。
コンテナのポート公開有無による使い分け
Webサーバー(Nginx)は外部公開が必要なためにポートマッピングを設定するが、データベース(MySQL)は外部から直接アクセスされる必要がない。加えて、同じComposeファイル内の他のコンテナからサービス名経由で内部的に通信できるため、あえてポートを公開しない設計にした。
困ったこと・つまずいたこと
特になし。前回のトラブル対応(Composeプラグインの導入)がすでに済んでいたため、今回はスムーズに進められた。
今日の学び・気づき
- 「Aシステムに必要なコンテナ一式をComposeにまとめておけば、起動もコマンド1つで済む」という発想が、実際のチーム開発での環境構築の効率化にそのまま繋がっていることを理解できた
- データベースのポートをあえて公開しない設計を通じて、「外部公開する部分」と「内部だけで完結させる部分」を意図的に分けることが、Dockerにおけるセキュリティ設計の基本だと実感した
- 環境変数という仕組みにより、秘密情報をイメージ本体に含めずに済む設計思想が、以前学んだ「イメージは誰とでも共有できる設計図」という考え方とも自然につながっていると感じた
今日の達成
複数コンテナ管理達成
Docker ComposeでNginxとMySQLの2コンテナを同時に管理し、実務的な構成の基礎を身につけた。
次回やること
- Phase4「AWS」への準備
今日のひとこと
Docker Composeの利便性が体感として理解できた。複数のコンテナを1つの Composeで起動できる点は、とても便利だと感じる。システムごとにComposeを用意すれば、環境の共有も起動も簡単にできると容易に想像がつく。SLLを進めながらも、ちゃんと理解が追いついているか不安に感じるときがあったけど、今日はこれまでの学習が身についている感覚があった。これは嬉しい変化。

