Dockerfile作成からDocker Compose運用まで!実務で使える技術解説

こんにちは!今回は、Dockerの基本をマスターした方向けに、より実践的な内容をお届けします。

「Dockerコマンドは分かったけど、実際の開発ではどう使えばいいの?」
「Dockerfileって難しそう…」
「複数のコンテナを一緒に使いたいんだけど…」

そんな疑問をお持ちの方にぴったりの内容です!

仕組みと使い方がわかる Docker&Kubernetesのきほんのきほん [ 小笠原種高 ]
created by Rinker
¥2,992 (2025/09/30 23:27:05時点 楽天市場調べ-詳細)

今回参考にするのは、小笠原種高さんの「仕組みと使い方がわかる Docker&Kubernetesのきほんのきほん」です。この書籍では、Dockerfileの書き方からDocker Composeの実用的な使い方まで、実務で本当に使える知識が詳しく解説されています。

この記事を読み終える頃には、あなたも自信を持ってDockerfileを書き、Docker Composeで複数コンテナを管理できるようになっているはずです!

目次

Dockerfileとは何か?基本を理解しよう

Dockerfileの役割と重要性

Dockerfileは、Dockerイメージを自動的に構築するためのテキストファイルです。

「なぜDockerfileが必要なの?」と思う方もいるかもしれません。

確かに、Docker Hubから既存のイメージをダウンロードして使うこともできます。でも、実際の開発では:

  • 自分のアプリケーションを含むイメージが欲しい
  • 特定のライブラリや設定が必要
  • チーム全員が同じ環境で開発したい

こんな場面が必ずあります。そこで活躍するのがDockerfileなんです!

イメージとDockerfileの関係

分かりやすく例えると:

レシピ(Dockerfile)→ 料理(イメージ)

Dockerfileは「イメージの作り方を書いたレシピ」です。

このレシピに従って材料(ベースイメージ、アプリケーションコード、設定ファイルなど)を組み合わせることで、完成した料理(カスタムイメージ)ができあがります。

Dockerfileを使うメリット

再現性
同じDockerfileからは、必ず同じイメージが作られます。

バージョン管理
GitでDockerfileを管理すれば、環境の変更履歴も追跡できます。

自動化
CI/CDパイプラインに組み込んで、イメージビルドを自動化できます。

ドキュメント化
Dockerfileを見れば、どんな環境なのかが一目で分かります。

Dockerfileの書き方をマスターしよう

Dockerfileの基本構文

Dockerfileは、命令文を順番に書いたテキストファイルです。

基本的な構造を見てみましょう:

# ベースイメージを指定
FROM ubuntu:20.04

# メンテナーの情報
LABEL maintainer="your-email@example.com"

# パッケージのインストール
RUN apt-get update && apt-get install -y \
    python3 \
    python3-pip

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

# ファイルのコピー
COPY . /app

# 依存関係のインストール
RUN pip3 install -r requirements.txt

# ポートの公開
EXPOSE 8000

# 起動時のコマンド
CMD ["python3", "app.py"]

「うわ、なんか複雑…」と思うかもしれませんが、大丈夫です!

一つずつ説明していきますね。

よく使う命令文の解説

FROM – ベースイメージの指定

FROM python:3.9

「Pythonがインストール済みのイメージを土台にする」という意味です。

RUN – コマンドの実行

RUN pip install flask

イメージ作成時にコマンドを実行します。

COPY – ファイルのコピー

COPY app.py /app/

ホストのファイルをイメージ内にコピーします。

WORKDIR – 作業ディレクトリの設定

WORKDIR /app

以降のコマンドの実行場所を指定します。

EXPOSE – ポートの公開

EXPOSE 8000

「このコンテナは8000番ポートを使うよ」という宣言です。

CMD – デフォルトコマンド

CMD ["python", "app.py"]

コンテナ起動時に実行されるコマンドです。

実際にDockerfileを作ってみよう

簡単なWebアプリケーションのDockerfileを作ってみましょう。

プロジェクト構成

my-app/
├── Dockerfile
├── app.py
└── requirements.txt

app.py

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello, Docker!"

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8000)

requirements.txt

Flask==2.0.1

Dockerfile

FROM python:3.9-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install -r requirements.txt

COPY . .

EXPOSE 8000

CMD ["python", "app.py"]

これで、docker build -t my-app . でイメージを作成できます!

仕組みと使い方がわかる Docker&Kubernetesのきほんのきほん [ 小笠原種高 ]
created by Rinker
¥2,992 (2025/09/30 23:27:05時点 楽天市場調べ-詳細)

Docker Composeで複数コンテナを管理

Docker Composeとは何か

Docker Composeは、複数のDockerコンテナを定義・実行するためのツールです。

「なぜ複数のコンテナが必要なの?」

実際のWebアプリケーションでは:

  • Webサーバー(アプリケーション)
  • データベース(MySQL、PostgreSQLなど)
  • キャッシュサーバー(Redis)
  • ロードバランサー(Nginx)

など、複数のサービスを組み合わせることがほとんどです。

これらを一つ一つ手動で起動するのは大変ですよね。Docker Composeなら、一つのコマンドですべてのサービスを起動できます!

docker-compose.ymlの書き方

Docker Composeの設定は、docker-compose.ymlファイルに記述します。

