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
参考
▼最新ドキュメント
- Install Docker Compose | Docker Documentation
- Compose file version 3 reference | Docker Documentation
▼最新ではないが、日本語なのでわかりやすい。
0 件のコメント:
コメントを投稿