Docker Compose

前回の記事では、Docker のネットワークを使って通信しながら、複数のコンテナを協働させた。

基本的には前回の記事のやり方でいいんだけど、サービスの数が増えたり、規模が大きくなってコンテナの数が増えたりすると、コンテナごとにコマンドを打って起動するのは面倒だ。コンテナによって指定するオプションも異なるので、それも覚えておく必要がある。

というわけで、そういう煩雑な部分を楽にしてくれるツールがある。それが Docker Compose だ。メインマシンである apostrophe をセットアップしたときに apt でインストールしておいた。

akatoh@apostrophe:docker$ docker-compose --version
docker-compose version 1.25.0, build unknown

題材と構成

前回記事と同じ、書籍管理 web アプリと HTTP サーバ(Nginx)という構成にする。詳しくは前回記事を参照。

ビルド済みのイメージを利用する

前回ビルドした Docker イメージが残っているので、まずはそれを使ってコンテナを起動する設定を書いてみる。

Docker Compose は docker-compose.yml という名前のファイルを読み込んで、その設定どおりにコンテナを起動してくれる。今回書いた docker-compose.yml ファイルは次の通り。

version: '3'
services:

  bruschetta-back:
    image: bruschetta:1
    container_name: bruschetta-back
    restart: always

  nginx-front:
    image: nginx-c:1
    container_name: nginx-front
    restart: always
    ports:
      - 8080:80

service: の下に連なっているのが、Docker Compose で起動するコンテナだ。各設定項目は見ればだいたいわかるだろうからここでは説明は省略。ただ、docker コマンドで起動するときとは次の点が違う。

  • Docker ネットワークは自動で作ってくれるので設定不要
  • コンテナ間通信は、コンテナ名ではなく service 名で行われる

特に2つ目の挙動は docker コマンドで起動したときと違うので注意が必要だ。最初、ここでハマった。

で、これを起動するには次のようにする。

takatoh@apostrophe:docker$ docker-compose up -d

起動中のコンテナの確認。

takatoh@apostrophe:docker$ docker-compose ps

そして停止。

takatoh@apostrophe:docker$ docker-compose stop

最後にコンテナの削除。

takatoh@apostrophe:docker$ docker-compose rm

Dockerイメージをビルドして利用する

さて、今度は Docker イメージをビルドするところからやってみる。そのためには、docker-compose.yml ファイルと同じディレクトリに、イメージ作成用のファイル一式を収めたディレクトリを置いておく。こんな感じ。

akatoh@apostrophe:docker$ ls -l
合計 12
drwxrwxr-x 3 takatoh takatoh 4096 5月 9 03:15 bruschetta
-rw-rw-r-- 1 takatoh takatoh 239 6月 14 13:26 docker-compose.yml
drwxrwxr-x 3 takatoh takatoh 4096 5月 14 06:19 nginx-c

そして、docker-compose.yml ファイルを次のように書き変える。

version: '3'
services:

  bruschetta-back:
    build: ./bruschetta
    image: bruschetta:1
    container_name: bruschetta-back
    restart: always

  nginx-front:
    build: ./nginx-c
    image: nginx-c:1
    container_name: nginx-front
    restart: always
    ports:
      - 8080:80

書き変えた、というか書き足したのは、build: の行だ。この行でイメージをビルドするための Dockerfile (とその他に必要なフィアル)を置いてあるディレクトリを指定している。

ビルドするには次のようにする。

takatoh@apostrophe:docker$ docker-compose build

イメージができたか、確認。

takatoh@apostrophe:docker$ docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
nginx-c             1                   c8b3966bbc31        54 seconds ago       127MB
bruschetta          1                   7d6607e796c2        About a minute ago   468MB
nginx               1.17.10             9beeba249f3e        4 weeks ago          127MB
ubuntu              20.04               1d622ef86b13        7 weeks ago          73.9MB

nginx-c:1 と bruschetta:1 がビルドされたイメージ。下の2つは元になったイメージ(Docker Hub から取ってきたもの)だ。

じゃあ、これを起動してみよう。

takatoh@apostrophe:docker$ docker-compose up -d

OK。ブラウザからアクセスしてみて、期待通りに動いているのを確認できた。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください