Docker コンテナの構築と設定方法

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

はじめに

この包括的な Docker チュートリアルは、開発者と IT 専門家を対象に、コンテナ技術を理解し実装するための実践的なガイドを提供します。Docker のコアコンセプト、インストール手順、基本的なコマンドを学ぶことで、現代的なソフトウェアのデプロイメントと開発環境に必要なスキルを習得できます。

Docker の基礎

Docker とは何か?

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

Docker のコアコンセプト

コンテナ化技術

コンテナ化により、アプリケーションは隔離された環境で実行され、いくつかの重要な利点を提供します。

機能 説明
隔離性 コンテナは互いに干渉することなく独立して実行されます
ポータビリティ アプリケーションは、さまざまなシステム間をシームレスに移動できます
効率性 軽量で、従来の仮想マシンよりも高速です
graph TD
    A[アプリケーションコード] --> B[Docker コンテナ]
    B --> C[一貫したデプロイメント]
    B --> D[リソース効率]

Ubuntu 22.04 への Docker インストール

Ubuntu に Docker をインストールするには、以下のコマンドを使用します。

## パッケージインデックスを更新
sudo apt-get update

## 依存関係をインストール
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common

## Docker の公式 GPG キーを追加
curl -fsSL | sudo apt-key add -

## Docker リポジトリを設定
sudo add-apt-repository "deb [arch=amd64]  $(lsb_release -cs) stable"

## Docker CE をインストール
sudo apt-get update
sudo apt-get install docker-ce

最初の Docker コンテナの例

シンプルな nginx コンテナを作成して実行します。

## nginx イメージをプル
sudo docker pull nginx

## nginx コンテナを実行
sudo docker run -d -p 80:80 nginx

このコマンドは、nginx イメージをダウンロードし、コンテナを実行します。コンテナのポート 80 をホストシステムのポート 80 にマッピングします。

Docker の主要コンポーネント

  • Docker エンジン: コアランタイム環境
  • Docker イメージ: コンテナのための読み取り専用テンプレート
  • Docker コンテナ: イメージの実行可能なインスタンス
  • Dockerfile: カスタムイメージを構築するためのスクリプト

環境変数

Docker での環境変数の理解

環境変数は、Docker コンテナの構成や実行時情報を提供するキーバリューペアです。コンテナのソースコードを変更することなく、動的にアプリケーションの構成を調整できます。

環境変数の構成方法

構成方法 説明 使用例
Dockerfile ENV イメージビルド時に静的な環境変数を定義 デフォルト構成の設定
Docker Run コマンド 実行時特有の変数を渡す デフォルト設定のオーバーライド
Docker Compose 構成ファイルに環境変数を定義 複雑なマルチコンテナ設定
graph TD
    A[環境変数のソース] --> B[Dockerfile]
    A --> C[Docker Run コマンド]
    A --> D[Docker Compose]

Dockerfile 環境変数の例

環境変数を使ったシンプルな Dockerfile を作成します。

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

## 環境変数を設定
ENV APP_HOME=/opt/myapp
ENV DATABASE_URL=localhost
ENV LOG_LEVEL=info

## アプリケーションディレクトリを作成
RUN mkdir -p $APP_HOME

## 作業ディレクトリを設定
WORKDIR $APP_HOME

実行時環境変数の注入

コンテナ実行時に環境変数を渡します。

## カスタム環境変数を持つコンテナを実行
docker run -e DATABASE_URL=postgresql://user:pass@db.example.com \
  -e LOG_LEVEL=debug \
  myapp:latest

Docker Compose 環境構成

環境変数を使った docker-compose.yml の例です。

version: "3"
services:
  web:
    image: myapp
    environment:
      - DATABASE_URL=postgresql://user:pass@db
      - LOG_LEVEL=info

環境変数のベストプラクティス

  • 機密情報には環境変数を使用する
  • クレデンシャルをハードコードしない
  • ローカル開発では .env ファイルを活用する
  • セキュアな変数管理戦略を実装する

Docker のベストプラクティス

コンテナイメージの最適化

パフォーマンスとセキュリティのために効率的な Docker イメージは不可欠です。マルチステージビルドを実装して、イメージサイズと複雑さを削減します。

## マルチステージビルドの例
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/
EXPOSE 8080
CMD ["myapp"]

セキュリティに関する考慮事項

セキュリティ対策 説明 実装方法
最小限のベースイメージ 軽量なベースイメージを使用 Alpine Linux
非ルートユーザー コンテナを非ルートユーザーで実行 USER ディレクティブ
イメージスキャン 脆弱性を検出する Trivy, Docker Scout
graph TD
    A[Docker セキュリティ] --> B[最小限のイメージ]
    A --> C[非ルート実行]
    A --> D[定期的なスキャン]

コンテナのリソース管理

コンテナのオーバーロードを防ぐために、リソース制約を実装します。

## CPU とメモリの使用量を制限
docker run -d \
  --cpus="0.5" \
  --memory="512m" \
  --memory-reservation="256m" \
  myapp:latest

Dockerfile の最適化テクニック

イメージレイヤーを削減し、ビルドプロセスを最適化します。

## コマンドを結合してレイヤーを最小限にする
RUN apt-get update \
 && apt-get install -y python3 \
 && apt-get clean \
 && rm -rf /var/lib/apt/lists/*

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

複雑なデプロイメントのために Docker Compose を活用します。

version: "3"
services:
  web:
    image: myapp
    deploy:
      replicas: 3
      restart_policy:
        condition: on-failure
    ports:
      - "8080:80"

ロギングと監視戦略

集中型のロギングと監視を設定します。

## JSON ファイルロギングでサイズ制限
docker run --log-driver json-file \
  --log-opt max-size=10m \
  --log-opt max-file=3 \
  myapp:latest

まとめ

Docker は、ソフトウェアのデプロイメントに革命的なアプローチを提供する技術です。開発者は、Docker を用いて、様々なコンピューティング環境でアプリケーションを作成、管理、スケールアップするための強力なツールを利用できます。コンテナ化技術を習得することで、開発者はソフトウェア開発およびデプロイメントのワークフローにおいて、一貫性、移植性、効率性を向上させることができます。