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

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

はじめに

この包括的な Docker チュートリアルは、開発者とシステム管理者向けに、コンテナ技術を理解し実装するための実践的なガイドを提供します。Docker のコアコンセプト、アーキテクチャ、および必須コマンドを探索することで、学習者は、異なるコンピューティング環境全体でアプリケーションを効率的にパッケージ化、配布、管理するために必要なスキルを習得します。

Docker の基礎

Docker の概要

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

コンテナ化の核心概念

コンテナ化は、フルマシン仮想化の軽量な代替手段であり、アプリケーションを隔離された環境で実行できるようにします。Docker は、コンテナを使用してソフトウェアとその依存関係をカプセル化し、さまざまなシステム間で一貫した実行を保証します。

graph TD A[アプリケーションコード] --> B[Docker コンテナ] B --> C[一貫したデプロイ] B --> 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) 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 エンジンをインストール
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

基本的な Docker コマンド

## Docker のバージョンを確認

## Ubuntu イメージをプル

## 利用可能なイメージの一覧表示

## コンテナを実行

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

## コンテナを停止

Docker の主な利点

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

Docker Compose のワークフロー

Docker Compose の理解

Docker Compose は、複数のコンテナからなる Docker アプリケーションを定義および実行するためのツールです。YAML ファイルを使用してアプリケーションサービス、ネットワーク、ボリュームを構成することで、複雑なアプリケーションアーキテクチャをシンプルな構成で実現します。

graph TD A[Docker Compose YAML] --> B[サービス構成] B --> C[コンテナオーケストレーション] B --> D[ネットワーク設定] B --> E[ボリューム管理]

Ubuntu 22.04 へのインストール

## Docker Compose をインストール
sudo apt update
sudo apt install docker-compose-plugin

## インストールを確認
docker compose version

Docker Compose 設定ファイル

典型的な docker-compose.yml の構造には、サービス、ネットワーク、ボリュームが含まれます。

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
  database:
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: mysecretpassword
    volumes:
      - postgres-data:/var/lib/postgresql/data

volumes:
  postgres-data:

主要な Docker Compose コマンド

コマンド 説明
docker compose up コンテナを作成して起動
docker compose down コンテナを停止して削除
docker compose ps コンテナ一覧表示
docker compose logs コンテナログの表示
docker compose build サービスのビルドまたは再ビルド

マルチコンテナアプリケーションの例

version: "3.8"
services:
  frontend:
    build: ./frontend
    ports:
      - "3000:3000"
  backend:
    build: ./backend
    ports:
      - "5000:5000"
    depends_on:
      - database
  database:
    image: mongo:latest
    volumes:
      - mongodb_data:/data/db

volumes:
  mongodb_data:

高度な構成テクニック

services:
  web:
    restart: always
    environment:
      - DEBUG=True
    networks:
      - app_network
    deploy:
      replicas: 3
      update_config:
        parallelism: 1

networks:
  app_network:
    driver: bridge

Docker の高度な戦略

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

コンテナオーケストレーションは、複数のホストにまたがる複雑で分散型のアプリケーションを管理することで、Docker の機能を拡張します。

graph TD A[Docker コンテナ] --> B[Kubernetes クラスタ] B --> C[自動デプロイ] B --> D[スケーリング] B --> E[自己修復]

パフォーマンス最適化テクニック

最適化戦略 実装
マルチステージビルド イメージサイズを削減
レイヤキャッシュ ビルド速度の向上
最小限のベースイメージ リソース消費量の削減

Dockerfile の高度な最適化

## マルチステージビルドの例
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"]

コンテナの監視とログ

## Docker 監視ツールをインストール
sudo apt update
sudo apt install prometheus node-exporter

## 高度なログ設定
docker run --log-driver=journald \
  --log-opt max-size=10m \
  --log-opt max-file=3 \
  myimage

CI/CD ワークフロー

version: "3.8"
services:
  app:
    image: myapp:${DEPLOY_VERSION}
    deploy:
      replicas: 3
      update_config:
        parallelism: 1
        delay: 10s
    networks:
      - production

networks:
  production:
    driver: overlay

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

## 権限を制限してコンテナを実行
docker run --read-only \
  --tmpfs /tmp \
  --security-opt=no-new-privileges:true \
  myimage

リソース管理

services:
  web:
    deploy:
      resources:
        limits:
          cpus: "0.50"
          memory: 512M
        reservations:
          cpus: "0.25"
          memory: 256M

まとめ

Docker は、ソフトウェアのデプロイ方法を革新する技術です。アプリケーション開発のために、軽量で一貫性があり、隔離された環境を提供します。Docker の基本的な技術を習得することで、開発者はワークフローを効率化し、移植性を向上させ、多様なコンピューティングプラットフォーム間での複雑なデプロイプロセスを簡素化できます。