Docker コンテナ化をマスターする方法

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

はじめに

この包括的な Docker トレーニングは、開発者と IT 専門家を対象に、コンテナ化技術の理解と実装のための構造化されたアプローチを提供します。Docker のコアコンセプト、インストールプロセス、実践的なデプロイ戦略を探求することで、学習者はソフトウェア開発とデプロイワークフローを革新するための実践的なスキルを習得します。

Docker の基礎

Docker 基礎入門

Docker は、ソフトウェアのデプロイと開発を革新する強力なコンテナ化プラットフォームです。開発者は、アプリケーションとその依存関係をすべて、標準化された単位であるコンテナにパッケージ化できます。これにより、さまざまなコンピューティング環境間で一貫したパフォーマンスが保証されます。

コンテナ技術の核心概念

Docker とは何か?

Docker は、コンテナ化を通じてアプリケーションのデプロイ、スケーリング、管理を自動化するオープンソースプラットフォームです。軽量で、移植性があり、自己完結型のコンテナを提供し、事実上どこにでも実行できます。

graph TD
    A[Docker Engine] --> B[Container Runtime]
    A --> C[Image Repository]
    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 pull ubuntu:latest

## ローカルイメージの一覧を表示
docker images

## コンテナを実行する
docker run -it ubuntu:latest /bin/bash

コンテナ化の利点

Docker は、現代のソフトウェア開発において大きな利点を提供します。

  • 開発環境と本番環境で一貫した環境
  • アプリケーションの迅速なデプロイ
  • リソースの効率的な利用
  • 依存関係の簡素化
  • スケーラビリティと移植性の向上

Docker イメージとコンテナの管理

Docker イメージの理解

Docker イメージは、コンテナを作成するために使用される読み取り専用のテンプレートです。アプリケーションを実行するために必要なアプリケーションコード、ランタイム、ライブラリ、システムツールを含んでいます。

graph LR
    A[Dockerfile] --> B[Docker Image]
    B --> C[Docker Container]

イメージ管理コマンド

コマンド 説明
docker images ローカルイメージの一覧を表示 docker images
docker pull レジストリからイメージをダウンロード docker pull ubuntu:20.04
docker rmi ローカルイメージを削除 docker rmi ubuntu:20.04

カスタム Docker イメージの作成

Dockerfile の基礎

## ベースイメージ
FROM ubuntu:22.04

## メタデータ
LABEL maintainer="your-email@example.com"

## システムパッケージを更新
RUN apt-get update && apt-get upgrade -y

## 依存関係をインストール
RUN apt-get install -y python3 python3-pip

## 作業ディレクトリを設定
WORKDIR /app

## アプリケーションファイルをコピー
COPY . /app

## Python 依存関係をインストール
RUN pip3 install -r requirements.txt

## アプリケーションポートを公開
EXPOSE 8000

## 起動コマンドを定義
CMD ["python3", "app.py"]

コンテナのライフサイクル管理

コンテナ操作

## コンテナを作成して起動
docker run -d --name myapp ubuntu:22.04

## 実行中のコンテナの一覧を表示
docker ps

## コンテナを停止
docker stop myapp

## コンテナを削除
docker rm myapp

## コンテナの詳細を表示
docker inspect myapp

Docker レジストリとの連携

## Docker Hub にログイン
docker login

## ローカルイメージにタグを付ける
docker tag myimage:latest username/myimage:v1.0

## イメージをレジストリにプッシュ
docker push username/myimage:v1.0

## レジストリからイメージをプル
docker pull username/myimage:v1.0

コンテナ設定テクニック

環境変数

## 環境変数を使用してコンテナを実行
docker run -e DATABASE_URL=postgres://localhost \
  -e API_KEY=secret \
  myapp:latest

ボリュームマウント

## ローカルディレクトリをコンテナにマウント
docker run -v /local/path:/container/path myapp:latest

Docker の高度なデプロイ

Docker ネットワークの基本

Docker は、コンテナ間の接続とそれら間の通信を管理するための高度なネットワーク機能を提供します。

graph TD
    A[Docker ホスト] --> B[ブリッジネットワーク]
    B --> C[コンテナ 1]
    B --> D[コンテナ 2]
    B --> E[コンテナ 3]

ネットワークの種類

ネットワークタイプ 説明 使用例
ブリッジ デフォルトのネットワーク 隔離されたコンテナ間の通信
ホスト 直接ホストネットワーク 高パフォーマンスなシナリオ
オーバーレイ マルチホストネットワーク 分散システム
Macvlan 物理ネットワークの統合 ネットワークレベルでのコンテナの公開

Docker Compose によるコンテナオーケストレーション

Docker Compose の設定

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    networks:
      - app_network

  database:
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: secretpassword
    volumes:
      - postgres_data:/var/lib/postgresql/data
    networks:
      - app_network

networks:
  app_network:
    driver: bridge

volumes:
  postgres_data:

デプロイコマンド

## サービスを作成して起動
docker-compose up -d

## 実行中のサービスを表示
docker-compose ps

## コンテナを停止して削除
docker-compose down

コンテナのスケーラビリティ戦略

## 特定のサービスをスケールアップ
docker-compose up -d --scale web=3

コンテナのセキュリティベストプラクティス

セキュリティスキャン

## Docker イメージの脆弱性スキャン
docker scan myimage:latest

## 公式のセキュリティ重視のベースイメージを使用
FROM alpine:latest

ランタイムセキュリティ設定

## 制限された権限でコンテナを実行
docker run --read-only \
  --tmpfs /tmp \
  --security-opt=no-new-privileges:true \
  myapp:latest

高度なネットワークテクニック

カスタムネットワークの作成

## 隔離されたネットワークを作成
docker network create \
  --driver bridge \
  --subnet 192.168.0.0/24 \
  --gateway 192.168.0.1 \
  custom_network

## コンテナをカスタムネットワークに接続
docker run --network=custom_network myapp:latest

マルチホストデプロイ

graph TD
    A[Docker Swarm マネージャー] --> B[ワーカーノード 1]
    A --> C[ワーカーノード 2]
    A --> D[ワーカーノード 3]

Swarm の初期化

## Docker Swarm を初期化
docker swarm init

## クラスタ全体にサービスをデプロイ
docker service create \
  --replicas 3 \
  --network swarm_network \
  myapp:latest

まとめ

Docker は、現代のソフトウェア開発において革新的な技術であり、比類のない柔軟性、移植性、効率性を提供します。コンテナ化技術を習得することで、開発者は一貫性があり、スケーラブルなアプリケーションを作成できます。このアプリケーションは、多様なコンピューティング環境でシームレスに動作し、最終的に生産性を向上させ、インフラストラクチャの複雑さを軽減します。