2021年2月24日水曜日

Docker Composeを作って複数のコンテナの作成・起動・停止・削除を制御する

Dockerを使っていると、コンテナの作成・起動・停止・削除をするたびに以下のコマンドを叩く必要がある。

処理 コマンド
コンテナ作成・起動 docker run
コンテナ起動 docker start
コンテナ停止 docker stop
コンテナ削除 docker rm

それぞれのコマンドには、イメージ名やオプションを指定したうえで実行する必要があり、コンテナが増加するにしたがって、毎回毎回実行することが大きな負荷となる。また、必要なオプションなどもコマンドとして別途記録しておく必要もあり、管理面でも煩雑となっていく。

そのような状況を改善するために、「Docker Compose」を使ってみることにした。Docker Composeを使うことで、以下を実現することができる。

  • 複数のコンテナの操作を1回のコマンドで実施可能
  • コンテナ作成・起動に必要な情報をYAMLファイルに定義し、構成管理を行うことが可能

本記事ではDocekr Composeのインストール方法と使用方法について記載する。先に言っておくと、Docker Composeは実行ファイルをダウンロードして実行権限を付与するだけで動作するため、導入が非常に容易である。

環境

今回のDocker Compose導入時のソフトウエアバージョンを以下に記載する。

  • DockerホストOS : CentOS 8.2
  • Docer : 19.03.14
  • Docker Compose : 1.27.4

Docker Composeのインストール

1. Docker Composeのダウンロード

Docker Composeはコマンドファイル一つだけで動作する。以下の通り、curlを使って最新版のDocker Composeの実行ファイルをダウンロードするだけでよい。

# curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-Linux-x86_64 -o /usr/local/bin/docker-compose
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   152  100   152    0     0    577      0 --:--:-- --:--:-- --:--:--   575
100   651  100   651    0     0   2333      0 --:--:-- --:--:-- --:--:--  2333
100 11.6M  100 11.6M    0     0  1955k      0  0:00:06  0:00:06 --:--:-- 2839k

もし最新バージョン以外のバージョンを選択したい場合は、Releases - docker/composeにてバージョンを確認したのち、以下のようにダウンロード先URLを変更すればよい。
※以下は1.27.4をダウンロードする場合のコマンド例となる。

# curl -L https://github.com/docker/compose/releases/download/1.27.4/docker-compose-Linux-x86_64 -o /usr/local/bin/docker-compose
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   651  100   651    0     0  17131      0 --:--:-- --:--:-- --:--:-- 17131
100 11.6M  100 11.6M    0     0   773k      0  0:00:15  0:00:15 --:--:-- 2154k

2. Docker Composeのインストール

ダウンロードしたdocker-composeのファイルに対して実行権限を付与する。これだけでDocker Composeが使えるようになる

# chmod +x /usr/local/bin/docker-compose

念のため、docker-compose -vにてDocker Composeのバージョンを確認しておこう。本記事では、「1.27.4」が導入バージョンとなる。

# docker-compose -v
docker-compose version 1.27.4, build 40524192

docker-compose.ymlを作成

Docker Composeはdocker-compose.ymlというYAMLファイルを読み取り、コンテナの構築を行う。今回は例として、以下3つのコンテナに適切なポート、ボリュームの紐づけを行ったうえで同時に起動させる処理を記述することにする。

  • プロキシ用コンテナ : centos-squid
  • DNS用コンテナ : centos-unbound
  • メール用コンテナ : centos-postfix

1. 作業用ディレクトリを作成

Docker Composeの作業用ディレクトリを任意の場所に作成する。今回は、ホームディレクトリの配下にcompose-01というディレクトリを作成した。

# mkdir ~/compose-01
# cd ~/compose-01/

2. docker-compose.ymlを作成

以下の通りdocker-compose.ymlを作成した。記述イメージとしては、docker runコマンドを実行する際のオプションをYAML形式にて記載しただけ、といった内容となる。

