Docker イメージの作成とカスタマイズ方法

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

はじめに

この段階的なガイドでは、Docker イメージを対話的に実行し、Docker コンテナを探索および操作し、Docker 環境を効果的に管理する方法を学習します。このチュートリアル終了までに、コンテナベースのワークフローを効率化するために Docker の対話モードを活用する方法をしっかりと理解しているはずです。

Docker イメージの基本

Docker イメージの理解

Docker イメージは、コンテナ技術の基盤であり、事前に設定されたオペレーティングシステムとアプリケーション環境を含む、読み取り専用のテンプレートです。これらのイメージは、コンテナの完全なファイルシステムを定義する複数のレイヤーで構成されています。

イメージの構造とレイヤー

graph TD
    A[ベースイメージ] --> B[アプリケーションレイヤー]
    A --> C[設定レイヤー]
    A --> D[依存関係レイヤー]

Docker イメージの主な特徴は次のとおりです。

レイヤーの種類 説明
ベースイメージ 基礎となるオペレーティングシステムレイヤー Ubuntu 22.04
依存関係レイヤー 必要なライブラリとパッケージ Python ランタイム
アプリケーションレイヤー 実際のアプリケーションコード Web アプリケーション

Docker イメージの作成

Python アプリケーション用の Docker イメージを作成する実例を次に示します。

## プロジェクト用の新しいディレクトリを作成
mkdir python-app
cd python-app

## Dockerfile を作成
touch Dockerfile

## Dockerfile を基本的な設定で編集
echo "FROM ubuntu:22.04
RUN apt-get update && apt-get install -y python3 python3-pip
WORKDIR /app
COPY . /app
RUN pip3 install -r requirements.txt
CMD ['python3', 'app.py']" > Dockerfile

## Docker イメージをビルド
docker build -t my-python-app .

この Dockerfile は、イメージ作成の重要な手順を示しています。

  • ベースイメージ(Ubuntu 22.04)の選択
  • システム依存関係のインストール
  • 作業ディレクトリの設定
  • アプリケーションファイルのコピー
  • アプリケーション要件のインストール
  • デフォルトコマンドの定義

イメージ管理コマンド

## ローカルイメージのリスト表示
docker images

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

## イメージの削除
docker rmi my-python-app

Docker イメージは、さまざまなコンピューティングプラットフォーム間で一貫した再現可能な環境を提供し、効率的なアプリケーションのデプロイとスケーリングを可能にします。

Docker コンテナの管理

コンテナ実行の基本

Docker コンテナは、イメージの実行時インスタンスを表し、アプリケーション実行のための隔離された環境を提供します。コンテナ管理を理解することは、効果的なデプロイとスケーリングに不可欠です。

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

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

基本的なコンテナ管理コマンド

コマンド 機能
docker run コンテナの作成と起動 docker run ubuntu:22.04
docker ps 実行中のコンテナのリスト表示 docker ps -a
docker start 停止したコンテナの起動 docker start container_id
docker stop 実行中のコンテナの停止 docker stop container_id
docker rm コンテナの削除 docker rm container_id

実践的なコンテナ実行シナリオ

対話型コンテナモード

## Ubuntu コンテナを対話的に実行
docker run -it ubuntu:22.04 /bin/bash

## コンテナ内でパッケージをインストール
apt-get update
apt-get install python3

## コンテナを終了
exit

バックグラウンドコンテナ実行

## デタッチモードでウェブサーバーを実行
docker run -d -p 8080:80 nginx

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

コンテナリソースの管理

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

コンテナのネットワーク

graph LR
    A[Docker ホスト] --> B[ブリッジネットワーク]
    B --> C[コンテナ 1]
    B --> D[コンテナ 2]
    B --> E[コンテナ 3]

Docker は柔軟なネットワーク機能を提供し、コンテナと外部ネットワーク間のシームレスな通信を可能にします。

イメージ最適化テクニック

イメージサイズ縮小戦略

Docker イメージの最適化は、コンテナの効率的なデプロイ、ストレージ要件の削減、パフォーマンスの向上に不可欠です。

レイヤー最適化の原則

graph TD
    A[ベースイメージ] --> B[最小限の依存関係]
    B --> C[単一レイヤー実行]
    C --> D[キャッシュ最適化]

Dockerfile のベストプラクティス

テクニック 説明 影響
マルチステージビルド ビルド環境と実行環境を分離 最終イメージサイズを削減
Alpine ベースイメージ 軽量な Linux ディストリビューション イメージフットプリントを最小限に抑える
RUN コマンドの結合 レイヤー数を削減 イメージの複雑さを軽減

実践的な最適化例

## 最適化されていない Dockerfile
FROM ubuntu:22.04
RUN apt-get update
RUN apt-get install -y python3
RUN pip3 install flask
COPY . /app
EXPOSE 5000
CMD ["python3", "app.py"]

## 最適化された Dockerfile
FROM python:3.9-alpine
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 5000
CMD ["python", "app.py"]

イメージサイズの比較

## イメージサイズを確認
docker images

キャッシュとビルド最適化

graph LR
    A[Dockerfile] --> B[レイヤーキャッシュ]
    B --> C[変更されていないレイヤー]
    B --> D[再構築されたレイヤー]

効果的な Docker イメージ最適化は、戦略的なレイヤー管理、不要な依存関係の最小化、ビルドキャッシュ機構を活用することで、コンテナのパフォーマンスとスケーラビリティを向上させることを含みます。

まとめ

この包括的なガイドでは、Docker イメージのダウンロードとプル、Docker コンテナの対話型実行、実行中のコンテナの探索と操作、コンテナへの変更の修正とコミット、そして効率的な Docker 環境の管理方法を学習します。Docker の初心者の方でも、経験豊富なユーザーの方でも、このチュートリアルは、Docker イメージを対話的に実行し、コンテナベースのアプリケーションを制御するための知識を提供します。