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爆速講座



