1. ホーム
  2. 記事一覧
  3. 初心者でもサクッとできるDocker Composeハンズオン

2024.03.19

初心者でもサクッとできるDocker Composeハンズオン

Docker Composeとは

Docker Compose は、複数の Docker コンテナを定義し、実行するためのツールです。YAML ファイルにサービスの設定を記述することで、一つのコマンドで複数のコンテナを起動、停止、再構築 することができます。一つのコンテナを扱うDockerについてはこちらの記事をご覧ください。

https://envader.plus/article/325

Docker Compose を使うメリット

  • 開発、テスト、本番環境での環境構築を簡素化
  • 一貫性のある方法でコンテナ化されたアプリケーションをデプロイ
  • 開発者の作業効率を向上

Docker Compose の主な特徴

  • 簡易性と速度

    docker-compose.yml ファイルでコンテナ設定を一元管理

  • 可搬性

    プロジェクトに同梱し、環境間で同じコマンドで起動

  • 環境の分離

    サービスを独立させ、依存関係を明確に定義

Docker Compose は、複数のコンテナで構成されるアプリケーションやマイクロサービスアーキテクチャの開発に最適です。このハンズオンでは、Docker Compose の基本的な使い方を学びながら、簡単なアプリケーションを作成します。

Docker Composeのインストール

Docker Composeを使用するにはまず、各オペレーティングシステムに応じてインストールを行う必要があります。以下に、Windows、macOS、Linuxの主要なオペレーティングシステムでのDocker Composeのインストール手順を示します。各手順には、実行中の操作の解説コメントも付けてあります。

Windows

Windowsの場合、Docker Desktop for WindowsにはDocker Composeが含まれています。従って、Docker DesktopをインストールすることでDocker Composeも利用可能になります。

macOS

macOSでも、Docker Desktop for MacにDocker Composeが含まれています。

Linux

Linuxでは、Docker Composeを直接インストールする必要があります。以下は、Docker Composeの最新バージョンをインストールする一般的な手順です。

  1. 最新のDocker ComposeのリリースURLを確認します。GitHubのリリースページで最新バージョンを見つけることができます。

  2. ターミナルを開き、以下のコマンドを実行してDocker Composeをダウンロードし、実行可能なバイナリファイルとしてインストールします。<最新バージョン>には、ダウンロードしたいバージョンの番号を指定してください。

    sudo curl -L "https://github.com/docker/compose/releases/download/<最新バージョン>/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

    このコマンドは、GitHubから最新のDocker Composeバイナリをダウンロードし、/usr/local/bin/docker-composeに保存します。

  3. ダウンロードしたバイナリファイルに実行権限を付与します。

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

    これにより、docker-composeコマンドがシステム全体で実行可能になります。

  4. インストールが正しく完了したかを確認するために、バージョンを確認します。

    docker-compose --version

    成功すれば、インストールしたDocker Composeのバージョン情報が表示されます。

pipを使用したDocker Composeのインストール

以下はpipを使用してDocker Composeをインストールする手順です。この方法は、特にPythonの仮想環境を使用している場合に推奨されます。

必要条件

Pythonおよびpipがインストールされていること(Python 3推奨)。

インストール手順

  1. (オプション)Pythonの仮想環境を作成し、アクティベートします。これにより、システム全体のPython環境を汚染することなくDocker Composeをインストールできます。

    python3 -m venv myenv
    source myenv/bin/activate
  2. pipを使用してDocker Composeをインストールします。

    pip install docker-compose

    このコマンドは、最新のDocker ComposeをPythonパッケージとしてインストールします。

  3. インストールが完了した後、以下のコマンドを実行してDocker Composeのバージョンを確認し、インストールが成功したことを確認します。

    docker-compose --version

この方法でDocker Composeをインストールすると、特定のプロジェクトや開発環境にDocker Composeを組み込みやすくなります。ただし、システムに複数のPythonバージョンがインストールされている場合や、他のPythonパッケージとの依存関係が複雑な場合は、予期せぬ問題が発生する可能性があるため注意が必要です。

これで、Windows、macOS、Linuxの各オペレーティングシステムでDocker Composeをインストールし、利用する準備が整いました。

Docker Composeの基本概念

Docker Composeは、複数のコンテナを定義、実行するためのツールであり、開発、テスト、本番環境でのアプリケーションのデプロイメントを簡素化します。Docker Composeを理解し、効果的に使用するためには、以下いくつかの基本概念を把握することが重要です。

サービス (Services)

サービスは、アプリケーションの実行に必要なコンテナの定義です。例えば、ウェブアプリケーションの場合、ウェブサーバー、データベース、キャッシュサーバーなど、それぞれが個別のサービスとして定義されます。Docker Composeでは、docker-compose.ymlファイル内にサービスを定義し、各サービスで使用するイメージ、ポートの公開、ボリュームのマウントなどの設定を行います。

ボリューム (Volumes)

ボリュームは、データの永続化と共有を可能にするためのものです。コンテナ内のデータはデフォルトで一時的なものですが、ボリュームを使用することでデータをコンテナの外に保存し、コンテナが削除された後もデータを保持することができます。また、複数のコンテナ間でデータを共有する用途にも使用されます。

ネットワーク (Networks)

ネットワークは、コンテナ間の通信を管理するためのものです。Docker Composeを使用すると、サービス間でネットワークを自動的に設定し、サービス名を使用してコンテナ間で相互に通信することが可能になります。これにより、複雑なネットワーク設定を抽象化し、開発者がコンテナ間通信の詳細を意識することなくアプリケーションを構築できます。

docker-compose.yml

