はじめに
この包括的な Docker チュートリアルは、開発者とシステム管理者向けに、コンテナ化技術を理解し実装するための実践的なガイドを提供します。Docker のコアコンセプト、インストール手順、基本的なコマンドを学ぶことで、学習者は軽量で移植可能なアプリケーション環境を作成するための重要なスキルを習得します。
Docker の基礎
コンテナ化技術の概要
Docker は、ソフトウェア開発とデプロイを革新する強力なコンテナ化プラットフォームです。開発者は、アプリケーションとその依存関係をすべて、コンテナと呼ばれる標準化された単位にパッケージ化できます。これにより、さまざまなコンピューティング環境で一貫したパフォーマンスを確保できます。
Docker のコアコンセプト
Docker とは何か?
Docker は、開発者がアプリケーションのデプロイ、スケーリング、管理を自動化できる、オープンソースのコンテナ化技術プラットフォームです。従来の仮想マシンとは異なり、Docker コンテナはホストシステムのカーネルを共有するため、軽量で効率的です。
graph TD
A[アプリケーションコード] --> B[Docker コンテナ]
B --> C[一貫したデプロイ]
B --> D[隔離された環境]
Docker の主要コンポーネント
| コンポーネント | 説明 | 役割 |
|---|---|---|
| Docker エンジン | コアランタイム | コンテナの構築と実行 |
| Docker イメージ | 読み取り専用テンプレート | コンテナの設定を定義 |
| Docker コンテナ | 実行可能なインスタンス | アプリケーションの実行 |
Ubuntu 22.04 へのインストール
## パッケージインデックスを更新
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
## 安定版リポジトリを設定
echo "deb [arch=amd64 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 --version
## イメージをプルする
docker pull ubuntu:latest
## イメージの一覧を表示
docker images
## コンテナを実行する
docker run -it ubuntu:latest /bin/bash
Docker コンテナ化のユースケース
Docker は、以下の分野で広く使用されています。
- マイクロサービスアーキテクチャ
- CI/CD (継続的インテグレーション/継続的デリバリー)
- クラウドネイティブアプリケーション開発
- 開発環境と本番環境の一貫性
Docker イメージの構築
Docker イメージについて
Docker イメージは、アプリケーションの実行に必要なすべて(コード、ランタイム、ライブラリ、環境変数、設定ファイルなど)を含んだ読み取り専用のテンプレートです。コンテナを作成するための設計図となります。
graph LR
A[Dockerfile] --> B[Docker イメージ]
B --> C[Docker コンテナ]
Dockerfile の基礎
Dockerfile は、Docker イメージを構築するための指示を含むテキストドキュメントです。各指示はイメージに新しいレイヤーを作成します。
Dockerfile の指示の種類
| 指示 | 目的 | 例 |
|---|---|---|
| FROM | ベースイメージを設定 | FROM ubuntu:22.04 |
| RUN | コマンドを実行 | RUN apt-get update |
| COPY | ファイルをコピー | COPY app.py /app/ |
| WORKDIR | 作業ディレクトリを設定 | WORKDIR /app |
| CMD | デフォルトコマンド | CMD ["python", "app.py"] |
サンプル Python アプリケーションイメージの作成
サンプルプロジェクト構造
/project
├── Dockerfile
└── app.py
app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello, Docker World!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
Dockerfile
## 公式 Python ランタイムをベースイメージとして使用
FROM python:3.9-slim
## 作業ディレクトリを設定
WORKDIR /app
## プロジェクトファイルをコピー
COPY app.py requirements.txt ./
## 依存関係をインストール
RUN pip install --no-cache-dir -r requirements.txt
## ポートを公開
EXPOSE 5000
## デフォルトコマンドを定義
CMD ["python", "app.py"]
Docker イメージの構築と管理
## requirements.txt を作成
echo "flask" > requirements.txt
## Docker イメージを構築
docker build -t my-flask-app .
## イメージ一覧を表示
docker images
## イメージからコンテナを実行
docker run -p 5000:5000 my-flask-app
イメージ最適化戦略
- マルチステージビルドを使用する
- レイヤー数を最小限にする
- ビルドキャッシュを活用する
- 特定のイメージタグを使用する
- 不要なファイルを削除する
コンテナの管理
コンテナライフサイクルの概要
Docker コンテナは、作成から終了まで、複数の状態を持つ複雑なライフサイクルを持っています。これらの状態を理解することは、効果的なコンテナ管理とオーケストレーションに不可欠です。
stateDiagram-v2
[*] --> Created
Created --> Running
Running --> Paused
Paused --> Running
Running --> Stopped
Stopped --> Removed
Removed --> [*]
必須の Docker コンテナコマンド
| コマンド | 機能 | 例 |
|---|---|---|
| docker create | コンテナを作成 | docker create nginx |
| docker start | コンテナを起動 | docker start container_id |
| docker stop | 実行中のコンテナを停止 | docker stop container_id |
| docker restart | コンテナを再起動 | docker restart container_id |
| docker rm | コンテナを削除 | docker rm container_id |
コンテナの検査と監視
## 実行中のコンテナ一覧を表示
docker ps
## すべてのコンテナ一覧を表示
docker ps -a
## コンテナの詳細を検査
docker inspect container_id
## コンテナのログを表示
docker logs container_id
## コンテナのリソース使用状況を監視
docker stats
コンテナのリソース管理
## CPU とメモリ制限付きでコンテナを実行
docker run -d \
--cpus="1.5" \
--memory="512m" \
--name limited-container \
nginx
高度なコンテナネットワーク
## カスタムネットワークを作成
docker network create mynetwork
## 特定のネットワークでコンテナを実行
docker run -d \
--network=mynetwork \
--name web-container \
nginx
コンテナのスケーリング戦略
## 複数のコンテナインスタンスをスケール
docker-compose up -d --scale web=3
永続的なデータ管理
## ボリュームを作成
docker volume create myvolume
## コンテナにボリュームをマウント
docker run -v myvolume:/app/data \
--name data-container \
ubuntu
最良のプラクティス
- 軽量なベースイメージを使用する
- ヘルスチェックを実装する
- コンテナサイズを最小限にする
- マルチステージビルドを使用する
- 適切なロギングを実装する
- コンテナの設定を安全にする
まとめ
Docker は、ソフトウェアのデプロイメントに革命的なアプローチを提供し、開発者にとって一貫性があり、隔離され、スケーラブルなアプリケーション・コンテナを作成するための強力なプラットフォームとなります。Docker の基本的な技術を習得することで、専門家は開発ワークフローを効率化し、システム効率を高め、多様なコンピューティングインフラストラクチャ全体で複雑なアプリケーション管理を簡素化できます。



