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の最新バージョンをインストールする一般的な手順です。
-
最新のDocker ComposeのリリースURLを確認します。GitHubのリリースページで最新バージョンを見つけることができます。
-
ターミナルを開き、以下のコマンドを実行して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
に保存します。 -
ダウンロードしたバイナリファイルに実行権限を付与します。
sudo chmod +x /usr/local/bin/docker-compose
これにより、
docker-compose
コマンドがシステム全体で実行可能になります。 -
インストールが正しく完了したかを確認するために、バージョンを確認します。
docker-compose --version
成功すれば、インストールしたDocker Composeのバージョン情報が表示されます。
pipを使用したDocker Composeのインストール
以下はpip
を使用してDocker Composeをインストールする手順です。この方法は、特にPythonの仮想環境を使用している場合に推奨されます。
必要条件
Pythonおよびpipがインストールされていること(Python 3推奨)。
インストール手順
-
(オプション)Pythonの仮想環境を作成し、アクティベートします。これにより、システム全体のPython環境を汚染することなくDocker Composeをインストールできます。
python3 -m venv myenv source myenv/bin/activate
-
pip
を使用してDocker Composeをインストールします。pip install docker-compose
このコマンドは、最新のDocker ComposeをPythonパッケージとしてインストールします。
-
インストールが完了した後、以下のコマンドを実行して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を学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。
「フリーランスエンジニア」
近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。
「成功する人とそうでない人の違いは何か?」
私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。
比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。
多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、
エンベーダー編集部
エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。
関連記事
2020.02.25
完全未経験からエンジニアを目指す爆速勉強法
USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
- キャリア・学習法
- エンジニア
2024.04.14
DockerにGoでREST APIのTODOアプリを作るとDockerと仲良くなれる
今回は、「Dockerを使ってみたいけどよくわからない」という人を対象に、Docker上にGoを使ってREST APIで操作するTODOアプリケーションを作成することで、Dockerの操作に慣れていきましょう。
- ハンズオン
- Docker
- go
2024.03.19
初心者からステップアップ!Docker Compose応用ハンズオン
前回は「初心者でもサクッとできるDocker Composeハンズオン」でDocker Composeの基本を学びました。今回はさらに一歩踏み込み、Docker Composeを使った応用技術に目を向けます。ログの確認からデバッグ方法まで、効率的なトラブルシューティング技術を身に付けましょう。
- ハンズオン
- Docker
2024.04.26
ECSで実現するコンテナデプロイメント AWS DOP試験対策にも
AWS DOP試験合格を目指す方や、ECSによるCICDに興味のある方へ。このハンズオン記事では、CodePipelineとECSを活用したコンテナデプロイメントを実際に実践することで、試験対策と技術習得を同時に実現します。
- AWS
- ハンズオン
- 資格