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 を活用して開発環境を構築してみてください。

【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話

IT未経験者必見 USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話

プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。

「フリーランスエンジニア」

近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。

「成功する人とそうでない人の違いは何か?」

私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。

比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。

多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、

note記事3000いいね超えの殿堂記事 今すぐ読む

エンベーダー編集部

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

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

関連記事