ゼロから Docker コンテナを作成する方法

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

はじめに

このチュートリアルは、Docker Compose を使用する方法を包括的に解説し、特に「docker: 'compose' is not a docker command」エラーへの対処法に焦点を当てています。Docker Compose のインストールと設定、マルチコンテナアプリケーションの構築と管理、そして効果的な Docker Compose の使用方法に関するベストプラクティスを学ぶことができます。

Docker の基礎

Docker コンテナ化の概要

Docker は、アプリケーションのデプロイと開発を革新する強力なコンテナ技術です。コンテナ技術により、開発者はアプリケーションとその依存関係をすべてパッケージ化し、さまざまなコンピューティング環境で一貫したパフォーマンスを確保できます。

Docker のコア概念

Docker とは何か?

Docker は、開発者がアプリケーションのデプロイ、スケーリング、管理を自動化できるオープンソースのコンテナ化プラットフォームです。コンテナと呼ばれる隔離された環境を作成することで、従来の仮想マシンに比べて軽量な代替手段を提供します。

Docker の主要コンポーネント

コンポーネント 説明
Docker Engine コンテナの作成と実行のための主要なランタイム環境
Docker イメージ アプリケーションコードと依存関係を含む読み取り専用テンプレート
Docker コンテナ Docker イメージの実行可能なインスタンス
Dockerfile コンテナビルド手順を定義するテキストファイル

Docker アーキテクチャ

graph TD
    A[Docker クライアント] --> B[Docker デーモン]
    B --> C[コンテナ ランタイム]
    B --> D[イメージ レジストリ]
    D --> E[Docker Hub]

基本的な 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=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 エンジンインストール
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

基本的な Docker 操作

## Docker Hub からイメージをプル

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

## コンテナを実行

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

## コンテナを停止

コンテナ技術の利点

Docker コンテナ化は、以下の利点を提供します。

  • 一貫したアプリケーション環境
  • より高速なデプロイとスケーリング
  • リソース消費量の削減
  • 開発ワークフローの改善
  • プラットフォームの独立性

Docker コンテナのユースケース

Docker は、以下の分野で広く使用されています。

  • マイクロサービスアーキテクチャ
  • CI/CD (継続的インテグレーション/継続的デリバリー)
  • クラウドネイティブアプリケーション開発
  • 開発およびテスト環境

Docker Compose のワークフロー

Docker Compose の理解

Docker Compose は、マルチコンテナ Docker アプリケーションを定義および実行するためのツールです。開発者は YAML ファイルを使用してアプリケーションサービス、ネットワーク、ボリュームを設定することで、複雑なコンテナ化された環境の管理を簡素化できます。

Docker Compose のアーキテクチャ

graph TD
    A[Docker Compose] --> B[docker-compose.yml]
    B --> C[Service 1]
    B --> D[Service 2]
    B --> E[Service 3]
    C --> F[Network]
    D --> F
    E --> F

Docker Compose の設定

YAML ファイルの構造

キー 説明
version Compose ファイルのフォーマットバージョン
services 個々のコンテナを定義
networks コンテナのネットワーク設定
volumes 永続的なデータストレージの管理

実用的な例:Web アプリケーションのデプロイ

サンプル docker-compose.yml

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./website:/usr/share/nginx/html
  database:
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: secretpassword
    volumes:
      - postgres_data:/var/lib/postgresql/data

volumes:
  postgres_data:

Docker Compose コマンド

## Ubuntu 22.04 への Docker Compose のインストール
sudo apt update
sudo apt install docker-compose

## Compose ファイルの検証
docker-compose config

## マルチコンテナアプリケーションの起動
docker-compose up -d

## 実行中のコンテナの表示
docker-compose ps

## コンテナの停止と削除
docker-compose down

サービスオーケストレーションのテクニック

Docker Compose は高度なサービスオーケストレーションを可能にします。

  • コンテナ間の依存関係の定義
  • 環境変数の管理
  • ネットワーク接続の設定
  • コンテナの起動順序の制御

スケーラビリティと柔軟性

マルチコンテナアプリケーションは、以下の利点があります。

  • モジュール型のアーキテクチャ
  • 簡単な水平方向のスケーリング
  • 設定管理の簡素化
  • 一貫した開発環境

Docker の高度なテクニック

Docker ネットワークの設定

ネットワークの種類

ネットワークモード 説明
Bridge デフォルトのネットワークモード
Host ホストネットワークを直接使用
Overlay マルチホスト間の通信
Macvlan MAC アドレスの割り当て
graph TD
    A[Docker ネットワーク] --> B[Bridge ネットワーク]
    A --> C[Host ネットワーク]
    A --> D[Overlay ネットワーク]
    A --> E[Macvlan ネットワーク]

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

## カスタムブリッジネットワークの作成
docker network create --driver bridge custom_network

## ネットワークの一覧表示
docker network ls

## ネットワークの詳細の確認
docker network inspect custom_network

コンテナのリソース管理

リソースの制約

services:
  webapp:
    image: nginx
    deploy:
      resources:
        limits:
          cpus: "0.50"
          memory: 512M
        reservations:
          cpus: "0.25"
          memory: 256M

Docker ボリュームの管理

## 名前付きボリュームの作成
docker volume create app_data

## コンテナへのボリュームのマウント
docker run -v app_data:/app/data nginx

## ボリュームの一覧表示
docker volume ls

## 使用されていないボリュームの削除
docker volume prune

Dockerfile の最適化

## マルチステージビルドの例
FROM golang:1.17 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp

FROM alpine:latest
COPY --from=builder /app/myapp /usr/local/bin
ENTRYPOINT ["myapp"]

高度なトラブルシューティング

## コンテナログの確認

## リアルタイムのリソース監視

## コンテナプロセス詳細

セキュリティ強化

ランタイムセキュリティオプション

## 読み取り専用ファイルシステムでコンテナを実行
docker run --read-only nginx

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

パフォーマンス監視

## システム全体の Docker 情報
docker system info

## ディスク使用量分析
docker system df

## 使用されていないリソースの削除
docker system prune -a

まとめ

このチュートリアルを終了すると、Docker Compose の詳細な理解と、「docker: 'compose' is not a docker command」エラーのトラブルシューティング方法を習得します。業界標準のベストプラクティスに従い、最適なパフォーマンスと保守性を確保しながら、Docker Compose アプリケーションを設定、管理、スケールできるようになります。