はじめに
この包括的な Docker チュートリアルは、開発者と IT 専門家にコンテナ技術に関する重要な知識を提供します。Ubuntu で Docker をセットアップする方法、コアコンセプトを理解する方法、そして異なるコンピューティング環境間で一貫したアプリケーションデプロイメントのためにコンテナ化を活用する方法を学びます。
Docker の基礎
Docker 技術の概要
Docker は、ソフトウェアのデプロイと仮想化を革新する強力なコンテナ技術プラットフォームです。オープンソースツールとして、Docker は開発者が異なるコンピューティング環境間でアプリケーションをパッケージ化、配布、実行を確実に実現します。
Docker のコアコンセプト
Docker とは何か?
Docker は、開発者がコンテナを使用してアプリケーションを作成、デプロイ、実行できる軽量な仮想化技術です。従来の仮想マシンとは異なり、コンテナはホストシステムのカーネルを共有するため、より効率的で起動が高速です。
コンテナアーキテクチャ
graph TD
A[Docker Engine] --> B[Container Runtime]
A --> C[Docker Images]
B --> D[Application Container]
C --> D
Docker の主要コンポーネント
| コンポーネント | 説明 | 役割 |
|---|---|---|
| Docker Engine | コアランタイム環境 | コンテナのライフサイクルを管理 |
| Docker Image | 読み取り専用テンプレート | コンテナの設定を定義 |
| Docker Container | 実行可能なインスタンス | アプリケーションを実行 |
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 Engine をインストール
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
基本的な Docker コマンド
## Docker のバージョンを確認
docker --version
## Docker のインストールを確認
docker run hello-world
## 実行中のコンテナ一覧を表示
docker ps
## 全てのコンテナ一覧を表示
docker ps -a
Docker の利点
Docker は、現代のソフトウェア開発に大きなメリットを提供します。
- 開発環境と本番環境で一貫した環境
- アプリケーションのデプロイを高速化
- リソースの利用効率向上
- 依存関係の管理を簡素化
- スケーラビリティと移植性の向上
Docker イメージの作成
Docker イメージについて
Docker イメージは、コンテナを作成するために使用される読み取り専用のテンプレートです。アプリケーションを実行するために必要なアプリケーションコード、ランタイム、ライブラリ、環境変数、および設定ファイルを含んでいます。
Dockerfile の基礎
Dockerfile は、Docker イメージを構築するための手順を含むテキストドキュメントです。各手順はイメージに新しいレイヤーを作成します。
Dockerfile の構造
graph TD
A[ベースイメージ] --> B[依存関係のインストール]
B --> C[アプリケーションコードのコピー]
C --> D[環境変数の設定]
D --> E[起動コマンドの定義]
一般的な Dockerfile の指示
| 指示 | 目的 | 例 |
|---|---|---|
| FROM | ベースイメージを指定 | FROM ubuntu:22.04 |
| RUN | コマンドを実行 | RUN apt-get update |
| COPY | ファイルをイメージにコピー | COPY ./app /application |
| WORKDIR | 作業ディレクトリを設定 | WORKDIR /application |
| CMD | デフォルトコマンドを定義 | CMD ["python", "app.py"] |
シンプルな Python Web アプリケーションイメージの作成
サンプル Dockerfile
## 公式 Python ランタイムをベースイメージとして使用
FROM python:3.9-slim
## 作業ディレクトリを設定
WORKDIR /app
## requirements ファイルをコピー
COPY requirements.txt .
## 依存関係をインストール
RUN pip install --no-cache-dir -r requirements.txt
## アプリケーションコードをコピー
COPY . .
## ポートを公開
EXPOSE 5000
## 起動コマンドを定義
CMD ["python", "app.py"]
Docker イメージの構築
## タグ付きイメージをビルド
docker build -t hello-world-app .
## ローカルイメージ一覧
docker images
## 作成したイメージを実行
docker run -p 5000:5000 hello-world-app
イメージ管理コマンド
## 特定のイメージを削除
docker rmi hello-world-app
## 使用されていないイメージをすべて削除
docker image prune
## Docker Hub からイメージをプル
docker pull ubuntu:22.04
最善のプラクティス
- 最小限のベースイメージを使用する
- レイヤー数を最小限にする
- 不要なパッケージのインストールを避ける
- マルチステージビルドを使用して、より小さなイメージを作成する
- ビルドキャッシュを効率的に活用する
コンテナの管理
コンテナのライフサイクルの概要
Docker コンテナは、作成から終了まで、複数の状態を持つ定義済みのライフサイクルを持っています。これらの状態を理解することは、効果的なコンテナ管理に不可欠です。
stateDiagram-v2
[*] --> Created
Created --> Running
Running --> Paused
Paused --> Running
Running --> Stopped
Stopped --> Removed
Removed --> [*]
基本的なコンテナ操作
コンテナ管理コマンド
| コマンド | 機能 | 例 |
|---|---|---|
| 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 run nginx
## コンテナをバックグラウンドで実行
docker run -d nginx
## ポートマッピングでコンテナを実行
docker run -p 8080:80 nginx
## カスタム名でコンテナを実行
docker run --name web-server nginx
コンテナの検査と監視
## 実行中のコンテナ一覧
docker ps
## 全てのコンテナ一覧
docker ps -a
## コンテナのログを表示
docker logs container_id
## コンテナの詳細を検査
docker inspect container_id
## コンテナのリソース使用状況を監視
docker stats
コンテナのネットワーク
## Docker ネットワーク一覧
docker network ls
## カスタムネットワークを作成
docker network create mynetwork
## コンテナをネットワークに接続
docker network connect mynetwork container_id
高度なコンテナ管理
コンテナのリソース制限
## CPU とメモリの制限
docker run -d \
--cpus="1.5" \
--memory="512m" \
nginx
コンテナのスケーリング
## 複数のコンテナインスタンスを作成
docker run -d -p 8001:80 nginx
docker run -d -p 8002:80 nginx
docker run -d -p 8003:80 nginx
コンテナのデプロイ戦略
永続的なデータ管理
## ボリュームを作成
docker volume create myvolume
## コンテナにボリュームをマウント
docker run -v myvolume:/app/data nginx
環境設定
## 環境変数を設定
docker run -e DATABASE_URL=localhost nginx
まとめ
Docker は、軽量で移植可能なコンテナによってアプリケーションのデプロイを簡素化し、ソフトウェア開発を革新します。Docker の主要コンポーネント、インストール手順、基本コマンドを習得することで、開発者は、最小限のオーバーヘッドと最大限の柔軟性で、より効率的でスケーラブル、再現性の高いソフトウェア環境を作成できます。



