はじめに
この包括的な Docker チュートリアルは、開発者向けに、コンテナ化の基本、Docker のインストール、Ubuntu 上の Python Flask アプリケーションに特化したコンテナ管理に関する実践的なガイドを提供します。Docker のコア概念、インストール手順、および必須コマンドを学ぶことで、学習者はアプリケーション開発とデプロイワークフローを効率化する実践的なスキルを習得します。
Docker の基礎
Docker の基本概念
Docker は、ソフトウェア開発とデプロイを革新する強力なコンテナ化プラットフォームです。コンテナ技術として、Docker はアプリケーションとその依存関係をすべてパッケージ化し、さまざまなコンピューティング環境で一貫したパフォーマンスを確保します。
コンテナ化の核心概念
graph TD
A[Docker イメージ] --> B[コンテナ]
A --> C[Dockerfile]
B --> D[隔離された実行環境]
| 概念 | 説明 |
|---|---|
| Docker イメージ | アプリケーションコードと依存関係を含む読み取り専用テンプレート |
| コンテナ | イメージの実行可能な軽量インスタンス |
| Dockerfile | イメージ構築手順を定義するテキストファイル |
Ubuntu 22.04 への Docker インストール
## システムパッケージを更新
sudo apt update
## 必要な依存関係をインストール
sudo apt install apt-transport-https ca-certificates curl software-properties-common
## Docker の公式 GPG キーを追加
curl -fsSL | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
## Docker リポジトリを設定
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
## Docker エンジンをインストール
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
基本的な Docker コマンド
## Docker のバージョンを確認
## Docker Hub からイメージをプル
## ローカルイメージの一覧表示
## コンテナを実行
## 実行中のコンテナの一覧表示
## コンテナを停止
Docker アーキテクチャの理解
Docker は、クライアント・サーバーアーキテクチャを採用しています。Docker クライアントは、コンテナ、イメージ、ネットワーク、ストレージボリュームを管理する Docker デーモンと通信します。
コンテナのライフサイクル管理
コンテナは、アプリケーション用に隔離された、再現可能な環境を提供します。コンテナは簡単に作成、起動、停止、移動、削除でき、ソフトウェアのデプロイにおいて比類のない柔軟性を提供します。
Flask アプリケーションの構築
Flask Web アプリケーションのコンテナ化
Flask は、軽量な Python ウェブフレームワークであり、ウェブアプリケーションのコンテナ化に最適です。Docker は、一貫した環境で Flask プロジェクトをパッケージ化およびデプロイするための効率的な方法を提供します。
プロジェクト構造と準備
graph TD
A[プロジェクトルート] --> B[app.py]
A --> C[requirements.txt]
A --> D[Dockerfile]
A --> E[templates/]
| ファイル | 役割 |
|---|---|
| app.py | メインの Flask アプリケーション スクリプト |
| requirements.txt | Python パッケージの依存関係 |
| Dockerfile | コンテナ構築手順 |
| templates/ | HTML テンプレートディレクトリ |
サンプル Flask アプリケーション
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def home():
return render_template('index.html')
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
Dockerfile の作成
## 公式 Python ランタイムを使用
FROM python:3.9-slim
## 作業ディレクトリを設定
WORKDIR /app
## プロジェクトファイルをコピー
COPY . /app
## 依存関係をインストール
RUN pip install --no-cache-dir -r requirements.txt
## アプリケーションポートを公開
EXPOSE 5000
## アプリケーションを実行
CMD ["python", "app.py"]
Docker Compose 設定
version: "3"
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/app
コンテナの構築と実行
## Docker イメージを構築
docker build -t flask-app .
## コンテナを実行
docker run -p 5000:5000 flask-app
## または、docker-compose を使用
docker-compose up
コンテナ化の利点
Docker は、Flask 開発者が、再現性があり、移植性があり、隔離された依存関係と一貫した実行環境を持つウェブアプリケーションを、さまざまなシステム間で構築できるようにします。
Docker プロダクション環境
Kubernetes によるコンテナオーケストレーション
graph TD
A[Docker クラスタ] --> B[マスターノード]
A --> C[ワーカーノード]
B --> D[API サーバー]
B --> E[スケジューラー]
C --> F[コンテナ Pod]
プロダクションデプロイ戦略
| 戦略 | 説明 |
|---|---|
| ロールアウト更新 | ダウンタイムなしのデプロイ |
| ブルーグリーンデプロイ | トラフィックの即時切り替え |
| カナリーリリース | トラフィックの段階的移行 |
Ubuntu サーバーの設定
## システムパッケージを更新
sudo apt update && sudo apt upgrade -y
## Docker をインストール
sudo apt install docker.io kubernetes-cli -y
## Docker デーモンを設定
sudo systemctl enable docker
sudo systemctl start docker
Docker Compose によるスケーラビリティ
version: "3"
services:
web:
image: myapp:latest
deploy:
replicas: 4
update_config:
parallelism: 2
ports:
- "80:8000"
コンテナ監視の設定
## Prometheus をインストール
docker run -d \
-p 9090:9090 \
-v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus
## Grafana をインストール
docker run -d \
-p 3000:3000 \
grafana/grafana
セキュリティベストプラクティス
## 制限された権限でコンテナを実行
docker run --read-only \
--tmpfs /tmp \
--tmpfs /run \
-d myimage
## Docker シークレット管理を使用
echo "mysecretpassword" | docker secret create db_password -
パフォーマンス最適化
## コンテナのリソースを制限
docker run -d \
--cpus=2 \
--memory=4g \
myapplication
ネットワーク設定の管理
## カスタムブリッジネットワークを作成
docker network create \
--driver bridge \
--subnet 192.168.0.0/24 \
production_network
まとめ
Docker は、コンテナ化によって一貫性があり移植可能なアプリケーション環境を実現し、ソフトウェア開発を革新します。このチュートリアルでは、Docker の基本的なスキル、つまりイメージの作成、コンテナの管理、およびデプロイ戦略を開発者に提供しました。これらの技術を習得することで、開発者は、Flask アプリケーションをさまざまなコンピューティングプラットフォームで、高い信頼性とパフォーマンスで効率的にパッケージ化、配布、実行できます。



