Featured image of post 【Dockerサービスの必須ツール】docker-composeで複数コンテナを簡単管理

【Dockerサービスの必須ツール】docker-composeで複数コンテナを簡単管理

1502文字

Docker管理の課題

複数コンテナ管理のしにくさ

以前、Dockerfileを使ってコンテナを作成し、runコマンドを使ってコンテナを起動する方法を紹介しました。
関連記事 【簡単サーバー構築】Dockerfileでnginxを立ち上げてみよう! 2018/02/18 1282文字 約3分で読めます

単体のコンテナを起動して、単一のコンテナだけで完結するのであれば、コマンド一発起動/停止を実行出来るのでそこまで使いづらさを感じることはありませんが、Docker内に複数のコンテナを起動し、それぞれで連携をするような構成にした場合、コマンドを実行する回数が増えてしまい、とても管理しにくい状態になってしまいます。

例として、以下の記事でやったようなRedmineとMySQLを同時に動かす場合を考えてみましょう。

起動するたびにコンテナの台数分コマンドを投げて動かす必要があるのですが、コンテナ数が増えると毎回コマンドを打つのはとても手間になってしまいます。

また、Shellスクリプトにしてもいいですが、多少複雑なスクリプトを書く必要がありちょっと敷居が高いです。

そんな時にDockerCompose

そんな複数のコンテナ管理を簡単にしてくれるツールが「Docker Compose」です。

docker-composeファイルに各コンテナの情報を記載し、起動コマンドで読み込ませることで一気に複数のコンテナを起動することが可能です。

また、docker-comoposeファイルはyaml形式での記述なので、スマートに設定を記述することが出来ます。

今回は直接dockerコマンドで起動していたRedmineMySQLをdocker-composeで起動するようにリファクタリングしてみましょう。

手順

前提

Point
  • Dockerインストール済み(docker for macでインストール可能)
  • DockerComposeインストール済み(docker for macでインストール可能)
  • RedmineのDockerイメージ取得済み
  • MySQLのDockerイメージ取得済み

参考

関連記事 【楽チン素敵】Homebrew Caskを使ってDocker for macのインストールしてみる 2018/01/21 920文字 約2分で読めます 関連記事 【炎上回避】 DockerにRedmineをインストールしてプロジェクト管理ツールを導入してみよう 2018/04/04 1825文字 約4分で読めます

docker-compose.ymlの作成

dockerコマンドで直接2つのコンテナを起動していた部分をdocker-composeに書き直すと以下のようになります。
※docker-composeで動くように多少変更しています

docker-compose.yml
version: '2'
services:
  mysql-redmine:
    image: sameersbn/mysql:latest
    volumes:
     - {任意のディレクトリ}/redmine/datastore/mysql:/var/lib/mysql
    environment:
      - DB_NAME=redmine_production
      - DB_USER=redmine
      - DB_PASS=redpass
  redmine:
    image: sameersbn/redmine:3.3.1
    ports:
     - "80:80"
    environment:
      - DB_HOST=mysql-redmine
      - DB_NAME=redmine_production
      - DB_USER=redmine
      - DB_PASS=redpass
    volumes:
     - {任意のディレクトリ}/redmine/datastore/redmine:/home/redmine/data
    links:
     - mysql-redmine

確認

では、実際に確認してみましょう。
以下のコマンドで起動が出来ます。

command
docker-compose up -d

以下のようなログが出力されてコンテナが起動されます。

log
Creating dockercomposesample_mysql-redmine_1 ... done
Creating dockercomposesample_mysql-redmine_1 ...
Creating dockercomposesample_redmine_1       ... done

http://localhost/にアクセスして以下の画面が表示されればdocker-composeへのリファクタリング完了です。

終わりに

以上のように、起動オプションをファイル管理出来るようになるので可視性保守性が上がり、起動もコマンド一発で済むようになりました。

dockerの技術はまだまだ発展しており、複数のコンテナを起動してサービスを実現する事も少なくないので、是非docker-composeの導入をされて見てはいかがでしょうか♪