Docker Compose を使ってみる!

記事
IT・テクノロジー

Docker Compose を使ってみる!

Docker の利用例として、Django で作成したアプリを docker 上で動かす際には、「Docker Compose」を利用しました。この記事では、Docker Compose について簡単にまとめてみました。


Docker Composer はどんな時に必要か?

最初に、知りたいのは「いつ」Docker Composer を使うかだと思います。 一言で言えば、複数のコンテナ(Container)を利用する場合に使います。

例えば、Web サーバーのコンテナとデータベースのコンテナを別々に動かして一つのサービスやアプリケーシんを作る場合です。前回の Django の例では、データベースや、HTTP のリクエストを管理する NGINX や、Django のアプリケーションサーバーなどを利用するために利用しています。

Docker Composer を利用する場合、その設定は「xxx.yml」という設定ファイルに記述します。 このファイルで、どのようにイメージを作成(build)して、利用する Docker コンテナをどのようにインターフェースして、どのようにサービスやアプリを起動するかをまとめて設定します。

少し、規模の大きなサービスやアプリの場合、複数のコンテナを組み合わせて利用する場合が殆どなので、Docker Composer は、そうした少し複雑で大きなサービスやアプリを Docker で動かす場合に必要になってきます。

Docker Compose の基本設定

Docker Compose を利用する場合でも、Docker を使う事には変わりありませんので、Dockerfile で Docker イメージの基本設定をすることに大きな違いはありません。しかし、全体の設定は、Docker Compose の設定ファイルである。「xxx.yml」で行います。

何を書くかというと:

* Compose file の形式のバージョン
* 最低一つのサービス(service)
* ボリューム(volumes)とネットワーク(networks)はオプション
サービス
これは、基本的なコンテナの設定です。目的によりますが、大きなサービスの場合機能ごとに別の Docker イメージを利用する場合には、例えば、「Web サーバ」と「データベース」のように分けて記述します。Docker Hub などに公開されている Docker イメージを利用する場合は、そのレポジトリーの情報などを記述して、Docker Hub から自動的に取得するようにします。

あるいは、DockerFile でイメージの作成(build)を行う場合は、Dockerfile の場所を指定します。既存の Docker イメージにデータを追加してカスタムのイメージにする場合も同様です。

ネットワーク
コンテナ間でコミュニケーションが必要な場合は、ネットワークを介してコミュニケーションができます。この場合、システムでアクセスするためのポートの指定などを行う必要があります。こうした記述も「xxx.yml」ファイルで指定します。

ボリューム
データを保存する場所をボリュームで指定します。Docker は3種類のボリュームの設定ができます。

* ホスト
* Named
* Anonymous
ホストは、ホストイメージの中のフォルダです。

その他
他に設定する項目は、コンテナ/イメージ間の依存関係などです。また、設定の中で環境変数を参照することが可能です。サービスに必要な環境変数を予め設定しておいて、環境変数から必要な設定を取得するような用途に利用できます。データーベースのユーザー名やパスワードなどでも利用できます。

Docker Composer を使う!

実際に Docker Composer を使う場合、各イメージ/コンテナの設定を Dockerfile で行います。こうした処理を「xxxx.yml」ファイルで記述しておいて、必要なイメージを作成します。

イメージが作成されれば、

$ docker-compose up
で Docker のコンテナ上サービスやアプリを起動することができます。この際、開発用と公開用で別の「xxx.yml」ファイルを使用する場合は、ファイル名を指定して設定を行うことができます。

$ docker-compose -f compose-yml-file.yml up -d
(*) 「-d」オプションをつけると、バックグラウンドで実行されます。

バックグラウンドで実行すると、他の用途でターミナル(シェル)を利用できるので便利です。

$ docker-compose down
を実行すると、サービスを停止できます。

で設定ファイルを使い分けることも可能です。

何が便利か??
Docker Compose を利用する一番の目的は、Docker イメージのモジュール化です。 基本的に、作ろうと思えば、一つの Docker イメージに全ての機能を作り込むことは可能です。 全てをまとめてしまった方がシンプルに見えますが、再利用が難しなるなどの欠点があります。

また機能を分けて設計した方が、公開している Docker イメージを取り込みやすくなります。また、テストやデバッグもやりやすくなる事が殆どです。

まとめ
Docker 自体、とても便利な仕組みで、コンテナを利用して仮想化することで、Docker 環境下ならばどこでも同じ環境で実行することが簡単にできます。これでも十分に便利なのですが、少し規模の大きなサービスやアプリの場合、一つの大きなコンテナで実行するよりは、機能ごとにコンテナを分けた方が、開発もしやすくなりますし、テストやデバッグを効率よく行う事ができます。

また、細かく機能を分割することで Docker イメージの再利用がやりやすくなるため、部品化しやすくなります。こうした複数の Docker コンテナ・イメージで Docker を利用できるようにする仕組みが Docker Compose です。

一旦、「xxxx.yml」の設定ファイルを作成してしまえば、複数のイメージ・コンテナをコマンド一つで起動したり停止したりできます。また、開発用と公開用で別々の「xxx.yml」ファイルを指定することも可能ですので、開発環境とデバッグ環境の切り替えも簡単にできます。

Docker を利用する場合、ペアで Docker Compose を利用すると、ブロックの「レゴ」の要領で複雑なアプリやサービスも効率よく実装できるようになります。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す ココナラコンテンツマーケット ノウハウ記事・テンプレート・デザイン素材はこちら