Docker コンテナを効率的に構築およびデプロイする方法

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

はじめに

この包括的な Docker チュートリアルは、開発者とシステム管理者向けに、コンテナ技術を理解し実装するための詳細なガイドを提供します。Docker のコアコンセプト、インストール手順、基本的なコマンドを学ぶことで、学習者は、さまざまなコンピューティング環境でコンテナ化されたアプリケーションを作成、管理、デプロイするための実践的なスキルを習得します。

Docker の基礎

Docker とコンテナ技術の概要

Docker は、コンテナ化のための強力なプラットフォームであり、開発者は異なるコンピューティング環境でアプリケーションを一貫してパッケージ化、配布、実行できます。コンテナ技術は、軽量、移植性があり、効率的な実行環境を提供することで、ソフトウェアのデプロイを革新します。

Docker のコアコンセプト

Docker とは何か?

Docker は、コンテナ化を使用してアプリケーションのデプロイを簡素化するオープンソースプラットフォームです。従来の仮想マシンとは異なり、Docker コンテナはホストシステムのカーネルを共有するため、リソース効率が高く、起動が高速です。

graph TD
    A[アプリケーションコード] --> B[Docker イメージ]
    B --> C[Docker コンテナ]
    C --> D[ホストオペレーティングシステム]

Docker の主要コンポーネント

コンポーネント 説明 機能
Docker エンジン コアランタイム コンテナのライフサイクルを管理
Docker イメージ 読み取り専用テンプレート コンテナの構造を定義
Docker コンテナ 実行可能なインスタンス アプリケーションを実行

Ubuntu 22.04 へのインストール

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

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

## 依存関係をインストール
sudo apt-get install ca-certificates curl gnupg

## Docker の公式 GPG キーを追加
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

## リポジトリを設定
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg]  \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" \
  | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

## Docker パッケージをインストール
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

基本的な Docker コマンド

効果的なコンテナ管理には、基本的な Docker コマンドの理解が不可欠です。

## Docker のバージョンを確認
docker --version

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

## 利用可能なイメージを一覧表示
docker images

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

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

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

Docker のユースケース

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

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

Docker イメージの作成

Docker イメージの理解

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

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

Dockerfile の基礎

Dockerfile は、Docker イメージを構築するために必要なすべての命令を含むテキストドキュメントです。以下に包括的な例を示します。

## ベースイメージの選択
FROM ubuntu:22.04

## メタデータ
LABEL maintainer="developer@example.com"

## 環境設定
ENV APP_HOME=/application

## システム依存関係
RUN apt-get update && apt-get install -y \
  python3 \
  python3-pip \
  && rm -rf /var/lib/apt/lists/*

## 作業ディレクトリの設定
WORKDIR ${APP_HOME}

## アプリケーションファイルのコピー
COPY . ${APP_HOME}

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

## アプリケーションポートの公開
EXPOSE 8000

## コンテナ起動コマンド
CMD ["python3", "app.py"]

Dockerfile の命令

命令 目的
FROM ベースイメージを指定 FROM ubuntu:22.04
RUN シェルコマンドを実行 RUN apt-get update
COPY ファイルをイメージにコピー COPY . /app
WORKDIR 作業ディレクトリを設定 WORKDIR /application
ENV 環境変数を設定 ENV DEBUG=true
EXPOSE コンテナポートを定義 EXPOSE 80
CMD デフォルトのコンテナコマンド CMD ["python", "app.py"]

Docker イメージの構築

これらのコマンドを使用して Docker イメージを作成および管理します。

## Dockerfile からイメージをビルド
docker build -t myapp:v1 .

## ローカルイメージを一覧表示
docker images

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

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

イメージ管理戦略

Docker は、イメージの作成と配布のための複数の方法を提供します。

  • ローカルイメージの構築
  • Docker Hub からイメージのプル
  • Dockerfile を使用したカスタムイメージの作成
  • コンテナレジストリへのイメージのプッシュ

コンテナのデプロイ

コンテナデプロイの基本

コンテナデプロイは、ローカル開発環境からクラウドインフラまで、さまざまな環境で Docker コンテナを実行および管理するプロセスです。効果的なデプロイ戦略は、アプリケーションのパフォーマンスを安定、スケーラブル、そして信頼性高く保ちます。

graph TD
    A[Docker イメージ] --> B[ローカルコンテナ]
    A --> C[クラウドコンテナ]
    B --> D[開発環境]
    C --> E[本番インフラ]

コンテナランタイムの管理

基本的なコンテナ操作

## デタッチモードでコンテナを実行
docker run -d --name webapp nginx:latest

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

## コンテナを停止
docker stop webapp

## コンテナを削除
docker rm webapp

## コンテナを再起動
docker restart webapp

コンテナの設定パラメータ

パラメータ 説明
-p ポートマッピング -p 8080:80
-v ボリュームマウント -v /host/path:/container/path
-e 環境変数 -e DATABASE_URL=mysql://localhost
--network ネットワーク設定 --network=custom_network

コンテナのネットワーク

Docker は、コンテナ間の通信のために複数のネットワークモードを提供します。

## カスタムネットワークを作成
docker network create myapp_network

## 特定のネットワークでコンテナを実行
docker run -d --network=myapp_network nginx:latest

コンテナのスケーリング戦略

Docker Compose デプロイ

version: "3"
services:
  webapp:
    image: nginx:latest
    ports:
      - "8080:80"
    deploy:
      replicas: 3
      restart_policy:
        condition: on-failure

クラウドデプロイのアプローチ

AWS ECS デプロイ例

## イメージを AWS ECR にプッシュ
aws ecr get-login-password | docker login
docker tag myapp:latest aws_account.dkr.ecr.region.amazonaws.com/myapp
docker push aws_account.dkr.ecr.region.amazonaws.com/myapp

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

Kubernetes などのコンテナオーケストレーションプラットフォームは、コンテナのライフサイクル、スケーリング、およびネットワークを自動的に管理することで、複雑なデプロイシナリオを簡素化します。

まとめ

Docker は、軽量で移植性が高く効率的なランタイム環境を提供することで、ソフトウェアのデプロイ方法に革命をもたらしました。Docker の主要コンポーネント、インストール手順、および必須コマンドを習得することで、専門家はアプリケーション開発を効率化し、リソース利用を改善し、さまざまなコンピューティングプラットフォーム間で一貫したパフォーマンスを実現できます。このチュートリアルは、学習者にコンテナ化技術を効果的に活用するために必要な基本的な知識を提供します。