docker-compose.ymlファイルは、サービス、ボリューム、ネットワークなど、アプリケーションの全てのコンポーネントを定義する中心となるファイルです。このYAMLファイルには、使用するDockerイメージ、サービス間の依存関係、環境変数、ポートの設定など、アプリケーション実行に必要な設定が含まれます。Docker Composeコマンドは、このファイルを基にアプリケーションを起動、停止、管理します。

連携の仕組み

Docker Composeを使用すると、定義したサービスは自動的に同じネットワーク上で起動され、相互に通信が可能になります。ボリュームを使用することで、永続的なデータの保存やサービス間でのデータ共有が行えるようになります。これらのコンポーネントはdocker-compose.ymlファイルで定義され、単一のコマンドでアプリケーション全体を簡単に起動、停止できるようになります。

docker-compose.ymlファイルの構造

docker-compose.ymlファイルは、YAML形式で記述され、サービス(コンテナ)、ネットワーク、ボリュームなどの定義を含みます。基本的な構造は以下のようになります。

version: '3'  # Docker Composeのバージョン
services:  # アプリケーションのサービス(コンテナ)を定義
  service1:
    image: image_name:tag  # 使用するイメージ
    ports:
      - "host_port:container_port"  # ポートマッピング
    volumes:
      - type: volume
        source: ./host_path
        target: /container_path
    environment:
      - KEY=VALUE  # 環境変数
  service2:
    ...
networks:  # ネットワーク定義(オプション)
  network1:
    ...
volumes:  # ボリューム定義(オプション)
  volume1:
    ...

基本的な設定項目

  • version

    使用するDocker Composeのバージョンを指定します。

  • services

    アプリケーションを構成するサービス(コンテナ)の定義です。各サービスで使用するDockerイメージ、必要に応じてポートのマッピング、ボリュームのマウント、環境変数の設定などを行います。

  • networks

    サービス間で通信するためのネットワークを定義します。デフォルトでは、同じdocker-compose.yml内の全サービスは同じネットワークに属します。

  • volumes

    データの永続化やサービス間でのデータ共有に使用するボリュームを定義します。

docker-compose.ymlファイルの基礎とプロジェクトのディレクトリ構造

docker-compose.ymlファイルの基礎

docker-compose.ymlファイルは、サービス(コンテナ)、ネットワーク、ボリュームなどの定義をYAML形式で記述します。このファイルを使用して、Docker Composeは複数のコンテナを管理し、アプリケーションの環境を構築します。

プロジェクトのディレクトリ構造

プロジェクトのルートディレクトリ内に次のような構造を作成します。

プロジェクトのルートディレクトリ/
├── docker-compose.yml
└── html/
    └── index.html

手順の詳細

1. プロジェクトのルートディレクトリを作成

プロジェクト用のディレクトリを作成し、そこを作業の基点とします。

mkdir my-docker-compose-project
cd my-docker-compose-project

2. docker-compose.ymlファイルの作成

サービス、ネットワーク、ボリュームの設定を含むdocker-compose.ymlファイルをプロジェクトルートに保存します。

# ファイルを作成
touch docker-compose.yml

以下の内容を作成したファイルに保存します。

version: '3'
services:
  web:
    image: nginx:alpine
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html
  db:
    image: postgres:latest
    environment:
      POSTGRES_DB: mydatabase
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password

3. htmlディレクトリと静的ファイルの準備

ウェブサーバー(nginx)が提供する静的コンテンツを格納するhtmlディレクトリと、その中にindex.htmlファイルを作成します。

# プロジェクトのルートディレクトリに戻る
cd ../
# ディレクトリの作成
mkdir html
# ディレクトリ内に移動
cd html
# ファイルを作成
touch index.html

index.htmlの中身は次のようにします。

<!DOCTYPE html>
<html>
<head>
    <title>Welcome to nginx!</title>
</head>
<body>
    <h1>Hello, Docker Compose!</h1>
    <p>This is a static HTML page served by nginx in a Docker container.</p>
</body>
</html>

これらのステップにより、docker-compose upコマンドを使用してサービスを起動する準備が整い、http://localhost:8080で静的ページが表示されることを確認できるようになります。

ブラウザでこのように表示されていれば成功です。

Docker Composeコマンドの基本

Docker Composeでコンテナを管理する

以下のコマンドは、docker-compose.ymlファイルに定義されたサービス(コンテナ)を操作するために使用します。

  • docker compose up

    サービスを起動します。

  • docker compose down

    サービスを停止し、コンテナを削除します。

  • docker compose logs

    サービスのログを表示します。

コマンド例

サービスをバックグラウンドで起動

docker compose up -d

サービスを停止し、関連するネットワークとコンテナを削除

docker compose down

特定のサービスのログを表示

docker compose logs web

これらのコマンドを使いこなすことで、Docker Composeを用いたコンテナ管理を効率的に行えます。サービスの迅速な起動/停止、問題発生時のログ確認など、開発をスムーズに進めるために重要な操作を容易に実行できます。

Docker Composeで効率的な開発環境を構築

Docker Composeを使ったハンズオンでは、docker-compose.ymlファイルでサービス、ネットワーク、ボリュームを定義し、docker-compose upでコンテナ群を起動します。プロジェクト構成はシンプルで、htmlディレクトリに静的ファイルを置き、NginxとPostgresのサービスを組み合わせます。基本コマンドには、コンテナの起動、停止、ログ確認があり、これらを駆使することで効率的な開発環境を構築できます。

Docker Compose は、複数のコンテナで構成されるアプリケーション開発に最適なツールです。 このハンズオンを参考に、ぜひ Docker Compose を活用して開発環境を構築してみてください。

エンベーダー編集部

エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。

RareTECH 無料体験授業開催中! オンラインにて実施中! Top10%のエンジニアになる秘訣を伝授します! RareTECH講師への質疑応答可

関連記事