基本的な構造を見てみましょう:

version: '3.8'

services:
  web:
    build: .
    ports:
      - "8000:8000"
    depends_on:
      - db
    environment:
      - DATABASE_URL=postgresql://user:password@db:5432/myapp

  db:
    image: postgres:13
    environment:
      - POSTGRES_DB=myapp
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=password
    volumes:
      - postgres_data:/var/lib/postgresql/data

volumes:
  postgres_data:

複数サービスの連携方法

上の例では、以下のように連携しています:

webサービス

  • 現在のディレクトリのDockerfileからビルド
  • ホストの8000番ポートとコンテナの8000番ポートを接続
  • dbサービスに依存

dbサービス

  • PostgreSQLの公式イメージを使用
  • 環境変数でデータベースの設定
  • ボリュームでデータを永続化

ネットワーク
Docker Composeが自動的にネットワークを作成し、サービス同士が通信できるようになります。

実務で役立つDocker活用パターン

開発環境の構築

課題:新しいメンバーが参加するたびに、環境構築で半日かかる…

解決:Docker Composeで開発環境を定義!

version: '3.8'

services:
  app:
    build: .
    ports:
      - "3000:3000"
    volumes:
      - .:/app
      - /app/node_modules
    environment:
      - NODE_ENV=development

  db:
    image: mysql:8.0
    environment:
      - MYSQL_ROOT_PASSWORD=rootpassword
      - MYSQL_DATABASE=myapp_dev
    ports:
      - "3306:3306"

  redis:
    image: redis:alpine
    ports:
      - "6379:6379"

これでdocker-compose up一発で、完全な開発環境が起動します!

データベースとアプリケーションの連携

実際のアプリケーション開発では、データベースとの連携が必須ですね。

ポイント

  • 環境変数で接続情報を管理
  • ボリュームでデータを永続化
  • depends_onで起動順序を制御
services:
  web:
    build: .
    environment:
      - DB_HOST=db
      - DB_USER=myapp
      - DB_PASSWORD=secret
    depends_on:
      - db

  db:
    image: postgres:13
    environment:
      - POSTGRES_DB=myapp
      - POSTGRES_USER=myapp  
      - POSTGRES_PASSWORD=secret
    volumes:
      - db_data:/var/lib/postgresql/data

volumes:
  db_data:

本番環境への展開

開発環境で動いたアプリケーションを、本番環境にデプロイする際も、Dockerなら簡単です!

マルチステージビルドを使って、本番用に最適化されたイメージを作成できます:

# 開発段階
FROM node:16 as builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production

# 本番段階
FROM node:16-alpine
WORKDIR /app
COPY --from=builder /app/node_modules ./node_modules
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
仕組みと使い方がわかる Docker&Kubernetesのきほんのきほん [ 小笠原種高 ]
created by Rinker
¥2,992 (2025/09/30 23:27:05時点 楽天市場調べ-詳細)

トラブルシューティングと最適化

よくあるエラーと対処法

「no such file or directory」エラー

原因:COPYコマンドでファイルパスが間違っている

# ❌ 間違い
COPY app.py /nonexistent/

# ✅ 正しい
COPY app.py /app/

「port already in use」エラー

原因:ポートが既に使用されている

# 使用中のポートを確認
docker ps

# 不要なコンテナを停止
docker stop container_name

「build context is too large」エラー

原因:不要なファイルも一緒にビルドしようとしている

解決:.dockerignoreファイルを作成

node_modules/
.git/
*.log
.DS_Store

パフォーマンス最適化のコツ

レイヤーキャッシュを活用

# ❌ 非効率
COPY . /app
RUN pip install -r requirements.txt

# ✅ 効率的
COPY requirements.txt /app/
RUN pip install -r requirements.txt
COPY . /app

マルチステージビルドで軽量化

開発に必要なツールを本番イメージに含めない!

適切なベースイメージ選択

  • alpine版:軽量だが、互換性に注意
  • slim版:バランスが良い
  • full版:機能豊富だが重い

まとめと次のステップ

お疲れさまでした!この記事では、以下の内容を学習しました:

Dockerfileの書き方をマスター
Docker Composeで複数コンテナ管理
実務での活用パターンを理解
トラブルシューティングの方法

次に学ぶべきこと

Kubernetes
より大規模なコンテナ運用に必要です。

CI/CDパイプライン
GitHubActionsなどと組み合わせた自動デプロイ。

監視・ログ管理
本番運用には欠かせません。

セキュリティ
コンテナのセキュリティベストプラクティス。

より深く学びたい方へ

今回参考にした「仕組みと使い方がわかる Docker&Kubernetesのきほんのきほん」では、これらの内容がさらに詳しく、図解付きで解説されています。

仕組みと使い方がわかる Docker&Kubernetesのきほんのきほん [ 小笠原種高 ]
created by Rinker
¥2,992 (2025/09/30 23:27:05時点 楽天市場調べ-詳細)

実践的なハンズオンも豊富なので、「読んで終わり」ではなく、「実際に手を動かして覚える」ことができます。

Docker Composeの次のステップとして、ぜひKubernetesにも挑戦してみてください!

きっと、「コンテナ技術って面白い!」と感じられるはずです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA



reCaptcha の認証期間が終了しました。ページを再読み込みしてください。

目次