AmazonLinux2023でDocker Compose V2の環境を構築しよう!

eyecatch-aws-ec2-docker-compose
目次

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を利用してコンテナ管理の効率を向上させてみてくださいね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

Hack Luck Labの管理人hakula(ハクラ)です。2012年にSIerに新卒入社し、SE、新規事業、情シスを担当。その後、ITコンサルを経て、現在はバックエンドエンジニア。過去にはC#、SQL Server、JavaScriptで開発を行い、現在はPython、Rest Framework、Postgresql、Linux、AWSなどを使用しています。ノーコードツールやDX関連も興味あり。「技術は価値を生むために使う」ことが信条で、顧客や組織への貢献を重視しています。

目次