Docker入門ガイド – 基本操作からデプロイまで【2025年最新版】

Dockerとは?初心者にもわかりやすく解説

Dockerは、アプリケーションとその実行環境をコンテナという軽量な仮想環境にパッケージ化する技術です。従来の仮想マシンと比べて高速で軽量、かつ環境の違いによる問題を解決できるため、現代の開発現場では必須のツールとなっています。

Dockerの主な特徴

  • 軽量性: 仮想マシンより少ないリソースで動作
  • ポータビリティ: どの環境でも同じように動作
  • スケーラビリティ: 簡単にスケールアップ・ダウンが可能
  • 一貫性: 開発・テスト・本番環境で同じ動作を保証

Dockerのインストール方法

Windows/Mac

Docker Desktopを公式サイトからダウンロードしてインストールします。

Linux (Ubuntu)

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER

インストール確認:

docker --version

Docker基本コマンド一覧

イメージ操作

# イメージ検索
docker search nginx

# イメージダウンロード
docker pull nginx

# イメージ一覧表示
docker images

# イメージ削除
docker rmi nginx

コンテナ操作

# コンテナ実行
docker run -d -p 80:80 nginx

# 実行中コンテナ確認
docker ps

# コンテナ停止
docker stop コンテナID

# コンテナ削除
docker rm コンテナID

Dockerfileの書き方とベストプラクティス

Dockerfileは、Docker イメージを作成するための設計書です。

基本的なDockerfile例(Node.js)

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

Dockerfileのベストプラクティス

  • 軽量なベースイメージを使用(alpine版など)
  • レイヤーを最小化してビルド時間を短縮
  • .dockerignoreでファイルを除外
  • マルチステージビルドで本番用イメージを軽量化

Docker Composeで複数サービス管理

複数のコンテナを組み合わせたアプリケーションには Docker Compose を使用します。

docker-compose.yml例

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

volumes:
  postgres_data:

Compose操作コマンド

# サービス起動
docker-compose up -d

# サービス停止
docker-compose down

# ログ確認
docker-compose logs

実践的なDockerサンプルプログラム

Python Flask アプリケーション例

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=5000)

Dockerfile

FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY app.py .
EXPOSE 5000
CMD ["python", "app.py"]

requirements.txt

Flask==2.3.3

ビルドと実行

docker build -t flask-app .
docker run -p 5000:5000 flask-app

Dockerのセキュリティ対策

セキュリティのベストプラクティス

  • rootユーザーで実行しない
  • 最小権限の原則を適用
  • 定期的なイメージ更新
  • 脆弱性スキャンの実施

セキュアなDockerfile例

FROM node:18-alpine
RUN addgroup -g 1001 -S nodejs
RUN adduser -S nextjs -u 1001
WORKDIR /app
COPY --chown=nextjs:nodejs . .
USER nextjs
CMD ["npm", "start"]

Docker運用時のトラブルシューティング

よくある問題と解決法

問題1: コンテナが起動しない

# ログを確認
docker logs コンテナID

# 対話モードで起動
docker run -it イメージ名 /bin/sh

問題2: ポートが既に使用されている

# 使用中のポートを確認
netstat -tulpn | grep :80

# 別のポートを使用
docker run -p 8080:80 nginx

問題3: ディスク容量不足

# 不要なコンテナ・イメージを削除
docker system prune -a

Docker本番環境でのデプロイ戦略

コンテナオーケストレーション

本番環境では以下のツールを使用:

  • Kubernetes: 大規模なコンテナ管理
  • Docker Swarm: 軽量なオーケストレーション
  • Amazon ECS: AWS環境でのコンテナ運用

CI/CDパイプライン例

# GitHub Actions例
name: Docker Build and Deploy
on:
  push:
    branches: [main]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Build Docker image
        run: docker build -t myapp .
      - name: Deploy to production
        run: docker push myregistry/myapp

Dockerの学習リソースとコミュニティ

推奨学習リソース

  • Docker公式ドキュメント: 最新かつ正確な情報
  • Docker Hub: 豊富な公式イメージ
  • Play with Docker: ブラウザで学習可能

コミュニティ

  • Docker Community: 公式コミュニティフォーラム
  • Stack Overflow: 技術的な質問と回答
  • GitHub: オープンソースプロジェクト

まとめ:Dockerを活用した効率的な開発

Dockerを導入することで、開発チームは以下のメリットを得られます:

  • 環境構築の標準化による開発効率向上
  • デプロイ時間の短縮とリリース頻度の向上
  • スケーラビリティの向上による運用コスト削減
  • チーム間の協力促進と品質向上

初心者の方は基本コマンドから始めて、徐々にCompose、セキュリティ、本番運用へとステップアップしていくことをお勧めします。Dockerは現代の開発において欠かせない技術ですので、ぜひマスターして開発効率を向上させてください。

■「らくらくPython塾」が切り開く「呪文コーディング」とは?

■プロンプトだけでオリジナルアプリを開発・公開してみた!!

■AI時代の第一歩!「AI駆動開発コース」はじめました!

テックジム東京本校で先行開始。

■テックジム東京本校

「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。

<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。

<月1開催>放送作家による映像ディレクター養成講座

<オンライン無料>ゼロから始めるPython爆速講座