Docker コンテナを効果的に作成および管理する方法

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

はじめに

この包括的な Docker コンテナチュートリアルは、開発者と IT 専門家を対象に、コンテナ化されたアプリケーションの理解、インストール、および管理に関する基礎的なガイドを提供します。コアコンテナ概念、インストール手順、および実践的なコマンドを探索することで、学習者は最新のソフトウェアデプロイメント技術に関する実践的なスキルを習得します。

Docker コンテナの基本

コンテナ技術の概要

Docker コンテナは、ソフトウェアのデプロイとアプリケーション管理に革命的なアプローチを提供します。コンテナ化により、開発者はアプリケーションとその実行環境全体をパッケージ化でき、さまざまなコンピューティングプラットフォーム間で一貫したパフォーマンスを確保できます。

Docker コンテナのコア概念

Docker コンテナは、アプリケーションの実行に必要なコード、ランタイム、システムツール、ライブラリ、設定などをすべて含む、軽量で独立した実行可能なパッケージです。従来の仮想マシンとは異なり、コンテナはホストシステムのカーネルを共有するため、より効率的で、起動が高速です。

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

コンテナの主な特徴

特性 説明
ポータビリティ さまざまな環境で一貫して動作する
軽量性 リソース消費量が最小限
スケーラビリティ 複製とスケールアップが容易
隔離性 アプリケーション環境を分離

Ubuntu 22.04 への Docker コンテナのインストール

## パッケージインデックスを更新
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=$(dpkg --print-architecture)] $(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 コンテナコマンド

## Ubuntu イメージをプル
docker pull ubuntu:latest

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

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

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

Docker コンテナのユースケース

Docker コンテナは、マイクロサービスアーキテクチャ、継続的インテグレーション/継続的デリバリー (CI/CD)、クラウドネイティブアプリケーション、開発環境の標準化に最適です。

コンテナの接続性

Docker ネットワークアーキテクチャ

Docker は、コンテナ同士や外部ネットワークとの通信を可能にする複数のネットワークモードを提供します。これらの接続方法を理解することは、効果的なコンテナ管理とアプリケーションデプロイにとって重要です。

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

Docker のネットワークタイプ

ネットワークタイプ 説明 使用例
ブリッジ デフォルトのネットワークモード 隔離されたコンテナ間の通信
ホスト 直接ホストネットワークへのアクセス 高パフォーマンスなシナリオ
オーバーレイ マルチホストネットワーク通信 分散システム
Macvlan 直接物理ネットワーク接続 ネットワーク固有の要件

カスタム Docker ネットワークの作成

## ブリッジネットワークを作成
docker network create --driver bridge my_custom_network

## 利用可能なネットワークの一覧を表示
docker network ls

## ネットワークの詳細を表示
docker network inspect my_custom_network

コンテナネットワーク接続方法

## 特定のネットワークを持つコンテナを実行
docker run -d --name web_server --network my_custom_network nginx

## 実行中のコンテナをネットワークに接続
docker network connect my_custom_network existing_container

## コンテナをネットワークから切断
docker network disconnect my_custom_network existing_container

ポートマッピングと公開

## コンテナポートをホストポートにマッピング
docker run -p 8080:80 nginx

## 複数のポートを公開
docker run -p 8080:80 -p 443:443 web_application

コンテナのシェルへのアクセス

## 対話型シェルへのアクセス
docker exec -it container_name /bin/bash

## 実行中のコンテナでコマンドを実行
docker exec container_name ls /app

コンテナ間の通信方法

コンテナは、以下の方法で通信できます。

  • 共有ネットワーク
  • 環境変数
  • ボリュームマウント
  • Docker Compose 設定

コンテナの管理

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

Docker コンテナは、体系的な管理と監視を必要とする明確なライフサイクル段階を持っています。これらの段階を理解することで、効率的なコンテナのデプロイとメンテナンスが可能になります。

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

コンテナライフサイクルのコマンド

コマンド 機能
docker pull イメージのダウンロード docker pull ubuntu
docker create コンテナの作成 docker create nginx
docker start コンテナの起動 docker start container_id
docker stop コンテナの停止 docker stop container_id
docker rm コンテナの削除 docker rm container_id

コンテナリソースの管理

## リソース使用状況を持つ実行中のコンテナの一覧表示
docker stats

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

## コンテナリソースの更新
docker update --cpus=2 --memory=1g container_name

コンテナ監視テクニック

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

## リアルタイムログ監視
docker logs -f container_name

## コンテナメタデータの確認
docker inspect container_name

コンテナのバックアップと復元

## コンテナイメージのスナップショットの作成
docker commit container_name backup_image

## コンテナを tar アーカイブにエクスポート
docker export container_name > container_backup.tar

## アーカイブからコンテナをインポート
docker import container_backup.tar restored_image

高度なコンテナ管理

## 使用されていないコンテナの削除
docker container prune

## 停止したすべてのコンテナの削除
docker rm $(docker ps -a -q)

## 孤立したイメージのクリーンアップ
docker image prune

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

Docker Swarm と Kubernetes は、複数のホストにわたるスケーリング、ロードバランシング、自動デプロイのための高度なコンテナ管理機能を提供します。

まとめ

Docker コンテナは、ソフトウェアのデプロイに強力なアプローチを提供し、比類のない移植性、効率性、スケーラビリティを実現します。コンテナ技術を習得することで、開発者は一貫性があり、隔離された環境を作成し、多様なコンピューティングプラットフォーム全体でアプリケーションの開発、テスト、および本番ワークフローを効率化できます。