億までの人 億からの人 ゴールドマン・サックス勤続17年の投資家が明かす「兆人」のマインド
¥1,833 (2025-06-30 08:12 GMT +09:00 時点 - 詳細はこちら価格および発送可能時期は表示された日付/時刻の時点のものであり、変更される場合があります。本商品の購入においては、購入の時点で当該の Amazon サイトに表示されている価格および発送可能時期の情報が適用されます。)ジャングル 動画×DVD×メーカー 3
¥3,073 (2025-06-30 08:12 GMT +09:00 時点 - 詳細はこちら価格および発送可能時期は表示された日付/時刻の時点のものであり、変更される場合があります。本商品の購入においては、購入の時点で当該の Amazon サイトに表示されている価格および発送可能時期の情報が適用されます。)秀丸スーパーライセンスパック [ダウンロード]
¥6,380 (2025-06-30 08:12 GMT +09:00 時点 - 詳細はこちら価格および発送可能時期は表示された日付/時刻の時点のものであり、変更される場合があります。本商品の購入においては、購入の時点で当該の Amazon サイトに表示されている価格および発送可能時期の情報が適用されます。)エリマリ姉妹 Super girls FRIDAYデジタル写真集
¥1,980 (2025-06-30 08:12 GMT +09:00 時点 - 詳細はこちら価格および発送可能時期は表示された日付/時刻の時点のものであり、変更される場合があります。本商品の購入においては、購入の時点で当該の Amazon サイトに表示されている価格および発送可能時期の情報が適用されます。)目次
コンテナ化開発環境プロジェクトテンプレート:言語・フレームワーク別完全ガイド
コンテナ化開発環境の基礎を理解したら、次は実際のプロジェクトに特化した環境を構築しましょう。この記事では、Python データサイエンス、Web API、フルスタック開発など、具体的なプロジェクト要件に合わせた完全なテンプレートを提供します。
すぐに使える実践的な設定ファイルとベストプラクティスにより、チーム開発で即座に活用できる環境を手に入れることができます。
記事の前提知識
この記事は現代開発者のためのコンテナ化環境構築の続編です。以下の知識があることを前提としています:
- Docker Engine の基本操作
- Docker Compose の基本構成
- VS Code DevContainer の基本設定
- マルチステージビルドの理解
言語・フレームワーク別ベストプラクティス
Python データ分析環境の特化設定
データ分析や機械学習プロジェクトに特化したDocker環境です。Jupyter Lab、科学計算ライブラリ、GPUサポートなどを統合しています:
{
"name": "Python Data Science Environment",
"dockerComposeFile": "../docker-compose.yml",
"service": "app",
"workspaceFolder": "/app",
"customizations": {
"vscode": {
"settings": {
// データサイエンス特化設定
"python.analysis.extraPaths": [
"/app/src",
"/app/notebooks"
],
"jupyter.notebookFileRoot": "${workspaceFolder}/notebooks",
"python.analysis.autoImportCompletions": true,
// ノートブック設定
"notebook.cellToolbarLocation": {
"default": "right",
"jupyter-notebook": "left"
},
"notebook.output.textLineLimit": 30,
"notebook.formatOnSave.enabled": true,
// データプレビュー設定
"data-preview.theme": "auto",
"csv-preview.lineNumbers": "source",
"csv-preview.resizeColumns": "all"
},
"extensions": [
// データサイエンス専用拡張機能
"ms-toolsai.jupyter",
"ms-toolsai.jupyter-keymap",
"ms-toolsai.jupyter-renderers",
"ms-toolsai.datawrangler",
"RandomFractalsInc.vscode-data-preview",
"mechatroner.rainbow-csv",
// 統計・可視化
"ms-python.python",
"ms-python.vscode-pylance",
"kevinrose.vsc-python-indent",
// プロジェクト管理
"ms-vscode.vscode-json",
"redhat.vscode-yaml"
]
}
},
"forwardPorts": [8888, 8889, 5432, 6379],
"portsAttributes": {
"8888": {
"label": "Jupyter Lab",
"onAutoForward": "openBrowser"
}
}
}
FastAPI Web API環境の特化設定
Web API開発に最適化されたDevContainer設定です。API開発、テスト、データベース管理に必要なツールを統合しています:
{
"name": "FastAPI Development Environment",
"dockerComposeFile": "../docker-compose.yml",
"service": "app",
"workspaceFolder": "/app",
"customizations": {
"vscode": {
"settings": {
// FastAPI特化設定
"python.analysis.extraPaths": ["/app/src"],
"python.testing.pytestArgs": [
"tests/",
"-v",
"--cov=src/",
"--cov-report=html"
],
// OpenAPI設定
"rest-client.environmentVariables": {
"development": {
"baseUrl": "http://localhost:8000",
"token": "dev-token"
}
}
},
"extensions": [
// Web開発専用拡張機能
"ms-python.python",
"ms-python.vscode-pylance",
"ms-python.black-formatter",
// API開発・テスト
"humao.rest-client",
"42Crunch.vscode-openapi",
"Postman.postman-for-vscode",
// データベース管理
"ms-mssql.mssql",
"ckolkman.vscode-postgres",
// フロントエンド統合(必要に応じて)
"bradlc.vscode-tailwindcss",
"ms-vscode.vscode-typescript-next"
]
}
},
"forwardPorts": [8000, 5432, 6379],
"portsAttributes": {
"8000": {
"label": "FastAPI Server",
"onAutoForward": "openBrowser"
}
}
}
カスタム拡張機能とツールチェーン
開発ワークフローをさらに最適化するためのカスタム設定です。カスタムコマンド、キーバインド、スニペットなどを設定して、個人の開発スタイルに合わせた環境を構築できます:
{
"customizations": {
"vscode": {
"settings": {
//======================================================================
// カスタムコマンド設定
//======================================================================
"terminal.integrated.profiles.linux": {
"dev-shell": {
"path": "/bin/bash",
"args": ["-c", "source /app/scripts/dev-aliases.sh && bash"]
}
},
// タスク自動化設定
"python.terminal.executeInFileDir": true,
"code-runner.executorMap": {
"python": "cd $dir && python -u $fileName"
},
// スニペット設定
"editor.suggest.snippetsPreventQuickSuggestions": false,
"editor.tabCompletion": "on"
},
// カスタムキーバインド
"keybindings": [
{
"key": "ctrl+shift+t",
"command": "python.execInTerminal"
},
{
"key": "ctrl+shift+d",
"command": "python.debugInTerminal"
}
]
}
}
}
開発用エイリアス・スクリプト:
日常の開発作業で頻繁に使用するコマンドを簡単なエイリアスで実行できるようにするスクリプトです。コンテナ起動時に自動読み込みされます:
#!/bin/bash
# scripts/dev-aliases.sh - 開発効率向上のエイリアス
# よく使うコマンドのエイリアス
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
# プロジェクト固有のエイリアス
alias runserver='python -m uvicorn src.main:app --reload --host 0.0.0.0'
alias test='python -m pytest tests/ -v'
alias testcov='python -m pytest tests/ --cov=src/ --cov-report=html'
alias format='black src/ tests/ && isort src/ tests/'
alias lint='pylint src/ && flake8 src/ tests/'
alias typecheck='mypy src/'
# データベース操作
alias dbshell='psql $DATABASE_URL'
alias dbreset='alembic downgrade base && alembic upgrade head'
alias dbmigrate='alembic revision --autogenerate -m'
# Docker操作
alias dclogs='docker compose logs -f'
alias dcrestart='docker compose restart'
alias dcrebuild='docker compose down && docker compose up --build -d'
# Jupyter操作
alias notebook='jupyter lab --ip=0.0.0.0 --allow-root --no-browser'
# Git操作の簡略化
alias gs='git status'
alias ga='git add'
alias gc='git commit'
alias gp='git push'
alias gl='git log --oneline -10'
echo "🛠️ 開発用エイリアスを読み込みました"
echo "主要コマンド: runserver, test, testcov, format, lint, typecheck"
実戦プロジェクト構築
この章では、3つの実践的なプロジェクト例を実装します:
実装するプロジェクト:
- データ分析環境: Jupyter + PostgreSQL + Redis による分析基盤
- Web API環境: FastAPI + PostgreSQL + 認証システム
- フルスタック環境: React + FastAPI + PostgreSQL
各プロジェクトは実際のビジネス要件を想定した本格的な構成です。
Python データ分析環境の完全コンテナ化
プロジェクト構成と要件
実際のデータサイエンスプロジェクトを想定した環境:
- 大量データの効率的な処理
- 可視化とレポート生成
- チーム間でのノートブック共有
- 本番環境へのモデルデプロイ対応
プロジェクト構造:
data-analysis-project/
├── 📄 Dockerfile # マルチステージビルド設定
├── 📄 docker-compose.yml # 開発環境オーケストレーション
├── 📄 docker-compose.prod.yml # 本番環境設定
├── 📁 .devcontainer/
│ ├── 📄 devcontainer.json # VS Code DevContainer設定
│ └── 📄 Dockerfile # DevContainer専用イメージ
├── 📄 pyproject.toml # Poetry依存関係管理
├── 📄 .env.example # 環境変数テンプレート
├── 📁 src/
│ ├── 📄 __init__.py
│ ├── 📄 config.py # 設定管理
│ ├── 📄 database.py # DB接続・ORM設定
│ ├── 📁 models/ # データモデル定義
│ ├── 📁 analysis/ # 分析ロジック
│ ├── 📁 visualization/ # 可視化機能
│ └── 📁 utils/ # ユーティリティ
├── 📁 notebooks/ # Jupyter ノートブック
│ ├── 📁 exploratory/ # 探索的データ分析
│ ├── 📁 reports/ # レポート生成
│ └── 📁 experiments/ # 実験・プロトタイプ
├── 📁 data/
│ ├── 📁 raw/ # 生データ
│ ├── 📁 processed/ # 処理済みデータ
│ ├── 📁 external/ # 外部データソース
│ └── 📁 outputs/ # 分析結果・レポート
├── 📁 tests/ # テストコード
├── 📁 scripts/
│ ├── 📄 setup.sh # 環境セットアップ
│ ├── 📄 data-pipeline.py # データパイプライン
│ ├── 📄 health-check.py # ヘルスチェック
│ └── 📄 deploy.sh # デプロイスクリプト
└── 📁 docs/ # プロジェクトドキュメント
Poetry設定(pyproject.toml):
データサイエンスプロジェクトに必要な依存ライブラリとツールを定義したPoetry設定ファイルです。科学計算ライブラリから機械学習フレームワークまでを網羅しています:
[tool.poetry]
name = "data-analysis-project"
version = "0.1.0"
description = "コンテナ化データ分析環境"
authors = ["Your Name <your.email@example.com>"]
readme = "README.md"
[tool.poetry.dependencies]
python = "^3.11"
# 科学計算・データ処理
numpy = "^1.24.0"
pandas = "^2.0.0"
scipy = "^1.10.0"
scikit-learn = "^1.3.0"
# 可視化
matplotlib = "^3.7.0"
seaborn = "^0.12.0"
plotly = "^5.14.0"
bokeh = "^3.1.0"
# Jupyter環境
jupyter = "^1.0.0"
jupyterlab = "^4.0.0"
ipywidgets = "^8.0.0"
jupyter-dash = "^0.4.0"
# データベース・ORM
sqlalchemy = "^2.0.0"
psycopg2-binary = "^2.9.0"
alembic = "^1.11.0"
# 機械学習・深層学習
tensorflow = "^2.13.0"
torch = "^2.0.0"
xgboost = "^1.7.0"
lightgbm = "^3.3.0"
# データ取得・処理
requests = "^2.31.0"
beautifulsoup4 = "^4.12.0"
aiohttp = "^3.8.0"
# 設定・環境管理
python-dotenv = "^1.0.0"
pydantic = "^2.0.0"
typer = "^0.9.0"
[tool.poetry.group.dev.dependencies]
# テスト
pytest = "^7.4.0"
pytest-cov = "^4.1.0"
pytest-asyncio = "^0.21.0"
# コード品質
black = "^23.7.0"
isort = "^5.12.0"
flake8 = "^6.0.0"
mypy = "^1.5.0"
pylint = "^2.17.0"
# 開発ツール
pre-commit = "^3.3.0"
jupyter-contrib-nbextensions = "^0.7.0"
nbstripout = "^0.6.0"
# プロファイリング・パフォーマンス
memory-profiler = "^0.61.0"
line-profiler = "^4.0.0"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
# ツール設定
[tool.black]
line-length = 88
target-version = ['py311']
include = '.pyi?$'
extend-exclude = '''
/(
| notebooks/.*.ipynb
)/
'''
[tool.isort]
profile = "black"
multi_line_output = 3
line_length = 88
known_first_party = ["src"]
[tool.mypy]
python_version = "3.11"
warn_return_any = true
warn_unused_configs = true
disallow_untyped_defs = true
exclude = ["notebooks/"]
[tool.pytest.ini_options]
testpaths = ["tests"]
python_files = ["test_*.py"]
python_classes = ["Test*"]
python_functions = ["test_*"]
addopts = [
"-v",
"--strict-markers",
"--strict-config",
"--cov=src",
"--cov-report=term-missing",
"--cov-report=html",
"--cov-fail-under=80"
]
データサイエンス特化Dockerfile:
GPU対応とJupyter Lab統合を含む、データサイエンス作業に最適化されたマルチステージDockerfileです:
# Dockerfile - データサイエンス特化マルチステージビルド
# GPU対応、Jupyter Lab統合、大容量データ処理対応
#==============================================================================
# ベースイメージ: CUDA対応Python(GPU使用時)
#==============================================================================
FROM nvidia/cuda:11.8-runtime-ubuntu22.04 as base-gpu
# GPU不要な場合は以下を使用
# FROM python:3.11-slim as base
# システムレベルの依存関係とGPUサポート
RUN apt-get update && apt-get install -y
# 基本開発ツール
build-essential
curl
git
wget
unzip
# 科学計算ライブラリ用
libblas-dev
liblapack-dev
libhdf5-dev
libffi-dev
# データベース接続
libpq-dev
# 画像・動画処理
libopencv-dev
ffmpeg
# LaTeX(レポート生成用)
texlive-latex-extra
texlive-fonts-recommended
pandoc
&& rm -rf /var/lib/apt/lists/*
&& apt-get clean
# Poetryのインストール
ENV POETRY_HOME="/opt/poetry"
ENV POETRY_PATH="$POETRY_HOME/bin"
ENV PATH="$POETRY_PATH:$PATH"
RUN curl -sSL https://install.python-poetry.org | python3 -
RUN poetry config virtualenvs.create false
# Node.js(Jupyter拡張機能用)
RUN curl -fsSL https://deb.nodesource.com/setup_18.x | bash -
&& apt-get install -y nodejs
WORKDIR /app
#==============================================================================
# 開発環境ステージ
#==============================================================================
FROM base-gpu as development
# 依存関係ファイルのコピーとインストール
COPY pyproject.toml poetry.lock ./
RUN poetry install --with dev
# Jupyter Lab拡張機能のインストール
RUN jupyter labextension install @jupyter-widgets/jupyterlab-manager
&& jupyter labextension install jupyter-matplotlib
&& jupyter labextension install @bokeh/jupyter_bokeh
# 開発用設定
ENV PYTHONPATH=/app
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
ENV ENVIRONMENT=development
ENV JUPYTER_ENABLE_LAB=yes
# GPUサポート設定(NVIDIA GPU使用時)
ENV NVIDIA_VISIBLE_DEVICES=all
ENV NVIDIA_DRIVER_CAPABILITIES=compute,utility
# ポート公開
EXPOSE 8888 8889 8000
# 開発用エントリーポイント
COPY scripts/entrypoint.dev.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
CMD ["jupyter", "lab", "--ip=0.0.0.0", "--allow-root", "--no-browser"]
#==============================================================================
# 本番環境ステージ(推論API用)
#==============================================================================
FROM base-gpu as production
# 本番用依存関係のみインストール
COPY pyproject.toml poetry.lock ./
RUN poetry install --only main --no-dev
# アプリケーションコードのコピー
COPY src/ /app/src/
COPY scripts/entrypoint.prod.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
# 本番用環境変数
ENV PYTHONPATH=/app
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
ENV ENVIRONMENT=production
# セキュリティ: 非rootユーザーで実行
RUN adduser --disabled-password --gecos '' appuser
&& chown -R appuser:appuser /app
USER appuser
EXPOSE 8000
ENTRYPOINT ["/entrypoint.sh"]
CMD ["python", "-m", "uvicorn", "src.api.main:app", "--host", "0.0.0.0", "--port", "8000"]
Docker Compose設定(データサイエンス用):
データ分析作業に必要な全てのサービスを統合したDocker Compose設定です。Jupyter Lab、データベース、キャッシュ、可視化ツールを含みます:
# docker-compose.yml - データサイエンス統合環境
services:
#============================================================================
# Jupyter Lab + Python 分析環境
#============================================================================
jupyter:
build:
context: .
target: development
container_name: ds-jupyter
environment:
- DATABASE_URL=postgresql://dsuser:dspass@postgres:5432/analytics
- REDIS_URL=redis://redis:6379
- JUPYTER_TOKEN=your-secure-token
volumes:
- .:/app
- jupyter-data:/root/.jupyter
- ./data:/app/data
- ./notebooks:/app/notebooks
- ./outputs:/app/outputs
ports:
- "8888:8888" # Jupyter Lab
- "8889:8889" # Jupyter Notebook
- "8000:8000" # API Server
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_started
# GPU使用時のリソース設定
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
networks:
- ds-network
#============================================================================
# PostgreSQL データベース
#============================================================================
postgres:
image: postgres:15
container_name: ds-postgres
environment:
POSTGRES_DB: analytics
POSTGRES_USER: dsuser
POSTGRES_PASSWORD: dspass
POSTGRES_INITDB_ARGS: "--encoding=UTF-8 --locale=en_US.UTF-8"
volumes:
- postgres-data:/var/lib/postgresql/data
- ./sql/init:/docker-entrypoint-initdb.d
ports:
- "5432:5432"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U dsuser -d analytics"]
interval: 5s
timeout: 5s
retries: 5
networks:
- ds-network
#============================================================================
# Redis キャッシュ
#============================================================================
redis:
image: redis:7-alpine
container_name: ds-redis
command: redis-server --appendonly yes
volumes:
- redis-data:/data
ports:
- "6379:6379"
networks:
- ds-network
#============================================================================
# MLflow 実験追跡
#============================================================================
mlflow:
image: python:3.11-slim
container_name: ds-mlflow
command: >
bash -c "
pip install mlflow psycopg2-binary &&
mlflow server
--backend-store-uri postgresql://dsuser:dspass@postgres:5432/analytics
--artifacts-destination /app/artifacts
--host 0.0.0.0
--port 5000
"
volumes:
- ./mlflow-artifacts:/app/artifacts
ports:
- "5000:5000"
depends_on:
postgres:
condition: service_healthy
networks:
- ds-network
#============================================================================
# Apache Superset (BI・可視化)
#============================================================================
superset:
image: apache/superset:2.1.0
container_name: ds-superset
environment:
- SUPERSET_SECRET_KEY=your-secret-key-here
- SQLALCHEMY_DATABASE_URI=postgresql://dsuser:dspass@postgres:5432/analytics
volumes:
- superset-data:/app/superset_home
ports:
- "8088:8088"
depends_on:
postgres:
condition: service_healthy
networks:
- ds-network
#==============================================================================
# データ永続化
#==============================================================================
volumes:
postgres-data:
driver: local
redis-data:
driver: local
jupyter-data:
driver: local
superset-data:
driver: local
#==============================================================================
# ネットワーク設定
#==============================================================================
networks:
ds-network:
driver: bridge
FastAPI Web API プロジェクトテンプレート
プロジェクト要件と構成
本格的なWeb APIサービスの開発環境:
- 高性能なREST API開発
- 認証・認可システム
- 自動APIドキュメント生成
- 包括的テストスイート
- CI/CD パイプライン統合
FastAPI特化pyproject.toml:
Web API開発に必要な全てのライブラリとツールを含むPoetry設定です。FastAPI、認証、テスト、デプロイメントまでカバーしています:
[tool.poetry]
name = "fastapi-project"
version = "0.1.0"
description = "コンテナ化FastAPI Web API"
authors = ["Your Name <your.email@example.com>"]
readme = "README.md"
[tool.poetry.dependencies]
python = "^3.11"
# Web フレームワーク
fastapi = "^0.103.0"
uvicorn = {extras = ["standard"], version = "^0.23.0"}
# データベース・ORM
sqlalchemy = "^2.0.0"
alembic = "^1.11.0"
psycopg2-binary = "^2.9.0"
# 認証・セキュリティ
python-jose = {extras = ["cryptography"], version = "^3.3.0"}
passlib = {extras = ["bcrypt"], version = "^1.7.0"}
python-multipart = "^0.0.6"
# 設定・バリデーション
pydantic = {extras = ["email"], version = "^2.0.0"}
pydantic-settings = "^2.0.0"
python-dotenv = "^1.0.0"
# HTTP・API
httpx = "^0.24.0"
requests = "^2.31.0"
aiofiles = "^23.1.0"
# キャッシュ・セッション
redis = "^4.6.0"
python-redis = "^4.6.0"
# ログ・監視
structlog = "^23.1.0"
prometheus-client = "^0.17.0"
# 日時処理
python-dateutil = "^2.8.0"
pytz = "^2023.3"
[tool.poetry.group.dev.dependencies]
# テスト
pytest = "^7.4.0"
pytest-asyncio = "^0.21.0"
pytest-cov = "^4.1.0"
httpx = "^0.24.0"
factory-boy = "^3.3.0"
faker = "^19.3.0"
# コード品質
black = "^23.7.0"
isort = "^5.12.0"
flake8 = "^6.0.0"
mypy = "^1.5.0"
pylint = "^2.17.0"
# 開発ツール
pre-commit = "^3.3.0"
watchfiles = "^0.19.0"
# API開発・テスト
openapi-generator-cli = "^4.3.0"
# デバッグ・プロファイリング
debugpy = "^1.6.0"
py-spy = "^0.3.0"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
# ツール設定
[tool.black]
line-length = 88
target-version = ['py311']
include = '.pyi?$'
[tool.isort]
profile = "black"
multi_line_output = 3
line_length = 88
known_first_party = ["src", "tests"]
[tool.mypy]
python_version = "3.11"
warn_return_any = true
warn_unused_configs = true
disallow_untyped_defs = true
plugins = ["pydantic.mypy"]
[tool.pytest.ini_options]
testpaths = ["tests"]
python_files = ["test_*.py"]
python_classes = ["Test*"]
python_functions = ["test_*"]
addopts = [
"-v",
"--strict-markers",
"--strict-config",
"--cov=src",
"--cov-report=term-missing",
"--cov-report=html",
"--cov-fail-under=90"
]
asyncio_mode = "auto"
FastAPI Dockerfileテンプレート:
高性能なWeb API本番運用を考慮したマルチステージDockerfileです。開発効率と本番パフォーマンスを両立します:
# Dockerfile - FastAPI本番グレード設定
FROM python:3.11-slim as base
# システムレベルの依存関係
RUN apt-get update && apt-get install -y
# ビルドツール
build-essential
curl
git
# データベース
libpq-dev
# セキュリティ
ca-certificates
# プロセス管理
supervisor
&& rm -rf /var/lib/apt/lists/*
&& apt-get clean
# Poetryインストール
ENV POETRY_HOME="/opt/poetry"
ENV POETRY_PATH="$POETRY_HOME/bin"
ENV PATH="$POETRY_PATH:$PATH"
RUN curl -sSL https://install.python-poetry.org | python3 -
RUN poetry config virtualenvs.create false
WORKDIR /app
#==============================================================================
# 開発環境ステージ
#==============================================================================
FROM base as development
# 開発用依存関係の完全インストール
COPY pyproject.toml poetry.lock ./
RUN poetry install --with dev
# 開発用環境変数
ENV PYTHONPATH=/app
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
ENV ENVIRONMENT=development
ENV FASTAPI_ENV=development
EXPOSE 8000 5678
# 開発用エントリーポイント(ホットリロード有効)
COPY scripts/entrypoint.dev.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
CMD ["uvicorn", "src.main:app", "--host", "0.0.0.0", "--port", "8000", "--reload"]
#==============================================================================
# 本番環境ステージ
#==============================================================================
FROM base as production
# 本番用依存関係のみ
COPY pyproject.toml poetry.lock ./
RUN poetry install --only main --no-dev
# アプリケーションコードのコピー
COPY src/ /app/src/
COPY alembic/ /app/alembic/
COPY alembic.ini /app/
COPY scripts/entrypoint.prod.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
# 本番用環境変数
ENV PYTHONPATH=/app
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
ENV ENVIRONMENT=production
ENV FASTAPI_ENV=production
# セキュリティ設定
RUN adduser --disabled-password --gecos '' fastapi
&& chown -R fastapi:fastapi /app
USER fastapi
# ヘルスチェック
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3
CMD curl -f http://localhost:8000/health || exit 1
EXPOSE 8000
ENTRYPOINT ["/entrypoint.sh"]
CMD ["gunicorn", "src.main:app", "-w", "4", "-k", "uvicorn.workers.UvicornWorker", "--bind", "0.0.0.0:8000"]
CI/CD統合とGitHub Actions
GitHub Actions ワークフロー
コンテナ化開発環境との完全統合を実現するGitHub Actionsワークフローです。テスト、ビルド、デプロイまでを自動化します:
# .github/workflows/ci-cd.yml
name: CI/CD Pipeline
on:
push:
branches: [main, develop]
pull_request:
branches: [main]
env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}
jobs:
#============================================================================
# テスト・品質チェック
#============================================================================
test:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: [3.9, 3.10, 3.11]
services:
postgres:
image: postgres:15
env:
POSTGRES_PASSWORD: postgres
POSTGRES_DB: test_db
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5432:5432
redis:
image: redis:7
options: >-
--health-cmd "redis-cli ping"
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 6379:6379
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Install Poetry
uses: snok/install-poetry@v1
with:
version: latest
virtualenvs-create: true
virtualenvs-in-project: true
- name: Load cached venv
id: cached-poetry-dependencies
uses: actions/cache@v3
with:
path: .venv
key: venv-${{ runner.os }}-${{ matrix.python-version }}-${{ hashFiles('**/poetry.lock') }}
- name: Install dependencies
if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true'
run: poetry install --with dev
- name: Code quality checks
run: |
poetry run black --check .
poetry run isort --check-only .
poetry run flake8 .
poetry run mypy src/
- name: Run tests
run: poetry run pytest --cov=src/ --cov-report=xml
env:
DATABASE_URL: postgresql://postgres:postgres@localhost:5432/test_db
REDIS_URL: redis://localhost:6379
SECRET_KEY: test-secret-key
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
with:
file: ./coverage.xml
flags: unittests
name: codecov-umbrella
#============================================================================
# Docker ビルド・公開
#============================================================================
build-and-push:
needs: test
runs-on: ubuntu-latest
if: github.event_name == 'push'
permissions:
contents: read
packages: write
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Log in to Container Registry
uses: docker/login-action@v2
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata
id: meta
uses: docker/metadata-action@v4
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=ref,event=branch
type=ref,event=pr
type=sha,prefix={{branch}}-
type=raw,value=latest,enable={{is_default_branch}}
- name: Build and push Docker image
uses: docker/build-push-action@v4
with:
context: .
platforms: linux/amd64,linux/arm64
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
target: production
cache-from: type=gha
cache-to: type=gha,mode=max
#============================================================================
# セキュリティスキャン
#============================================================================
security:
needs: build-and-push
runs-on: ubuntu-latest
if: github.event_name == 'push'
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Run Trivy vulnerability scanner
uses: aquasecurity/trivy-action@master
with:
image-ref: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }}
format: 'sarif'
output: 'trivy-results.sarif'
- name: Upload Trivy scan results to GitHub Security tab
uses: github/codeql-action/upload-sarif@v2
with:
sarif_file: 'trivy-results.sarif'
#============================================================================
# 本番デプロイ(mainブランチのみ)
#============================================================================
deploy:
needs: [test, build-and-push, security]
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
environment: production
steps:
- name: Deploy to production
run: |
echo "🚀 本番環境へのデプロイを実行"
# ここに実際のデプロイスクリプトを記述
# 例: kubectl apply, docker-compose up, etc.
セキュリティ・本番運用考慮事項
コンテナセキュリティのベストプラクティス
本番環境でのセキュリティを確保するための重要な設定と監視項目です:
セキュリティ強化Dockerfile:
# セキュリティ強化された本番用Dockerfile
FROM python:3.11-slim as base
# セキュリティアップデート
RUN apt-get update && apt-get upgrade -y
&& apt-get install -y --no-install-recommends
tini
ca-certificates
&& rm -rf /var/lib/apt/lists/*
&& apt-get clean
# 非特権ユーザーの作成
RUN groupadd -r appgroup
&& useradd -r -g appgroup -d /app -s /bin/bash appuser
# ファイルシステムの読み取り専用設定
RUN mkdir -p /app/tmp /app/logs
&& chown -R appuser:appgroup /app
&& chmod 755 /app
# セキュリティ設定
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
ENV PATH="/app/.local/bin:$PATH"
WORKDIR /app
USER appuser
# ヘルスチェック
HEALTHCHECK --interval=30s --timeout=10s --retries=3
CMD curl -f http://localhost:8000/health || exit 1
# Tiniプロセスマネージャーの使用
ENTRYPOINT ["tini", "--"]
secrets管理とDocker Compose:
# docker-compose.prod.yml - 本番環境設定
version: '3.8'
services:
app:
image: myapp:latest
read_only: true
tmpfs:
- /tmp
- /app/tmp
cap_drop:
- ALL
cap_add:
- NET_BIND_SERVICE
security_opt:
- no-new-privileges:true
user: "1000:1000"
environment:
- DATABASE_URL_FILE=/run/secrets/db_url
- SECRET_KEY_FILE=/run/secrets/secret_key
secrets:
- db_url
- secret_key
deploy:
resources:
limits:
memory: 512M
cpus: '0.5'
reservations:
memory: 256M
cpus: '0.25'
secrets:
db_url:
external: true
secret_key:
external: true
トラブルシューティング・運用ガイド
よくある問題と解決策
パフォーマンス最適化:
#!/bin/bash
# scripts/performance-check.sh - パフォーマンス診断
echo "🔍 コンテナリソース使用状況"
docker stats --no-stream
echo "📊 イメージサイズ分析"
docker images --format "table {{.Repository}}t{{.Tag}}t{{.Size}}"
echo "🗄️ ボリューム使用量"
docker system df
echo "🚿 未使用リソースのクリーンアップ"
docker system prune -f
docker volume prune -f
ログ管理と監視:
# docker-compose.monitoring.yml
services:
app:
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
labels: "service,environment"
prometheus:
image: prom/prometheus:latest
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin
まとめ
この記事では、言語・フレームワーク別に特化したコンテナ化開発環境の実践的なテンプレートを提供しました。
習得した技術
プロジェクト特化設定:
- Python データサイエンス環境(Jupyter + GPU対応)
- FastAPI Web API環境(認証・API統合)
- カスタム開発ツールチェーン
本番運用技術:
- CI/CD パイプライン統合
- セキュリティ強化設定
- パフォーマンス最適化
- 監視・ログ管理
実践的なベストプラクティス:
- マルチステージビルド活用
- 環境別設定管理
- チーム開発標準化
- トラブルシューティング
継続的な学習
これらのテンプレートを基盤として、以下の分野でさらに専門性を深めることをお勧めします:
- Kubernetes: コンテナオーケストレーション
- Service Mesh: マイクロサービス間通信
- Observability: 分散トレーシング・監視
- GitOps: インフラのコード化
- セキュリティ: ゼロトラスト・コンテナセキュリティ
このガイドのテンプレートを活用して、効率的で安全な開発環境を構築し、チーム全体の生産性向上を実現してください。
ご質問やご意見がありましたら、お問い合わせページからお気軽にご連絡ください!
関連記事: