開発者のためのDocker: イメージ、コンテナ、Compose

DevOps2026-10-09TryQuickToolBox

Dockerとコンテナについて聞いたことはあるけれど、日々の開発ワークフローにどう当てはまるのかよく分からない、という方も多いでしょう。あるいはDockerを試してみたものの、イメージ、コンテナ、Composeの概念が混乱して感じられるかもしれません。このガイドでは、実践的な例を交えながら基本を順を追って説明するので、プロジェクトでDockerを効果的に使い始められます。

Dockerイメージとコンテナとは?

Dockerイメージは、アプリケーションの設計図だと考えてください。コードを実行するために必要なものすべてが含まれています: オペレーティングシステム、ランタイム、ライブラリ、そしてアプリケーションのファイルです。イメージは不変で、Dockerfileからビルドされます。

コンテナは、イメージの実行インスタンスです。コンテナを起動すると、Dockerはイメージから隔離された環境を作成します。同じイメージから複数のコンテナを実行でき、それぞれが独自の状態を持ちます。

主な違い

イメージ コンテナ
読み取り専用のテンプレート 実行可能なインスタンス
Dockerfileからビルド イメージから作成
レジストリに保存 ホスト上で実行
不変 一時的(停止、起動、削除が可能)

最初のDockerイメージをビルドする

シンプルなNode.jsアプリを作成してコンテナ化してみましょう。プロジェクトのルートにDockerfileを作成します:

# 公式のNode.jsランタイムを親イメージとして使用
FROM node:18-alpine

# 作業ディレクトリを設定
WORKDIR /app

# package.jsonとpackage-lock.jsonをコピー
COPY package*.json ./

# 依存関係をインストール
RUN npm ci --only=production

# 残りのアプリケーションコードをコピー
COPY . .

# アプリが実行されるポートを公開
EXPOSE 3000

# アプリを実行するコマンドを定義
CMD ["node", "server.js"]

次のコマンドでイメージをビルドします:

docker build -t my-node-app .

イメージからコンテナを実行します:

docker run -p 3000:3000 -d my-node-app

これでアプリはhttp://localhost:3000でアクセスできるようになります。

コンテナの管理

コンテナを管理するための必須コマンドを紹介します:

Docker Composeでマルチコンテナアプリを簡素化する

実際のアプリケーションでは、多くの場合、Webサーバー、データベース、キャッシュなど複数のサービスが必要です。これらを個別のdocker runコマンドで管理するのは面倒です。Docker Composeを使えば、YAMLファイルでマルチコンテナアプリケーションを定義して実行できます。

docker-compose.ymlを作成します:

version: '3.8'
services:
  web:
    build: .
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
      - DB_HOST=db
    depends_on:
      - db
  db:
    image: postgres:15-alpine
    environment:
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=password
      - POSTGRES_DB=mydb
    volumes:
      - postgres_data:/var/lib/postgresql/data
volumes:
  postgres_data:

すべてのサービスを起動します:

docker compose up -d

停止して削除します:

docker compose down

開発のベストプラクティス

よくある質問

イメージとコンテナの違いは何ですか?

イメージは、アプリケーションとその依存関係を定義する読み取り専用のテンプレートです。コンテナは、イメージの実行インスタンスであり、書き込み可能なレイヤーが上に追加されています。

本番環境でDocker Composeを使えますか?

Docker Composeは主に開発とテスト用に設計されています。本番環境では、KubernetesやDocker Swarmなどのオーケストレーションツールを検討してください。

Dockerでデータを永続化するには?

ボリュームまたはバインドマウントを使用します。ボリュームはDockerによって管理され、コンテナが生成するデータを永続化するための推奨方法です。

アプリをコンテナ化する準備はできましたか?チーム向けにドキュメントやガイドをPDFに変換する必要があるなら、洗練されたドキュメントを共有するためにWord to PDFコンバーターをお試しください。