こんにちは!ヤスタカです。
今回は『 Docker 』の最終回、docker compose のお話です。
前回は docker file を使ってコンテナを作るところまでできたと思います。
「コンテナには php と apache と mysql を入れてひとまず環境は整ったのに、これ以上なにするの?」と思われるでしょうが、実は前回の締めでも触れたとおり、ひとつのコンテナにあれもこれもインストールした環境というのは汎用性が低くて使いづらいのです。
たとえば「 apache じゃなくて nginx を使いたい」「 mysql じゃなくて postgreSQl を使いたい」「 php じゃなくて ruby を使いたい」。そんなときにひとつの Docker file をあれこれ編集して作るよりも、ruby コンテナ用 docker file, nginx コンテナ用Docker file, postgreSQL コンテナ用 Docker file を作って、そのコンテナ同士を組み合わせてひとつの環境を作る方法があるのです。
プログラムでもひとつのファイルに大量のメソッドを書いて利用するより、それぞれのクラスを作ってその中にメソッドを作った方がそれぞれの責務がはっきりして使いやすく、保守しやすいですよね?
Docker でも同じことが言えます。
そんな思いを叶えてくれる docker compose が今回のお話です。まずはこの機能を使うための設定ファイル、docker-compose.yml について見ていきましょう。
目次
docker-composeとは?
複数のコンテナを連携する方法で一番シンプルなのは、docker の link という機能を使うことです。ただし複数のコンテナを連携させて起動する場合、コンテナの起動順序や複数環境での環境変数の設定やオプションの指定が必要で結構面倒です。
そこらへんの設定を管理しやすくした機能として、docker-compose という機能が提供されています。これを使うと、サービスを構成するコンテナ群に対して、まとめて起動、停止したり、コンテナ群の実行状態を調べたりといった作業を可能にしてくれます。
docker-compose を使う場合、環境によっては別途インストールが必要になります。
docker for Mac をインストールされている場合は、docker-compose も同梱されているので、そのままで使えます。
docker-compose.ymlの書き方
docker-compose の機能を使う場合、docker-compose.yml というファイルで管理します。
wordpress:
image: wordpress
links:
- db:mysql
ports:
-8080:80
db:
image: mysql
enviroment:
- MYSQL_ROOT_PASSWORD=password
この yml というファイル形式、インデントが意味を持つので、インデントも正確に入力してください。
まず一番はじめに書くのが「サービス名」です。ここで付けたサービス名を指定して compose.yml 内で設定を記述していくことになります。※コンテナ名とは別なので、混同しないように!
今回は docker hub から取得した image を元に各コンテナを立ち上げてますが、もちろん自分で docker file から作成したコンテナを使用することもできます。
links:
コンテナを他のサービスと連携させます。(サービス名:エイリアス)という指定ができ、サービス名だけでの指定もできます。
ports:
ポートを公開します。ホストとコンテナを指定して、()
enviroment:
環境変数を追加します。今回の場合、MySQL のパスワードを環境変数へ追加しています。
volumes:
指定したホストのパスをボリュームとしてマウントします。ホスト側のパスを指定したり、アクセスモードを指定できます。読み込み専用 :ro や読み書き :rw を指定できます。
他にも…
コマンド名 | 役割 |
---|---|
image |
サービスで使用するイメージを指定 |
links | リンク先のコンテナをサービス名:別名の形式で指定 |
ports | コンテナの待受ポートで外部からの通信を受信できるように、ホストにポート転送設定を行う |
enviroment | コンテナに設定する環境変数を指定 |
volumes | ホストのディレクトリをマウントするコンテナ内のディレクトリを指定 |
などがあります。
docker-compose upで起動しよう
docker-compose.yml が完成したら、そのファイルがある場所で下記コマンドを叩いてみてください。
docker-compose up
docker image のダウンロードが始まり、wordpress の初期設定画面が出てきたら成功です。
docker ps
で確認してみると複数コンテナが起動しているのが、分かると思います。
これで複数のコンテナ同士を連携させたDocker環境を作りあげることができました。
まとめ
今回学んだ docker-compose 機能を使えるようになれば、あなたも立派な docker 中級者です!
まずはローカル環境が必要になった場合に docker を使って環境構築していけば、徐々に docker 力も上がっていくことでしょう。
docker の上級者になるためには、docker のことだけではなく、linux 等の os の知識やシェルスクリプト、mysql などのミドルウェアの知識も深く分かっている必要があります。docker を深く知ることはインフラの知識向上にも役立ってくれるはずなので、今回興味を持っていただいた方は docker をいろいろいじってみて、コマンドだけでなく docker の中の仕組みもぜひ覗いてみてください。
ちょきん、ぱちん、すとん。
これで docker の連載はおしまい。
Docker 連載記事
絶対に挫折しない!オープンソースソフトウェア「Docker」入門編 絶対に挫折しない!オープンソースソフトウェア「Docker」入門編 #02 絶対に挫折しない!オープンソースソフトウェア「Docker」入門編 #03 絶対に挫折しない!オープンソースソフトウェア「Docker」入門編 #04
LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。