はじめに
この包括的な Docker チュートリアルは、開発者とシステム管理者向けに、コンテナ技術を理解し実装するための詳細なガイドを提供します。Docker のコアコンセプト、インストール手順、基本的なコマンドを学ぶことで、学習者は、さまざまなコンピューティング環境でコンテナ化されたアプリケーションを作成、管理、デプロイするための実践的なスキルを習得します。
Docker の基礎
Docker とコンテナ技術の概要
Docker は、コンテナ化のための強力なプラットフォームであり、開発者は異なるコンピューティング環境でアプリケーションを一貫してパッケージ化、配布、実行できます。コンテナ技術は、軽量、移植性があり、効率的な実行環境を提供することで、ソフトウェアのデプロイを革新します。
Docker のコアコンセプト
Docker とは何か?
Docker は、コンテナ化を使用してアプリケーションのデプロイを簡素化するオープンソースプラットフォームです。従来の仮想マシンとは異なり、Docker コンテナはホストシステムのカーネルを共有するため、リソース効率が高く、起動が高速です。
graph TD
A[アプリケーションコード] --> B[Docker イメージ]
B --> C[Docker コンテナ]
C --> D[ホストオペレーティングシステム]
Docker の主要コンポーネント
| コンポーネント | 説明 | 機能 |
|---|---|---|
| Docker エンジン | コアランタイム | コンテナのライフサイクルを管理 |
| Docker イメージ | 読み取り専用テンプレート | コンテナの構造を定義 |
| Docker コンテナ | 実行可能なインスタンス | アプリケーションを実行 |
Ubuntu 22.04 へのインストール
Ubuntu に Docker をインストールするには、以下のコマンドを実行します。
## パッケージインデックスを更新
sudo apt-get update
## 依存関係をインストール
sudo apt-get install ca-certificates curl gnupg
## Docker の公式 GPG キーを追加
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
## リポジトリを設定
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" \
| sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
## Docker パッケージをインストール
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
基本的な Docker コマンド
効果的なコンテナ管理には、基本的な Docker コマンドの理解が不可欠です。
## Docker のバージョンを確認
docker --version
## Docker Hub からイメージをプル
docker pull ubuntu:latest
## 利用可能なイメージを一覧表示
docker images
## コンテナを実行
docker run -it ubuntu:latest /bin/bash
## 実行中のコンテナを一覧表示
docker ps
## コンテナを停止
docker stop [CONTAINER_ID]
Docker のユースケース
Docker は、以下の分野で広く使用されています。
- マイクロサービスアーキテクチャ
- CI/CD (継続的インテグレーション/継続的デリバリー)
- クラウドネイティブアプリケーション開発
- 開発およびテスト環境
- スケーラブルなインフラストラクチャ管理
Docker イメージの作成
Docker イメージの理解
Docker イメージは、Docker コンテナを作成するための命令セットを含む読み取り専用のテンプレートです。コンテナ化されたアプリケーションの基本的な構成要素として機能し、必要な依存関係と設定をすべてパッケージ化します。
graph LR
A[Dockerfile] --> B[Docker ビルド]
B --> C[Docker イメージ]
C --> D[Docker コンテナ]
Dockerfile の基礎
Dockerfile は、Docker イメージを構築するために必要なすべての命令を含むテキストドキュメントです。以下に包括的な例を示します。
## ベースイメージの選択
FROM ubuntu:22.04
## メタデータ
LABEL maintainer="developer@example.com"
## 環境設定
ENV APP_HOME=/application
## システム依存関係
RUN apt-get update && apt-get install -y \
python3 \
python3-pip \
&& rm -rf /var/lib/apt/lists/*
## 作業ディレクトリの設定
WORKDIR ${APP_HOME}
## アプリケーションファイルのコピー
COPY . ${APP_HOME}
## Python 依存関係のインストール
RUN pip3 install -r requirements.txt
## アプリケーションポートの公開
EXPOSE 8000
## コンテナ起動コマンド
CMD ["python3", "app.py"]
Dockerfile の命令
| 命令 | 目的 | 例 |
|---|---|---|
| FROM | ベースイメージを指定 | FROM ubuntu:22.04 |
| RUN | シェルコマンドを実行 | RUN apt-get update |
| COPY | ファイルをイメージにコピー | COPY . /app |
| WORKDIR | 作業ディレクトリを設定 | WORKDIR /application |
| ENV | 環境変数を設定 | ENV DEBUG=true |
| EXPOSE | コンテナポートを定義 | EXPOSE 80 |
| CMD | デフォルトのコンテナコマンド | CMD ["python", "app.py"] |
Docker イメージの構築
これらのコマンドを使用して Docker イメージを作成および管理します。
## Dockerfile からイメージをビルド
docker build -t myapp:v1 .
## ローカルイメージを一覧表示
docker images
## 特定のイメージを削除
docker rmi myapp:v1
## イメージにタグを付ける
docker tag myapp:v1 myregistry/myapp:latest
イメージ管理戦略
Docker は、イメージの作成と配布のための複数の方法を提供します。
- ローカルイメージの構築
- Docker Hub からイメージのプル
- Dockerfile を使用したカスタムイメージの作成
- コンテナレジストリへのイメージのプッシュ
コンテナのデプロイ
コンテナデプロイの基本
コンテナデプロイは、ローカル開発環境からクラウドインフラまで、さまざまな環境で Docker コンテナを実行および管理するプロセスです。効果的なデプロイ戦略は、アプリケーションのパフォーマンスを安定、スケーラブル、そして信頼性高く保ちます。
graph TD
A[Docker イメージ] --> B[ローカルコンテナ]
A --> C[クラウドコンテナ]
B --> D[開発環境]
C --> E[本番インフラ]
コンテナランタイムの管理
基本的なコンテナ操作
## デタッチモードでコンテナを実行
docker run -d --name webapp nginx:latest
## 実行中のコンテナを一覧表示
docker ps
## コンテナを停止
docker stop webapp
## コンテナを削除
docker rm webapp
## コンテナを再起動
docker restart webapp
コンテナの設定パラメータ
| パラメータ | 説明 | 例 |
|---|---|---|
| -p | ポートマッピング | -p 8080:80 |
| -v | ボリュームマウント | -v /host/path:/container/path |
| -e | 環境変数 | -e DATABASE_URL=mysql://localhost |
| --network | ネットワーク設定 | --network=custom_network |
コンテナのネットワーク
Docker は、コンテナ間の通信のために複数のネットワークモードを提供します。
## カスタムネットワークを作成
docker network create myapp_network
## 特定のネットワークでコンテナを実行
docker run -d --network=myapp_network nginx:latest
コンテナのスケーリング戦略
Docker Compose デプロイ
version: "3"
services:
webapp:
image: nginx:latest
ports:
- "8080:80"
deploy:
replicas: 3
restart_policy:
condition: on-failure
クラウドデプロイのアプローチ
AWS ECS デプロイ例
## イメージを AWS ECR にプッシュ
aws ecr get-login-password | docker login
docker tag myapp:latest aws_account.dkr.ecr.region.amazonaws.com/myapp
docker push aws_account.dkr.ecr.region.amazonaws.com/myapp
コンテナオーケストレーションの基本
Kubernetes などのコンテナオーケストレーションプラットフォームは、コンテナのライフサイクル、スケーリング、およびネットワークを自動的に管理することで、複雑なデプロイシナリオを簡素化します。
まとめ
Docker は、軽量で移植性が高く効率的なランタイム環境を提供することで、ソフトウェアのデプロイ方法に革命をもたらしました。Docker の主要コンポーネント、インストール手順、および必須コマンドを習得することで、専門家はアプリケーション開発を効率化し、リソース利用を改善し、さまざまなコンピューティングプラットフォーム間で一貫したパフォーマンスを実現できます。このチュートリアルは、学習者にコンテナ化技術を効果的に活用するために必要な基本的な知識を提供します。



