Docker コンテナ内プロセスとの対話方法

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

はじめに

Docker コンテナは、アプリケーションの開発とデプロイ方法を革新しましたが、これらのコンテナ内部で実行されているプロセスとやり取りすることは、独自のチャレンジとなります。このチュートリアルでは、Docker コンテナ内のプロセスとやり取りするための必須テクニックを、実用的な例と現実世界のユースケースを網羅して解説します。

Docker コンテナの概要

Docker は、開発者がアプリケーションを一貫性があり再現可能な方法でパッケージ化およびデプロイできるようにする、人気のコンテナ化プラットフォームです。コンテナは、アプリケーションの実行に必要なコード、ランタイム、システムツール、ライブラリなど、すべてを含んだ軽量で独立した実行可能なソフトウェアパッケージです。

Docker コンテナとは何か?

Docker コンテナは、コードとそのすべての依存関係をパッケージ化し、アプリケーションを迅速かつ確実に、あるコンピューティング環境から別のコンピューティング環境に実行できるようにする、標準化されたソフトウェアユニットです。コンテナは、コンテナを作成するための設計図である Docker イメージから作成されます。

graph TD
    A[Docker イメージ] --> B[Docker コンテナ]
    B[Docker コンテナ] --> C[実行中のアプリケーション]

Docker コンテナの利点

  • 一貫性: コンテナは、基盤となるインフラストラクチャに関係なく、アプリケーションが同じ方法で実行されることを保証します。
  • 移植性: コンテナは、開発者のラップトップから本番サーバーまで、さまざまな環境間で簡単に移動およびデプロイできます。
  • スケーラビリティ: コンテナは、変化する需要に対応するために、簡単にスケールアップまたはスケールダウンできます。
  • 効率性: コンテナは、ホストオペレーティングシステムを共有するため、従来の仮想マシンよりも軽量で効率的です。

Docker アーキテクチャ

Docker は、Docker クライアントが Docker デーモンと通信するクライアント - サーバーアーキテクチャを使用します。Docker デーモンは、Docker コンテナの構築、実行、および配布を担当します。

graph LR
    A[Docker クライアント] -- API --> B[Docker デーモン]
    B[Docker デーモン] -- イメージのプル --> C[Docker レジストリ]
    B[Docker デーモン] -- コンテナの実行 --> D[Docker ホスト]

Docker の開始方法

Docker を開始するには、システムに Docker エンジンをインストールする必要があります。Docker は、公式 Docker ウェブサイトからダウンロードしてインストールできます。インストール後、docker コマンドラインツールを使用して Docker コンテナと対話できます。

## Ubuntu 22.04 で Docker をインストール
sudo apt-get update
sudo apt-get install -y docker.io

Docker コンテナ内のプロセスとの対話

Docker コンテナが実行されると、コンテナ内部のプロセスと対話する必要がある場合があります。Docker は、コンテナで実行されているプロセスを管理および操作するためのいくつかのコマンドとオプションを提供しています。

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

実行中のコンテナのシェルにアクセスするには、docker exec コマンドを使用します。これにより、コンテナ内部で直接コマンドを実行できます。

## 実行中のコンテナのシェルにアクセス
docker exec -it < container_id > /bin/bash

コンテナプロセスの監視

コンテナ内部で実行中のプロセスをリストするには、docker top コマンドを使用します。

## コンテナ内の実行中のプロセスをリスト

また、docker stats コマンドを使用して、1 つまたは複数のコンテナのリアルタイムパフォーマンスメトリクスを取得することもできます。

## コンテナのリアルタイムパフォーマンスメトリクスを取得

プロセスへのシグナルの送信

実行中のコンテナにシグナルを送信して、コンテナを停止または終了するには、docker kill コマンドを使用できます。

## 実行中のコンテナに SIGTERM シグナルを送信

また、docker exec コマンドを使用して、コンテナ内部で実行されているプロセスに直接シグナルを送信することもできます。

## コンテナ内のプロセスに SIGINT シグナルを送信

ロギングとデバッグ

Docker は、コンテナのログにアクセスし、問題をデバッグするためのいくつかのコマンドを提供しています。

## 実行中のコンテナのログを表示

## 実行中のコンテナの stdout と stderr にアタッチ

これらの基本的なコマンドとテクニックを理解することで、Docker コンテナ内部で実行されているプロセスと効果的に対話および管理できます。

実用的な例とユースケース

Docker コンテナの基本的な理解と、その内部で実行されているプロセスとの対話方法を習得したので、いくつかの実用的な例とユースケースを見ていきましょう。

Docker コンテナで Web サーバーを実行する

Docker の一般的なユースケースの 1 つは、Web アプリケーションを実行することです。Docker コンテナでシンプルな Nginx Web サーバーを実行してみましょう。

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

## Nginx コンテナを実行
docker run -d -p 80:80 --name my-nginx nginx:latest

## Web ブラウザで Web サーバーにアクセス
http://localhost

この例では、Docker Hub から Nginx イメージをプルし、そのイメージに基づいたコンテナを実行し、ホストのポート 80 をコンテナのポート 80 にマッピングしました。これで、Web ブラウザで http://localhost にアクセスすることで、コンテナ内で実行されている Nginx Web サーバーにアクセスできます。

コンテナ化アプリケーションのスケーリング

Docker は、コンテナの複数のインスタンスを実行することで、アプリケーションを簡単にスケーリングできます。Docker Compose を使用すると、複数のコンテナを単一のアプリケーションとして定義および管理できます。

## docker-compose.yml
version: "3"
services:
  web:
    image: nginx:latest
    ports:
      - 80:80
    deploy:
      replicas: 3

この例では、Nginx Web サーバーを実行する web サービスを定義しています。web サービスの 3 つのレプリカを実行することを指定すると、Docker Compose はコンテナのスケーリングを自動的に管理します。

コンテナ化アプリケーションのデバッグ

コンテナ化アプリケーションに問題が発生した場合、前に学習した Docker コマンドを使用して、問題をデバッグおよびトラブルシューティングできます。

## 実行中のコンテナをリスト

## 実行中のコンテナのシェルにアクセス

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

これらのコマンドを使用することで、実行中のプロセスを検査し、コンテナのファイルシステムにアクセスし、ログを表示して、コンテナ化アプリケーションの問題を特定および解決できます。

これらの例は、Docker を使用してアプリケーションを実行、スケーリング、およびデバッグする方法のほんの一部です。Docker コンテナの柔軟性と移植性により、現代のソフトウェア開発とデプロイのための強力なツールとなります。

まとめ

この包括的なガイドでは、Docker コンテナ内部で実行されているプロセスと効果的に対話する方法を学習します。コンテナプロセスの監視と制御から、実用的なユースケースまで、このチュートリアルは、Docker ベースのアプリケーションを容易に管理するための知識とスキルを備えます。最終的には、Docker プロセスとの対話術を習得し、Docker ベースのワークフローを最適化および効率化できるようになります。