Linux で Docker コンテナを作成する方法

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

はじめに

この包括的な Docker チュートリアルは、開発者とシステム管理者向けに、コンテナ化技術を理解し実装するための実践的なガイドを提供します。Docker のコアコンセプト、インストール手順、基本的なコマンドを学ぶことで、学習者は軽量で移植可能なアプリケーション環境を作成するための重要なスキルを習得します。

Docker の基礎

コンテナ化技術の概要

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

Docker のコアコンセプト

Docker とは何か?

Docker は、開発者がアプリケーションのデプロイ、スケーリング、管理を自動化できる、オープンソースのコンテナ化技術プラットフォームです。従来の仮想マシンとは異なり、Docker コンテナはホストシステムのカーネルを共有するため、軽量で効率的です。

graph TD
    A[アプリケーションコード] --> B[Docker コンテナ]
    B --> C[一貫したデプロイ]
    B --> D[隔離された環境]

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

## 安定版リポジトリを設定
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 コンテナ化のユースケース

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

  • マイクロサービスアーキテクチャ
  • CI/CD (継続的インテグレーション/継続的デリバリー)
  • クラウドネイティブアプリケーション開発
  • 開発環境と本番環境の一貫性

Docker イメージの構築

Docker イメージについて

Docker イメージは、アプリケーションの実行に必要なすべて(コード、ランタイム、ライブラリ、環境変数、設定ファイルなど)を含んだ読み取り専用のテンプレートです。コンテナを作成するための設計図となります。

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

Dockerfile の基礎

Dockerfile は、Docker イメージを構築するための指示を含むテキストドキュメントです。各指示はイメージに新しいレイヤーを作成します。

Dockerfile の指示の種類

指示 目的
FROM ベースイメージを設定 FROM ubuntu:22.04
RUN コマンドを実行 RUN apt-get update
COPY ファイルをコピー COPY app.py /app/
WORKDIR 作業ディレクトリを設定 WORKDIR /app
CMD デフォルトコマンド CMD ["python", "app.py"]

サンプル Python アプリケーションイメージの作成

サンプルプロジェクト構造

/project
├── Dockerfile
└── app.py

app.py

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello, Docker World!"

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

Dockerfile

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

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

## プロジェクトファイルをコピー
COPY app.py requirements.txt ./

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

## ポートを公開
EXPOSE 5000

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

Docker イメージの構築と管理

## requirements.txt を作成
echo "flask" > requirements.txt

## Docker イメージを構築
docker build -t my-flask-app .

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

## イメージからコンテナを実行
docker run -p 5000:5000 my-flask-app

イメージ最適化戦略

  • マルチステージビルドを使用する
  • レイヤー数を最小限にする
  • ビルドキャッシュを活用する
  • 特定のイメージタグを使用する
  • 不要なファイルを削除する

コンテナの管理

コンテナライフサイクルの概要

Docker コンテナは、作成から終了まで、複数の状態を持つ複雑なライフサイクルを持っています。これらの状態を理解することは、効果的なコンテナ管理とオーケストレーションに不可欠です。

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

必須の Docker コンテナコマンド

コマンド 機能
docker create コンテナを作成 docker create nginx
docker start コンテナを起動 docker start container_id
docker stop 実行中のコンテナを停止 docker stop container_id
docker restart コンテナを再起動 docker restart container_id
docker rm コンテナを削除 docker rm container_id

コンテナの検査と監視

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

## すべてのコンテナ一覧を表示
docker ps -a

## コンテナの詳細を検査
docker inspect container_id

## コンテナのログを表示
docker logs container_id

## コンテナのリソース使用状況を監視
docker stats

コンテナのリソース管理

## CPU とメモリ制限付きでコンテナを実行
docker run -d \
  --cpus="1.5" \
  --memory="512m" \
  --name limited-container \
  nginx

高度なコンテナネットワーク

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

## 特定のネットワークでコンテナを実行
docker run -d \
  --network=mynetwork \
  --name web-container \
  nginx

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

## 複数のコンテナインスタンスをスケール
docker-compose up -d --scale web=3

永続的なデータ管理

## ボリュームを作成
docker volume create myvolume

## コンテナにボリュームをマウント
docker run -v myvolume:/app/data \
  --name data-container \
  ubuntu

最良のプラクティス

  • 軽量なベースイメージを使用する
  • ヘルスチェックを実装する
  • コンテナサイズを最小限にする
  • マルチステージビルドを使用する
  • 適切なロギングを実装する
  • コンテナの設定を安全にする

まとめ

Docker は、ソフトウェアのデプロイメントに革命的なアプローチを提供し、開発者にとって一貫性があり、隔離され、スケーラブルなアプリケーション・コンテナを作成するための強力なプラットフォームとなります。Docker の基本的な技術を習得することで、専門家は開発ワークフローを効率化し、システム効率を高め、多様なコンピューティングインフラストラクチャ全体で複雑なアプリケーション管理を簡素化できます。