Linux 上で Docker コンテナをデプロイする方法

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

はじめに

この包括的な Docker チュートリアルは、開発者とシステム管理者向けに、コンテナ技術の理解、Ubuntu 22.04 上のコア Docker 概念、インストール手順、および基本的なコンテナ管理手法に関する実践的なガイドを提供します。Docker の強力なエコシステムを探求することで、学習者は軽量で移植可能なアプリケーション環境の作成、実行、および管理に関する洞察を得ることができます。

Docker の基礎

コンテナ技術の概要

Docker は、コンテナ化のための強力なプラットフォームであり、開発者が異なるコンピューティング環境でアプリケーションを効率的にパッケージ化、配布、実行できるようにします。Linux コンテナは、ホストシステムのカーネルを共有しながら、隔離された実行環境を維持することで、軽量な仮想化を実現します。

Docker コンテナの核心概念

graph TD
    A[Docker イメージ] --> B[Docker コンテナ]
    B --> C[隔離された実行環境]
    A --> D[Dockerfile]
    D --> E[ビルド指示]
Docker コンポーネント 説明
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

## 安定版リポジトリを設定
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 のバージョンを確認

## Ubuntu イメージをプル

## 利用可能なイメージの一覧表示

## コンテナを実行

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

## コンテナを停止

コンテナ化の利点

Docker コンテナは、現代のソフトウェア開発において大きな利点を提供します。

  • 開発環境と本番環境で一貫した環境
  • 軽量で高速なデプロイ
  • リソースの利用効率向上
  • 簡単なスケーラビリティと移植性
  • 依存関係の管理の簡素化

Docker exec の基本

Docker exec コマンドの理解

docker exec コマンドは、実行中のコンテナと直接対話するための、コンテナ管理とトラブルシューティングに強力なメカニズムを提供します。停止や再起動することなく、アクティブなコンテナ環境内でコマンドを実行できます。

graph LR
    A[Docker ホスト] --> |docker exec| B[実行中のコンテナ]
    B --> |コマンド実行| C[コンテナシェル]

よくある Docker exec のシナリオ

シナリオ コマンド例 目的
対話型 Bash セッション docker exec -it container_name /bin/bash コンテナシェルにアクセス
単一コマンドの実行 docker exec container_name ls /app 特定のコマンドを実行
ルートユーザーとして実行 docker exec -u 0 container_name command ルート権限で実行

実践的な実行例

## サンプルコンテナを起動
docker run -d --name web_app nginx:latest

## 対話型 Bash セッションを実行
docker exec -it web_app /bin/bash

## コンテナに入らずにコマンドを実行
docker exec web_app cat /etc/nginx/nginx.conf

## 複数のコマンドを実行
docker exec web_app sh -c "apt update && apt install -y curl"

高度な実行テクニック

## ファイルを稼働中のコンテナにコピー
docker cp local_file.txt web_app:/container/path

## バックグラウンドプロセスを実行
docker exec -d web_app python3 background_script.py

## 特定の環境変数を持つコマンドを実行
docker exec -e DEBUG=true web_app python3 script.py

コンテナとの対話パターン

Docker exec は、柔軟な方法で以下のことができます。

  • 実行中のコンテナのデバッグ
  • 保守タスクの実行
  • コンテナ構成の調査
  • 診断コマンドの実行
  • コンテナ環境の動的な管理

高度なコンテナ技術

コンテナのパフォーマンス最適化

パフォーマンス管理は、効率的なコンテナ化アプリケーションにとって不可欠です。Docker は、コンテナの実行環境を監視、最適化、トラブルシューティングするための複数の技術を提供します。

graph TD
    A[コンテナのパフォーマンス] --> B[リソース監視]
    A --> C[実行時設定]
    A --> D[ネットワーク最適化]

リソース管理戦略

テクニック 説明 設定例
CPU 制限 コンテナの CPU 使用量を制限 --cpus="1.5"
メモリ制約 メモリ割り当てを制御 --memory=512m
ストレージ管理 コンテナのディスク容量を定義 --storage-opt size=10G

高度な Docker 実行時設定

## CPU とメモリ制約でコンテナを実行
docker run -d \
  --cpus="2" \
  --memory="2g" \
  --name performance_app \
  nginx:latest

## コンテナの再起動試行回数を制限
docker run -d \
  --restart=on-failure:3 \
  webapp:latest

デバッグとトラブルシューティング技術

## コンテナの詳細情報を取得

## コンテナのログを表示

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

## コンテナの健康状態をチェック
--health-interval=5s \
  webapp:latest

ネットワーク設定の最適化

## カスタムブリッジネットワークを作成
docker network create --driver bridge custom_network

## コンテナを特定のネットワークに接続
docker run -d \
  --network=custom_network \
  --network-alias=web_service \
  nginx:latest

コンテナの実行時セキュリティ

以下の対策を通じてセキュリティを強化します。

  • リソースの隔離
  • コンテナの権限制限
  • ネットワークセグメンテーション
  • 実行時脆弱性スキャン
  • イメージの最小化

まとめ

Docker は、ソフトウェアのデプロイ方法を根本的に変革する技術であり、開発者にとって一貫性があり、隔離された実行環境を構築するための強力なプラットフォームを提供します。コンテナの基本、インストール手順、そして必須のコマンドを習得することで、開発者はアプリケーション開発を効率化し、リソース効率を向上させ、環境間での互換性をスムーズにすることができます。このチュートリアルは、学習者にとって、Docker のコンテナ化機能を効果的に活用するために必要な基礎知識を提供します。