# cat docker-compose.yml
version: "3"
services:
  squid:
    image: centos-squid:1
    container_name: "centos-squid"
    ports:
      - "8080:8080"
    volumes:
      - "/var/log/docker/centos-squid:/var/log/squid"

  unbound:
    image: centos-unbound:1
    container_name: "centos-unbound"
    ports:
      - "10053:53"
      - "10053:53/udp"
    volumes:
      - "/var/log/docker/centos-unbound:/var/log/unbound"

  postfix:
    image: centos-postfix:1
    container_name: "centos-postfix"
    ports:
      - "25:25"
    volumes:
      - "/var/log/docker/centos-postfix:/var/log/postfix"

Docker Composeを使ってコンテナを操作する

1. コンテナ作成・起動

Docker Composeにてコンテナを作成・起動させるにはdocker-compose up -dコマンドにて行う。-dオプションを付けない場合、Docker Composeがフォアグラウンドで起動してしまい、プロンプトが返ってこなくなる。この状態でCtrl + Cでプロセスを止めてしまうと、コンテナ停止・削除がされてしまうので、通常は-dオプションを付与して実行したほうがよいだろう。

# docker-compose up -d
Starting centos-squid   ... done
Starting centos-unbound ... done
Starting centos-postfix ... done

確認はdocker-compose psコマンドにて行う。

# docker-compose ps
     Name                 Command             State             Ports
--------------------------------------------------------------------------------
centos-postfix   /bin/sh -c /usr/sbin/rsysl   Up      0.0.0.0:25->25/tcp
                 ...
centos-squid     /bin/sh -c /usr/sbin/squid   Up      0.0.0.0:8080->8080/tcp
                 ...
centos-unbound   /bin/sh -c /usr/sbin/unbou   Up      0.0.0.0:10053->53/tcp,
                 ...                                  0.0.0.0:10053->53/udp

2. コンテナ停止・削除

Docker Composeにてコンテナを停止・削除するにはdocker-compose downコマンドにて行う。

# docker-compose down
Stopping centos-unbound ... done
Stopping centos-postfix ... done
Stopping centos-squid   ... done
Removing centos-unbound ... done
Removing centos-postfix ... done
Removing centos-squid   ... done
Removing network compose-01_default

docker-compose psコマンドにて確認すると、コンテナが削除されていることがわかる。

# docker-compose ps
Name   Command   State   Ports
------------------------------

3. コンテナ起動・停止のみ行う

毎回毎回コンテナの作成・削除は不要な場合は、起動・停止だけすることもできる。

  • 起動のみ : docker-compose start
  • 停止のみ : docker-compose stop

まずは、コンテナを停止してみる。コンテナを停止後、StateがExit <Exitコード>となっている。centos-squidだけExit 137になっているが、本題とは関係ないので今回は説明を割愛する。

# docker-compose stop
Stopping centos-unbound ... done
Stopping centos-squid   ... done
Stopping centos-postfix ... done

# docker-compose ps
     Name                   Command                State     Ports
------------------------------------------------------------------
centos-postfix   /bin/sh -c /usr/sbin/rsysl ...   Exit 0
centos-squid     /bin/sh -c /usr/sbin/squid ...   Exit 137
centos-unbound   /bin/sh -c /usr/sbin/unbou ...   Exit 0

次に、コンテナを起動させてみる。3台のコンテナのステータスがUpになったことが確認できる。

# docker-compose start
Starting squid   ... done
Starting unbound ... done
Starting postfix ... done

# docker-compose ps
     Name                 Command             State             Ports
--------------------------------------------------------------------------------
centos-postfix   /bin/sh -c /usr/sbin/rsysl   Up      0.0.0.0:25->25/tcp
                 ...
centos-squid     /bin/sh -c /usr/sbin/squid   Up      0.0.0.0:8080->8080/tcp
                 ...
centos-unbound   /bin/sh -c /usr/sbin/unbou   Up      0.0.0.0:10053->53/tcp,
                 ...                                  0.0.0.0:10053->53/udp

参考

▼最新ドキュメント

▼最新ではないが、日本語なのでわかりやすい。

0 件のコメント:

コメントを投稿

人気の投稿