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、アプリケーション、データベースなどの実行環境をコードとして定義でき、開発環境やサーバー環境を再現しやすくなります。