最新の開発で Docker の基本をマスターする方法

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

はじめに

この包括的な Docker チュートリアルは、開発者と IT 専門家を対象に、コンテナ技術に関する深い理解を提供します。基本的な概念、アーキテクチャの原則、そして実践的な実装戦略について網羅的に解説します。Docker のコアメカニズムを理解することから、必須のコマンドを習得することまで、このガイドは、現代のソフトウェア開発とデプロイに Docker を活用するための構造化されたアプローチを提供します。

Docker の基礎

Docker 技術の概要

Docker は、ソフトウェアのデプロイと仮想化を革新する強力なコンテナ技術です。オープンソースプラットフォームとして、Docker は開発者が異なるコンピューティング環境間でアプリケーションを一貫してパッケージ化、配布、実行することを可能にします。

Docker のコア概念

コンテナと仮想マシン

graph TD
    A[物理ハードウェア] --> B[Docker コンテナ]
    A --> C[仮想マシン]
    B --> D[軽量]
    B --> E[共有カーネル]
    C --> F[重厚]
    C --> G[完全な OS]
機能 Docker コンテナ 仮想マシン
リソース使用量 軽量 重厚
起動時間 数秒 数分
隔離レベル プロセスレベル 完全な OS レベル

Docker アーキテクチャ

Docker は、クライアント - サーバーアーキテクチャを採用し、主要なコンポーネントは以下のとおりです。

  • Docker デーモン
  • Docker クライアント
  • Docker レジストリ
  • Docker イメージ
  • Docker コンテナ

基本的な Docker コマンド

Ubuntu 22.04 に Docker をインストールする手順:

## システムパッケージを更新
sudo apt update

## Docker の依存関係をインストール
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

## Docker リポジトリを設定
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 pull ubuntu:latest

## イメージの一覧を表示する
docker images

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

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

## コンテナを停止する
docker stop [container_id]

Docker のユースケース

Docker 技術は、以下の場面で重要です。

  • マイクロサービスアーキテクチャ
  • CI/CD (継続的インテグレーション/継続的デリバリー)
  • クラウドネイティブアプリケーション開発
  • 一貫した開発環境
  • スケーラブルなインフラストラクチャ管理

イメージ作成ガイド

Docker イメージの理解

Docker イメージは、コンテナを作成するために使用される読み取り専用のテンプレートです。アプリケーションの実行に必要なファイルシステムの変更と設定を表す複数のレイヤーで構成されています。

Dockerfile の基礎

graph TD
    A[Dockerfile] --> B[ベースイメージ]
    A --> C[環境設定]
    A --> D[アプリケーションコード]
    A --> E[設定]
    A --> F[実行指示]

Dockerfile の構造

指令 説明
FROM ベースイメージを定義する FROM ubuntu:22.04
RUN コマンドを実行する RUN apt-get update
COPY ファイルをコピーする COPY ./app /application
WORKDIR 作業ディレクトリを設定する WORKDIR /application
EXPOSE ネットワークポートを定義する EXPOSE 8080
CMD コンテナのデフォルトコマンド CMD ["python", "app.py"]

サンプル Dockerfile の作成

## 公式 Ubuntu ベースイメージを使用
FROM ubuntu:22.04

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

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

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

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

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

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

Docker ビルドプロセス

Docker コマンドを使用してイメージをビルドします。

## Docker イメージをビルド
docker build -t myapp:v1 .

## 作成されたイメージの一覧を表示
docker images

## 作成されたイメージを実行
docker run -p 5000:5000 myapp:v1

イメージレイヤーの管理

graph LR
    A[ベースイメージレイヤー] --> B[更新レイヤー]
    B --> C[依存関係レイヤー]
    C --> D[アプリケーションコードレイヤー]
    D --> E[設定レイヤー]

イメージレイヤーの最適化テクニック

  • レイヤー数を最小限にする
  • マルチステージビルドを使用する
  • ビルドキャッシュを活用する
  • 不要なファイルを削除する
  • 特定のイメージタグを使用する

Docker の最適化

パフォーマンス最適化戦略

Docker の最適化は、コンテナのパフォーマンス向上、リソース消費量の削減、デプロイ効率の向上に焦点を当てています。

イメージサイズの削減

graph TD
    A[大きなイメージ] --> B[マルチステージビルド]
    A --> C[Alpine ベースイメージ]
    A --> D[不要なファイルの削除]

イメージサイズの比較

イメージタイプ サイズ ビルド時間 パフォーマンス
標準 Ubuntu 500MB 遅い 低い
Alpine ベース 50MB 速い 高い
マルチステージ 100MB 中間 最適

マルチステージビルドの例

## ビルドステージ
FROM golang:1.17 AS builder
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -o myapp

## プロダクションステージ
FROM alpine:latest
COPY --from=builder /app/myapp /usr/local/bin/
EXPOSE 8080
CMD ["myapp"]

コンテナのリソース管理

## CPU とメモリの制限を設定
docker run -d \
  --cpus="1.5" \
  --memory="512m" \
  --memory-reservation="256m" \
  myapp:latest

Docker Compose の最適化

version: "3.8"
services:
  webapp:
    build:
      context: .
      cache_from:
        - myregistry.com/base-image
    deploy:
      resources:
        limits:
          cpus: "0.50"
          memory: 512M
        reservations:
          cpus: "0.25"
          memory: 256M

CI/CD 統合テクニック

## キャッシュ最適化を使用した Docker ビルド
docker build \
  --cache-from myregistry.com/myapp:latest \
  -t myapp:${CI_COMMIT_SHA} .

## 最適化されたイメージをプッシュ
docker push myregistry.com/myapp:${CI_COMMIT_SHA}

実行時パフォーマンス監視

## リアルタイムコンテナ統計情報

## コンテナのリソース使用状況

## コンテナのパフォーマンスを検査

まとめ

Docker は、ソフトウェア開発における画期的な技術であり、一貫性、効率性、スケーラビリティを備えたアプリケーションのデプロイを、多様なコンピューティング環境にわたって可能にします。コンテナ技術を習得することで、開発者はワークフローを効率化し、移植性を向上させ、リソース利用を最適化できます。Docker は、現代の DevOps およびクラウドネイティブアプリケーションアーキテクチャにおいて不可欠なツールです。