Ubuntu で Docker コンテナを設定する方法

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

はじめに

この包括的な Docker チュートリアルは、開発者と IT 専門家に、コンテナ化技術を理解するための必須スキルを提供します。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

## Docker リポジトリを設定
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 のバージョンを確認
docker --version

## Docker Hub からイメージをプル
docker pull ubuntu:latest

## 利用可能なイメージをリスト表示
docker images

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

Docker の主な利点

Docker によるコンテナ化は、以下の重要な利点を提供します。

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

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

コンテナの状態と管理

Docker コンテナは、作成から終了まで、ライフサイクルを通して複数の状態を遷移します。これらの状態を理解することは、効果的なコンテナ管理とデプロイに不可欠です。

stateDiagram-v2
    [*] --> Created
    Created --> Running
    Running --> Paused
    Paused --> Running
    Running --> Stopped
    Stopped --> Removed
    Removed --> [*]

コンテナの作成と初期化

## ベースイメージをプル
docker pull ubuntu:latest

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

## 対話型端末でコンテナを実行
docker run -it ubuntu:latest /bin/bash

コンテナ管理コマンド

コマンド 機能
docker create 新しいコンテナを作成 docker create ubuntu:latest
docker start 停止したコンテナを起動 docker start mycontainer
docker stop 実行中のコンテナを停止 docker stop mycontainer
docker restart コンテナを再起動 docker restart mycontainer
docker pause コンテナのプロセスを一時停止 docker pause mycontainer
docker unpause コンテナを再開 docker unpause mycontainer

コンテナのデプロイ戦略

## 複数のコンテナインスタンスをデプロイ
docker run -d --name web1 nginx
docker run -d --name web2 nginx
docker run -d --name web3 nginx

## 実行中のコンテナを確認
docker ps

Docker Compose によるコンテナのスケーリング

version: "3"
services:
  webapp:
    image: nginx
    deploy:
      replicas: 3

リソース管理

## コンテナのリソースを制限
docker run -d --cpus=0.5 --memory=512m nginx

コンテナの削除

## 停止したコンテナを削除
docker rm mycontainer

## 実行中のコンテナを強制的に削除
docker rm -f mycontainer

## すべての停止したコンテナを削除
docker container prune

コンテナのベストプラクティス

Dockerfile の最適化

## 特定のイメージタグを使用
FROM ubuntu:22.04

## レイヤー数を最小限に抑える
RUN apt-get update \
 && apt-get install -y python3 \
 && rm -rf /var/lib/apt/lists/*

## マルチステージビルドを使用
FROM python:3.9-slim
COPY --from=builder /app /app

コンテナ監視戦略

graph TD
    A[コンテナ監視] --> B[リソース使用状況]
    A --> C[パフォーマンス指標]
    A --> D[ログ]

パフォーマンス指標の追跡

指標 コマンド 目的
CPU 使用率 docker stats プロセッサ使用状況の監視
メモリ docker top メモリ割り当ての追跡
ネットワーク docker network inspect ネットワークパフォーマンスの分析

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

## 最小限の権限でコンテナを実行
docker run --read-only --tmpfs /tmp nginx

## コンテナの機能を制限
docker run --cap-drop ALL --cap-add NET_BIND_SERVICE nginx

コンテナのヘルスチェック

HEALTHCHECK --interval=5m --timeout=3s \
 CMD curl -f || exit 1

ログとトラブルシューティング

## コンテナログの確認
docker logs mycontainer

## リアルタイムログ監視
docker logs -f mycontainer

## 詳細なコンテナ情報取得
docker inspect mycontainer

リソース管理

## リソース制約の設定
docker run -d \
  --cpus=1 \
  --memory=512m \
  --memory-reservation=256m \
  nginx

コンテナオーケストレーションの原則

version: "3"
services:
  webapp:
    image: myapp
    deploy:
      replicas: 3
      restart_policy:
        condition: on-failure

まとめ

Docker は、軽量で一貫性があり、移植可能なコンテナ環境を提供することで、ソフトウェア開発を革新しています。このチュートリアルでは、Docker のインストール、コンテナの管理、およびさまざまなコンピューティングプラットフォーム全体でコンテナ化技術を効果的に活用するための基本的なスキルを習得しました。これらの技術を習得することで、開発者はアプリケーションの信頼性、スケーラビリティ、およびデプロイ効率を高めることができます。