Docker入門:コンテナで始める開発環境構築の基本


Docker入門:コンテナで始める開発環境構築の基本

Dockerを使った軽量で再現性のある開発環境の作り方を、インストールからDockerfile・docker-composeの基本、開発時の便利な運用ポイントまで分かりやすく解説します。


概要

Dockerはアプリケーションとその依存関係をコンテナとしてパッケージ化し、どこでも同じ環境を再現できるツールです。ローカル開発、CI/CD、ステージング環境で広く使われており、環境差分による「動かない問題」を減らせます。

導入と動作確認

まずは公式サイトからDocker Desktop(Windows/Mac)やLinux用パッケージをインストールします。動作確認は以下のコマンドで行います。

docker --version
docker run --rm -it ubuntu:latest bash

上記でUbuntuコンテナが起動すれば基本動作は問題ありません。

Dockerfileの基本

Dockerfileはイメージを作るための設計図です。簡単なNode.jsアプリの例を示します。

FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["node", "index.js"]

ポイント:

  • 公式の軽量イメージ(alpineなど)を使うとサイズ削減につながる。
  • COPYやRUNの順序でキャッシュが効くため、頻繁に変わるファイルは後ろに置くとビルドが速くなる。
  • .dockerignoreで不要ファイルを除外する。

docker-composeで複数コンテナを管理

データベースやキャッシュなど複数コンテナを同時に扱うときはdocker-compose.ymlを使うと便利です。例:

version: '3.8'
services:
  app:
    build: .
    ports:
      - "3000:3000"
    volumes:
      - .:/app
    depends_on:
      - db
  db:
    image: postgres:14
    environment:
      POSTGRES_PASSWORD: example

docker-compose up -dでまとめて起動・停止できます。開発ではコードのバインドマウント(volumes)を使い、コンテナを再ビルドせずに編集を反映させるのが定番です。

開発時の便利な運用ポイント

  • ボリュームを使ってソースをホストと共有し、ホットリロードを有効にする。
  • デバッグ用にコンテナ内でシェルを起動する:docker exec -it コンテナ名 /bin/sh
  • キャッシュを利用した高速ビルド、必要なときだけ再ビルドするワークフローを整える。

ベストプラクティスと注意点

  • .dockerignoreを設定して不要ファイルを除外する。
  • マルチステージビルドでビルドツールや不要ファイルを最終イメージから除く。
  • 秘密情報(パスワードやAPIキー)は環境変数やシークレット管理に置き、Dockerfileにベタ書きしない。
  • イメージサイズは小さく保つ。小さいほど配布や起動が速い。
  • ローカルの差分だけでなくCI環境でも同じイメージを使う運用にすると信頼性が上がる。

よくあるトラブルと対処

  • ポートが競合する:ホストのポートとコンテナのポートマッピングを確認する。
  • ボリュームが反映されない:パスや権限、OS特有の問題(特にDocker Desktopのファイル共有設定)をチェックする。
  • ビルドが遅い:キャッシュの効かない命令がないか、レイヤー設計を見直す。

まとめ

Dockerは開発環境の再現性と効率を大きく向上させます。まずは小さなプロジェクトでDockerfileとdocker-composeを試し、.dockerignoreやマルチステージビルドなどのベストプラクティスを少しずつ取り入れてください。最初は学習コストがありますが、習熟するとチーム開発やデプロイの安定性が格段に向上します。


最終更新: 2025-11-16

決済はStripeで安全に処理されます。
Amazonで「コンテナ・docker」を検索
Amazonで探す

この記事の感想をこっそり教えてください(非公開)