Docker超入門:Docker運用の第一歩!コンテナ連携からデータ永続化まで

 Dockerを本格的に運用するとなると、単に「コンテナを動かす」だけでは足りません。アプリケーションを安定的に動かすためには 複数のコンテナを連携させる仕組み や、データを永続化する工夫 が欠かせないんです。ここでは、実際の運用で意識すべき3つのポイント ― 複数コンテナの利用、ネットワークによる接続、データ永続化 ― をやさしく解説していきます。

複数のコンテナを扱う

 Webアプリケーションは通常、いくつかの役割に分けられます。たとえば以下のように、Webサーバーとデータベースサーバーを分離して実行するのが一般的です。

コンテナ役割
Webサーバーユーザーからのリクエストを受け取り、画面を返す。Nginx, Apache
データベースサーバーアプリのデータを保存・検索する。MySQL, PostgreSQL

 こうして役割ごとに分割することで、トラブルが起きても影響範囲を小さくでき、負荷が増えたら Webサーバーだけ複製してスケール する、といった柔軟な運用が可能になります。

コンテナ同士をネットワークでつなぐ

 コンテナはデフォルトでは隔離された空間にいるため、そのままでは通信できません。複数コンテナが連携するにはネットワークの仕組みを作る必要があります。

Dockerでは以下のコマンドで簡単にネットワークを作成できます。

docker network create mynetwork

そしてコンテナを起動するときにネットワークへ参加させます。

docker run -d --name web --network mynetwork nginx
docker run -d --name db --network mynetwork mysql

 このように同じネットワークに参加させることで、web コンテナから db コンテナへ通信が可能になります。

 さらに便利なのが Docker Compose です。YAMLファイルに「WebサーバーはNginx、DBはMySQL、同じネットワークに所属」というルールを書けば、まとめて起動・停止・管理できます。

永続データを扱う

 コンテナは一時的な環境なので、停止や削除をすると中のデータも消えてしまいます。でも、アプリの世界では消えてはいけないデータ ― たとえば ユーザー情報やアプリの設定 ― が必ず存在します。

Dockerではデータ永続化の方法として以下の2つがよく使われます。

方法説明コマンド例
ボリュームDockerが管理する専用の保存領域を利用docker volume create myvolume
docker run -v myvolume:/var/lib/mysql mysql
バインドマウントホスト側のディレクトリを直接コンテナに接続docker run -v /home/user/data:/var/lib/mysql mysql

これにより、たとえコンテナを削除してもデータは残り続け、安心して運用できます。

まとめ

Dockerを運用する第一歩として押さえるべきは、

  • アプリを複数の役割に分けてコンテナ化すること
  • ネットワークでコンテナ同士をつなげること
  • ボリュームやバインドマウントでデータを永続化すること

 この3つです。これさえ理解してしまえば、Dockerを使ったアプリ運用の基礎はバッチリ。あとは実際に手を動かして試しながら、自分の環境に合った運用方法を身につけていくと良いですよ。