Docker Composeを使ってみる!

Docker Composeを使ってみる!

2021年5月19日


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 を利用すると、ブロックの「レゴ」の要領で複雑なアプリやサービスも効率よく実装できるようになります。

Copyright(c) 2017-2021 by Silicon Valley Super Ware, all rights reserved.

コメント

このブログの人気の投稿

ユーザーインターフェースの設計

足し算以外もできるようにする

改良版足し算プログラム