Docker の基本をマスターする:Python Flask アプリケーションのコンテナ化

DockerBeginner
オンラインで実践に進む

はじめに

この包括的な 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 アプリケーションをさまざまなコンピューティングプラットフォームで、高い信頼性とパフォーマンスで効率的にパッケージ化、配布、実行できます。