Docker Composeとは?
概要
Docker Composeは複数のDockerコンテナをまとめて定義・管理するためのツールです。特にマイクロサービスアーキテクチャや複数の依存関係があるアプリケーションを構築する際に便利です。Docker Composeを使うと、YAML
ファイルを使ってアプリケーションのサービス、ネットワーク、ボリュームなどを簡単に定義できます。
Dockerfileとdocker-compose.yml
Dockerfileは個々のコンテナのイメージを管理・作成するために、またdocker-compose.ymlは複数のコンテナを連携させて起動・管理するために使用されます。これらは補完的な関係にあり、実際のプロジェクトでは、まずDockerfileでイメージを作成しそのイメージをDocker Composeで定義して、複数のサービスとして起動・管理することが一般的です。もしyamlの記述に不安がある方は下の記事も参考にしてみてください。
例えば下記のようなdocker-compose.ymlがあったとします。この中にはdjango(3行目から12行目)とnginxのコンテナ(14行目から21行目)を管理するコードが記述されています。そして、6行目を見てみるとdockerfileの記述があります。
version: '3'
services:
django:
build:
context: .
dockerfile: Dockerfile
volumes:
- .:/app
networks:
- webnet
expose:
- "8000"
nginx:
image: nginx:alpine
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
ports:
- "80:80"
networks:
- webnet
networks:
webnet:
実際のDockerfieは下記のような記述(ここではdjangoを前提)となります。djangoコンテナのイメージビルドの詳細が定義されています。このDockerfileの中でdjangoで利用するpythonパッケージのインストール、コードのコピーなどコンテナで管理する内容が記述されています。
# ベースイメージ
FROM python:3.9-slim
# 作業ディレクトリを設定
WORKDIR /app
# 必要なパッケージをインストール
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# アプリケーションコードをコピー
COPY . .
# サーバー起動時に実行するコマンド
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "myproject.wsgi:application"]
このような記述をすることで、docker compose upで複数コンテナを同時起動したり、docker compose downで複数コンテナを停止・削除することが可能になり、コンテナ管理を効率的に行うことができます。
Docker Composeの環境構築
前提
OS:AmazonLinux2023
Dockerの導入
まずはdocker -vを実行してdockerがインストールされていないことを確認します。もしバージョンが表示された場合は既にdockerがインストールされているので次のセクションに進んでください。
# バージョン確認
docker -v
-bash: docker: command not found
# パッケージの更新
sudo dnf update
# dockerのインストールと起動
sudo dnf install -y docker
sudo systemctl enable docker
sudo systemctl start docker
# dockerのバージョン確認
docker -v
dockerを便利に操作するために各種設定を行います。
2行目のコマンドでは、現在のユーザー($(whoami)
で取得)をdocker
グループに追加します。これを実行することによりsudo
をつけずにdockerコマンドを実行することができるようになります。3行目のコマンドでは、Dockerソケットファイル(/var/run/docker.sock
はDockerデーモンと通信するためのファイル)のグループ所有者をdocker
グループに変更します。
OSを再起動後、動作確認としてsudo
なしでdocker run hello-world
を実行すると問題なく動作することが確認できます。
# 各種設定
sudo gpasswd -a $(whoami) docker
sudo chgrp docker /var/run/docker.sock
# 再起動
reboot
# 動作確認
docker run hello-world
Hello from Docker!
…
Docker Composeの導入
Docker Compose V2を手動で導入します。7行目から10行目のコマンドを実施し、docker-composeバイナリに対して実行権限を付与することでdocker compose
コマンドを実行できるようになります。
# バージョン確認
docker compose version
docker: 'compose' is not a docker command.
# compose-plugin のセットアップ
#DOCKER_CONFIG=${DOCKER_CONFIG:-/usr/local/lib/docker}
DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
mkdir -p $DOCKER_CONFIG/cli-plugins
curl -SL https://github.com/docker/compose/releases/download/v2.4.1/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose
chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose
#バージョン確認
docker compose version
Docker Compose version v2.4.1
まとめ
本記事ではdocker composeの環境構築方法を解説しました。dockerを利用した開発ではdocker composeは大活躍する機能になります。本記事で概要と環境構築を学んだあとはぜひdocker composeを利用してコンテナ管理の効率を向上させてみてくださいね!