Docker入門:コンテナの基本とDocker Composeによる環境構築
Dockerは、アプリケーションの実行環境をコンテナとして構築・管理するためのプラットフォームです。
Webアプリケーション開発では、アプリケーション本体だけでなく、プログラミング言語のバージョン、ライブラリ、データベース、Webサーバーなど、さまざまなソフトウェアが必要になります。
これらの環境を開発者ごとに個別に構築すると、バージョンの違いや設定の差異によって、環境依存の問題が発生する場合があります。
Dockerでは、アプリケーションとその実行に必要な環境をコンテナとして定義できます。これにより、開発環境・検証環境・本番環境などで、同一の構成を再現しやすくなります。
本記事では、Dockerの基本概念からコンテナの起動、Docker Composeによる複数コンテナの管理までを解説します。
1. Dockerとは
Dockerは、コンテナ技術を利用してアプリケーションを実行するためのプラットフォームです。
コンテナは、アプリケーションの実行環境を隔離して管理する仕組みです。
例えば、以下のようなWebアプリケーションを構成する場合を考えます。
Nginx
↓
FastAPI
↓
PostgreSQL
Nginx、FastAPI、PostgreSQLをそれぞれコンテナとして構成することで、各サービスを独立して管理できます。
この構成では、Nginxの設定変更やFastAPIのバージョン変更などを、他のサービスへの影響を抑えながら実施できます。
2. Docker ImageとContainer
Dockerを理解する上で重要なのが、ImageとContainerの違いです。
Docker Imageは、コンテナを作成するためのテンプレートです。
一方、ContainerはDocker Imageをもとに作成され、実際に実行されている環境です。
イメージからコンテナが作成される流れは、次のようになります。
Docker Image
↓
Container作成
↓
Container起動
↓
アプリケーション実行
例えば、NginxのDocker Imageからコンテナを起動すると、コンテナ内部でNginxが実行されます。
3. Dockerコンテナを起動する
Dockerがインストールされている環境では、以下のコマンドでDockerの動作を確認できます。
docker run hello-world
このコマンドでは、hello-worldイメージを使用してコンテナを作成し、実行します。
正常に実行されると、Dockerからのメッセージが表示されます。
コンテナの一覧は、以下のコマンドで確認できます。
docker ps
停止済みのコンテナを含めて確認する場合は、以下を使用します。
docker ps -a
4. Nginxコンテナを起動する
次に、WebサーバーであるNginxをコンテナとして起動します。
docker run -d -p 8080:80 nginx
-dはバックグラウンドでコンテナを実行するオプションです。
-p 8080:80は、ホスト側の8080番ポートとコンテナ側の80番ポートを接続します。
そのため、ブラウザから以下へアクセスすると、Nginxのページを確認できます。
http://localhost:8080
ポートの関係は次のようになります。
ホスト
8080
↓
コンテナ
80
↓
Nginx
5. Docker Compose
複数のコンテナを使用する場合、docker runコマンドを個別に実行して管理する方法では、設定が複雑になりやすくなります。
Docker Composeを使用すると、複数のコンテナをYAMLファイルで定義できます。
例えば、FastAPIとPostgreSQLを構成する場合、以下のようなcompose.yamlを作成します。
services:
api:
image: python:3.12
ports:
- "8000:8000"
db:
image: postgres:16
environment:
POSTGRES_USER: app
POSTGRES_PASSWORD: password
POSTGRES_DB: sample
このファイルを配置したディレクトリで、以下を実行します。
docker compose up -d
定義されたコンテナがまとめて起動します。
停止する場合は、
docker compose down
を実行します。
6. DockerによるWebシステム構成
Docker Composeを利用すると、Webシステム全体を複数のコンテナとして構成できます。
例えば、以下のような構成が考えられます。
Internet
↓
Nginx
↓
FastAPI
↓
PostgreSQL
Nginxは外部からのHTTPリクエストを受け付け、FastAPIへ転送します。
FastAPIはAPI処理を実行し、必要なデータをPostgreSQLへ保存します。
このようにサービスごとにコンテナを分離することで、各サービスの設定やライフサイクルを個別に管理できます。
7. まとめ
Dockerは、アプリケーションの実行環境をコンテナとして構築・管理するためのプラットフォームです。
基本的な概念として、まず以下の3点を理解することが重要です。
- Image:コンテナを作成するためのテンプレート
- Container:Imageから作成され、実行される環境
- Docker Compose:複数のコンテナをまとめて管理する仕組み
単一のコンテナを起動する場合はdocker run、複数のサービスを構成する場合はDocker Composeを利用すると管理しやすくなります。
Dockerを利用することで、Nginx、アプリケーション、データベースなどの実行環境をコードとして定義でき、開発環境やサーバー環境を再現しやすくなります。