Docker Engine でアプリケーションをコンテナ化する方法

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

はじめに

この包括的な Docker チュートリアルは、開発者とシステム管理者向けに、コンテナ技術を理解し実装するための実践的なガイドを提供します。Docker のコアコンセプト、インストール手順、基本的なコマンドを学ぶことで、学習者はソフトウェアのデプロイを効率化し、一貫した開発環境を作成するために必要なスキルを習得します。

Docker の基礎

Docker の基本概要

Docker は、ソフトウェアのデプロイと開発を革新する強力なコンテナ化プラットフォームです。開発者は、アプリケーションとそのすべての依存関係を、コンテナと呼ばれる標準化された単位にパッケージ化できます。

コンテナ化の核心概念

graph TD
    A[Docker イメージ] --> B[Docker コンテナ]
    A --> C[Dockerfile]
    B --> D[隔離された環境]
概念 説明
コンテナ 軽量で、独立実行可能なパッケージ
イメージ コンテナを作成するための読み取り専用テンプレート
Dockerfile イメージを構築するための指示を含むテキストファイル

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=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 のバージョンを確認
docker --version

## イメージをプルする
docker pull ubuntu:latest

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

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

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

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

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

コンテナは、アプリケーションに隔離された環境を提供し、さまざまなコンピューティング環境で一貫したパフォーマンスを保証します。アプリケーションを必要なすべての依存関係と共にパッケージ化することで、「私のマシンでは動作する」という問題を解決します。

Docker イメージの構築

Dockerfile の理解

Dockerfile は、Docker イメージを組み立てに必要なすべての命令を含むテキストドキュメントです。アプリケーションのパッケージ化とコンテナの作成に体系的なアプローチを提供します。

graph LR
    A[Dockerfile] --> B[Docker ビルド]
    B --> C[Docker イメージ]
    C --> D[Docker コンテナ]

Dockerfile 命令セット

命令 説明
FROM ベースイメージを指定します
COPY ファイルをイメージにコピーします
RUN イメージ構築中にコマンドを実行します
EXPOSE コンテナのネットワークポートを宣言します
CMD コンテナのデフォルト実行コマンドを定義します

Python Web アプリケーションの Dockerfile

## 公式 Python ランタイムをベースイメージとして使用
FROM python:3.9-slim

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

## requirements ファイルをコピー
COPY requirements.txt .

## 依存関係をインストール
RUN pip install --no-cache-dir -r requirements.txt

## アプリケーションコードをコピー
COPY . .

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

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

Docker イメージの構築

## タグ付きでイメージを構築
docker build -t myapp:v1 .

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

## イメージの詳細を確認
docker inspect myapp:v1

イメージ最適化戦略

graph TD
    A[レイヤー数を最小化]
    B[Alpine イメージを使用]
    C[ビルドキャッシュを活用]
    D[不要なファイルを削除]

高度なイメージ管理

## レジストリ用にイメージにタグを付ける
docker tag myapp:v1 username/myapp:v1

## Docker Hub にイメージをプッシュする
docker push username/myapp:v1

Docker の本番環境運用

コンテナオーケストレーション環境

graph TD
    A[Docker コンテナ] --> B[Kubernetes]
    A --> C[Docker Swarm]
    A --> D[Nomad]

本番環境デプロイ戦略

戦略 説明 スケーラビリティ
シングルホスト 基本的なデプロイ
Swarm モード ネイティブ Docker クラスタリング 中程度
Kubernetes 高度なオーケストレーション

Docker ネットワークの本番環境運用

## オーバーレイネットワークを作成
docker network create -d overlay production_network

## ネットワーク設定でサービスをデプロイ
docker service create \
  --name web-service \
  --network production_network \
  --replicas 3 \
  nginx:latest

コンテナ監視設定

version: "3"
services:
  prometheus:
    image: prom/prometheus
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
    ports:
      - "9090:9090"

  grafana:
    image: grafana/grafana
    ports:
      - "3000:3000"

高可用性設定

graph TD
    A[ロードバランサ] --> B[コンテナインスタンス 1]
    A --> C[コンテナインスタンス 2]
    A --> D[コンテナインスタンス 3]

リソース管理

## コンテナリソースの制限
docker run -it \
  --cpus=".5" \
  --memory="512m" \
  nginx:latest

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

## 非ルートユーザーとしてコンテナを実行
docker run --read-only \
  --tmpfs /tmp \
  --tmpfs /run \
  --security-opt=no-new-privileges:true \
  myapp:latest

CI/CD パイプライン

graph LR
    A[コードコミット] --> B[イメージビルド]
    B --> C[テスト実行]
    C --> D[レジストリへのプッシュ]
    D --> E[ステージングへのデプロイ]
    E --> F[本番環境へのデプロイ]

まとめ

Docker は、アプリケーションの移植性と一貫性を保証する堅牢なコンテナ化プラットフォームを提供することで、ソフトウェア開発を革新します。コンテナライフサイクル管理、Dockerfile の作成、そして必須の Docker コマンドを習得することで、専門家は開発ワークフローを最適化し、デプロイの複雑さを軽減し、多様なコンピューティング環境でスケーラブルで再現可能なソフトウェアソリューションを作成できます。