はじめに
このチュートリアルは、Docker イメージの実行と Docker コンテナの管理に関する包括的なガイドを提供します。Docker の基礎を学び、Docker イメージとその用途を探求し、Docker コンテナのプル、管理、および操作の技術を習得します。さらに、このチュートリアルでは、Docker ボリューム、ネットワーク、Compose、Swarm などの高度なコンテナ管理トピックもカバーし、Docker を使用してアプリケーションを効果的にデプロイおよび管理する方法を学ぶことができます。
Docker の基礎
Docker とは何か?
Docker は、アプリケーションのデプロイと開発を革新する強力なコンテナ化技術です。開発者は、アプリケーションとその依存関係をすべて、コンテナと呼ばれる標準化された単位にパッケージ化できます。これにより、さまざまなコンピューティング環境で一貫したパフォーマンスを確保できます。
Docker のコア概念
コンテナ化技術
コンテナ化により、アプリケーションは隔離された環境で実行され、いくつかの重要な利点を提供します。
| 機能 | 説明 |
|---|---|
| 隔離 | 各コンテナは独立して実行されます |
| ポータビリティ | Docker をサポートするシステムであれば、コンテナはどのシステムでも実行できます |
| 効率性 | 従来の仮想マシンと比較して軽量です |
graph TD
A[アプリケーションコード] --> B[Docker コンテナ]
B --> C[ホストオペレーティングシステム]
C --> D[インフラストラクチャ]
Docker アーキテクチャ
Docker は、クライアント - サーバーアーキテクチャを採用し、主要なコンポーネントがあります。
- Docker デーモン
- 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=$(dpkg --print-architecture)] $(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 イメージの操作
Docker イメージについて
Docker イメージは、コンテナを作成するために使用される読み取り専用のテンプレートです。アプリケーションを実行するために必要なアプリケーションコード、ランタイム、ライブラリ、システムツールが含まれています。
graph LR
A[Dockerfile] --> B[Docker イメージ]
B --> C[Docker コンテナ]
イメージ管理コマンド
| コマンド | 説明 |
|---|---|
| docker images | ローカルイメージの一覧表示 |
| docker pull | レジストリからイメージのダウンロード |
| docker rmi | イメージの削除 |
| docker tag | バージョン管理のためのイメージのタグ付け |
Dockerfile の作成
## ベースイメージ
FROM ubuntu:22.04
## メタデータ
LABEL maintainer="your-email@example.com"
## システムの更新
RUN apt-get update && apt-get install -y \
python3 \
pip
## 作業ディレクトリの設定
WORKDIR /app
## アプリケーションファイルのコピー
COPY . /app
## 依存関係のインストール
RUN pip install -r requirements.txt
## ポートの公開
EXPOSE 5000
## アプリケーションの実行
CMD ["python3", "app.py"]
Docker イメージのビルド
## イメージのビルド
docker build -t myapp:v1 .
## 特定のタグでビルド
docker build -t myapp:latest .
## ビルド引数を使用してビルド
docker build --build-arg VERSION=1.0 -t myapp:v1 .
Docker イメージのレイヤー
graph TD
A[ベースイメージ] --> B[システムの更新]
B --> C[依存関係のインストール]
C --> D[アプリケーションコードのコピー]
D --> E[起動コマンドの定義]
イメージの保存と共有
## Docker Hub にログイン
docker login
## イメージをレジストリにプッシュ
docker push username/myapp:v1
## レジストリからイメージをプル
docker pull username/myapp:v1
最善のプラクティス
- イメージサイズを最小限にする
- マルチステージビルドを使用する
- キャッシュを活用する
- 不要なパッケージのインストールを避ける
Docker の実践
コンテナのネットワーク
Docker は、コンテナ間の通信のために複数のネットワークモードを提供します。
| ネットワークモード | 説明 |
|---|---|
| Bridge | デフォルトのネットワークモード |
| Host | ホストネットワークへの直接アクセス |
| None | ネットワーク接続なし |
## カスタムネットワークの作成
docker network create mynetwork
## 特定のネットワーク上でコンテナを実行
docker run --network=mynetwork ubuntu
Docker Compose
version: "3"
services:
web:
image: nginx
ports:
- "8080:80"
database:
image: postgres
environment:
POSTGRES_PASSWORD: secret
コンテナオーケストレーションのワークフロー
graph TD
A[開発] --> B[コンテナ化]
B --> C[テスト]
C --> D[ステージング]
D --> E[本番デプロイ]
アプリケーションのスケーリング
## サービスのスケーリング
docker-compose up -d --scale web=3
## コンテナリソースの監視
docker stats
本番デプロイ戦略
## ロールアップアップデート
docker service update \
--image myapp:v2 \
--update-parallelism 2 \
--update-delay 10s \
myservice
コンテナの監視
## コンテナログの表示
docker logs mycontainer
## リアルタイムのリソース使用状況
docker top mycontainer
高度なネットワーク
## オーバーレイネットワークの作成
docker network create \
-d overlay \
--subnet 10.0.0.0/24 \
my_overlay_network
セキュリティ対策
| 対策 | 説明 |
|---|---|
| リソース制限 | CPU/メモリの制限 |
| 読み取り専用ファイルシステム | 変更を防止 |
| 非ルートユーザー | コンテナの権限を削減 |
まとめ
このチュートリアルを終了すると、Docker イメージの実行方法、Docker コンテナの管理方法、高度なコンテナ管理技術を活用してアプリケーションをより効率的にデプロイおよび管理する方法をしっかりと理解しているはずです。このチュートリアルで得られる知識は、一貫性、スケーラビリティ、移植性といった Docker の利点を、ソフトウェア開発およびデプロイプロセスで活用できるようになります。



