Docker イメージとコンテナの作成方法

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

はじめに

この包括的な Docker チュートリアルは、開発者とシステム管理者向けに、コンテナ技術を理解し実装するための実践的なガイドを提供します。Docker のコア原則、アーキテクチャ、および必須コマンドを探索することで、学習者は、多様なコンピューティング環境でアプリケーションを効率的にパッケージ化、配布、実行するために必要なスキルを習得します。

Docker の基礎

Docker とは何か?

Docker は、ソフトウェアのパッケージ化とデプロイを革新する強力なコンテナ化技術です。開発者は、異なるコンピューティング環境でアプリケーションを一貫して作成、配布、実行できます。

Docker のコア概念

コンテナ化の原則

コンテナ化により、アプリケーションとその依存関係をすべてまとめてパッケージ化できます。これにより、さまざまなプラットフォーム間で一貫した実行が保証されます。従来の仮想マシンとは異なり、コンテナはホストシステムのカーネルを共有するため、軽量で効率的です。

graph TD A[アプリケーションコード] --> B[Docker コンテナ] B --> C[一貫したデプロイ] B --> D[分離] B --> E[移植性]

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 イメージについて

Docker イメージは、Docker コンテナを作成するための命令セットを含む、読み取り専用のテンプレートです。コンテナ化されたアプリケーションの基盤となり、必要なすべての依存関係と設定をパッケージ化します。

Dockerfile の基礎

Dockerfile は、Docker イメージを組み立てるために使用されるコマンドを含むテキストドキュメントです。イメージの作成と設定に体系的なアプローチを提供します。

graph TD A[Dockerfile] --> B[ビルドコマンド] B --> C[Docker イメージ] C --> D[コンテナのデプロイ]

Dockerfile の指示の種類

指示 目的
FROM ベースイメージを指定
RUN イメージ構築中にコマンドを実行
COPY ファイルをイメージにコピー
WORKDIR 作業ディレクトリを設定
EXPOSE ネットワークポートを宣言
CMD コンテナの実行コマンドを定義

サンプル Dockerfile の作成

## 公式 Ubuntu ベースイメージを使用
FROM ubuntu:22.04

## システムパッケージを更新
RUN apt-get update && apt-get upgrade -y

## Python をインストール
RUN apt-get install -y python3 python3-pip

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

## アプリケーションファイルのコピー
COPY . /app

## 依存関係をインストール
RUN pip3 install -r requirements.txt

## デフォルトコマンドを指定
CMD ["python3", "app.py"]

Docker イメージの構築

## Dockerfile があるディレクトリに移動
cd /path/to/project

## Docker イメージを構築
docker build -t myapp:v1 .

## 作成されたイメージを確認
docker images

イメージ管理コマンド

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

## 特定のイメージを削除
docker rmi myapp:v1

## イメージにタグを付ける
docker tag myapp:v1 myregistry/myapp:latest

## レジストリにイメージをプッシュ
docker push myregistry/myapp:latest

イメージ作成のベストプラクティス

  • イメージサイズを最小限にする
  • マルチステージビルドを使用する
  • キャッシュ機構を活用する
  • 不要なパッケージのインストールを避ける
  • セキュリティスキャンを実装する

コンテナのデプロイ

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

コンテナのデプロイは、Docker コンテナのライフサイクル全体、つまり作成から終了までを管理し、効率的で信頼性の高いアプリケーション実行を保証するプロセスです。

graph LR A[イメージのプル] --> B[コンテナの作成] B --> C[コンテナの起動] C --> D[実行状態] D --> E[コンテナの停止] E --> F[コンテナの削除]

コンテナのデプロイ戦略

戦略 説明
単一コンテナ 個々のコンテナの基本的なデプロイ
マルチコンテナ 接続されたコンテナのデプロイ
スケーリング コンテナインスタンスの水平スケーリング
ロールアウト更新 段階的なコンテナの置き換え

基本的なコンテナデプロイコマンド

## シンプルなコンテナを実行
docker run -d --name web-app nginx:latest

## ポートマッピング付きでコンテナを実行
docker run -p 8080:80 -d nginx:latest

## 環境変数付きでコンテナを実行
docker run -e DATABASE_URL=postgres://user:pass@host/db -d myapp:v1

高度なデプロイオプション

## コンテナのリソース制限
docker run --cpus=2 --memory=1g nginx:latest

## ボリュームのマウント
docker run -v /host/path:/container/path nginx:latest

## ネットワーク設定
docker run --network=custom_network nginx:latest

コンテナ管理コマンド

## 実行中のコンテナをリスト表示
docker ps

## すべてのコンテナをリスト表示
docker ps -a

## コンテナを停止
docker stop web-app

## コンテナを削除
docker rm web-app

## コンテナを再起動
docker restart web-app

コンテナオーケストレーションの基本

## Docker Compose デプロイ
docker-compose up -d

## コンテナのスケーリング
docker-compose scale web=3

## サービスの状態確認
docker-compose ps

コンテナのパフォーマンス監視

## リアルタイムのコンテナリソース使用状況
docker stats

## コンテナログ
docker logs web-app

## コンテナの詳細情報を取得
docker inspect web-app

まとめ

Docker は、軽量で移植可能なコンテナ化ソリューションを提供することで、ソフトウェア開発を革新しています。一貫したアプリケーションのデプロイを保証します。Docker の基本的な概念、インストール手順、主要なコマンドを習得することで、専門家は開発ワークフローを効率化し、システムの信頼性を向上させ、さまざまなプラットフォームやクラウド環境全体でより柔軟なインフラストラクチャを実現できます。