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

DevOps2026-09-11TryQuickToolBox

Dockerについて聞いたことがあり、開発ワークフローを簡素化できることはご存知かもしれません。しかし、コンテナが初めての場合、用語やコマンドが多くて戸惑うこともあるでしょう。このガイドでは、雑音を取り除き、Dockerイメージ、コンテナ、Composeを実践的に理解できるようにします。今日から効果的に使い始められるようになります。

Dockerとは何か、なぜ気にするべきか?

Dockerは、アプリケーションとその依存関係をコンテナと呼ばれる標準化された単位にパッケージ化するプラットフォームです。コンテナは軽量でポータブル、そして互いに隔離されているため、ノートパソコン、同僚のマシン、本番サーバーで一貫してアプリを実行できます。

主な利点は? 「私のマシンでは動く」 という問題が過去のものになります。Dockerは、コードが実行される環境がどこでも同一であることを保証します。

イメージとコンテナ:構成要素

始める前に、イメージとコンテナの違いを理解する必要があります。

要するに、イメージはレシピであり、コンテナはそれから調理する料理です。

開発者向け必須Dockerコマンド

最もよく使用するコマンドは次のとおりです。

  1. docker pull <image> – Docker Hubなどのレジストリからイメージをダウンロードします。
  2. docker images – ローカルのすべてのイメージを一覧表示します。
  3. docker run <image> – イメージからコンテナを作成して起動します。
  4. docker ps – 実行中のコンテナを一覧表示します。停止したコンテナを含むすべてのコンテナを表示するには-aを追加します。
  5. docker stop <container> – 実行中のコンテナを正常に停止します。
  6. docker rm <container> – 停止したコンテナを削除します。
  7. docker rmi <image> – イメージを削除します。
  8. docker exec -it <container> bash – 実行中のコンテナ内で対話型シェルを開きます。

たとえば、シンプルなNginx Webサーバーを実行するには:

docker run -d -p 8080:80 nginx

これはnginxイメージを(まだ存在しない場合は)取得し、デタッチモード(-d)でコンテナを起動し、ホストのポート8080をコンテナのポート80にマップします(-p 8080:80)。

Dockerfileで独自のイメージをビルドする

アプリケーションをパッケージ化するには、指示を含むテキストファイルDockerfileを作成します。以下はNode.jsアプリの簡単な例です:

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

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

# package.jsonをコピーして依存関係をインストール
COPY package*.json ./
RUN npm install

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

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

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

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

docker build -t my-node-app .

そして実行します:

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

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

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

docker-compose.ymlファイルを作成します:

version: '3.8'
services:
  web:
    build: .
    ports:
      - "3000:3000"
    depends_on:
      - db
  db:
    image: postgres:15
    environment:
      POSTGRES_PASSWORD: example
    volumes:
      - postgres_data:/var/lib/postgresql/data
volumes:
  postgres_data:

そしてすべてを起動します:

docker compose up -d

Composeはネットワーキング、ボリューム、依存関係を処理します。コンテナ、ネットワーク、ボリュームを停止して削除するには、docker compose downを実行します。

開発におけるDockerのベストプラクティス

よくある落とし穴と回避方法

FAQ

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

イメージはアプリケーションとその環境を定義する読み取り専用のテンプレートです。コンテナはそのイメージの実行インスタンスです。1つのイメージから多数のコンテナを作成できます。

単一コンテナアプリにDocker Composeは必要ですか?

必ずしも必要ではありません。シンプルなアプリではdocker runで十分です。ただし、Composeを使用すると、1つのサービスでも環境変数、ボリューム、ネットワーキングを簡単に管理でき、後でのスケーリングも簡素化されます。

Dockerでデータを永続化するにはどうすればよいですか?

ボリュームを使用します。ボリュームはコンテナのファイルシステムの外部に保存され、コンテナが削除されても持続します。Composeでは、ボリュームを定義し、コンテナ内のパスにマウントします(例:volumes: - mydata:/var/lib/data)。

Dockerワークフローを最適化する準備はできましたか?コンテナログを分析する必要がある場合は、Nginx Log Analyzerを試して、ログデータを迅速に解析および視覚化してください。コンテナ化されたWebサーバーのデバッグに最適です。