Docker exec コマンドの使い方

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

はじめに

Docker exec は、開発者とシステム管理者が実行中のコンテナと直接対話するための強力なコマンドラインツールです。この包括的なチュートリアルでは、Docker 環境全体でコマンドを実行し、コンテナのシェルにアクセスし、システムレベルの操作を効率的に実行するための基本的なテクニックと高度な戦略を探ります。

Docker Exec の基礎

Docker exec コマンドの理解

Docker exec は、Linux 環境で実行中のコンテナと対話するための強力なコマンドです。管理者と開発者は、コンテナのシェル内で直接コマンドを実行し、リアルタイムでのアクセスと管理機能を提供できます。

Docker exec の核心概念

docker exec コマンドは、コンテナプロセスと直接対話することを可能にし、さまざまな運用シナリオをサポートします。

コマンドタイプ 目的 使用シナリオ
対話型シェル コンテナのターミナルにアクセス デバッグ、設定
単一コマンド実行 特定のタスクを実行 システムチェック、スクリプト実行
バックグラウンドプロセス管理 対話型ではないコマンドを実行 メンテナンス、監視

基本的な Docker exec の構文

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

実用的なコード例

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

docker exec -it my_container /bin/bash

単一コマンドの実行

docker exec my_container ls /app

特定のユーザーでコマンドを実行

docker exec -u root my_container whoami

コマンドのワークフローの視覚化

graph TD A[Docker コンテナ] -->|docker exec| B[コマンド実行] B -->|出力| C[ターミナル/システム]

docker exec コマンドは、シームレスな Linux コンテナの対話を提供し、効率的なコンテナシェルの管理とシステム管理タスクを可能にします。

実用的なコマンド実行

対話型コンテナ管理

Docker exec は、コンテナ内でコマンドを実行するための多様な方法を提供し、正確なコンテナ管理とシステムとの対話を可能にします。

一般的な実行シナリオ

シナリオ コマンドパターン 目的
対話型シェル docker exec -it コンテナへの直接アクセス
非対話型コマンド docker exec 単一タスクの実行
ルートレベルの操作 docker exec -u root システムレベルの変更

対話型シェルのアクセス

## 実行中のコンテナで bash シェルを開く
docker exec -it web_server /bin/bash

## 別のシェルへのアクセス
docker exec -it web_server /bin/sh

特定のコマンドの実行

## ディレクトリの内容を表示
docker exec web_container ls /var/www/html

## システム情報を確認
docker exec web_container cat /etc/os-release

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

高度なコマンド実行

## 特定のユーザーでコマンドを実行
docker exec -u www-data web_container php artisan migrate

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

実行ワークフロー

graph TD A[Docker コンテナ] -->|コマンド入力| B[docker exec] B -->|プロセス実行| C[コマンド出力] C -->|結果| D[ターミナル/システム]

docker exec コマンドは、コンテナとの対話を変革し、柔軟で強力な管理機能を Linux ベースのコンテナ化環境に提供します。

高度な exec テクニック

複雑なコンテナ相互作用戦略

高度な docker exec テクニックは、基本的なコマンド実行を超えた、洗練されたコンテナ管理とトラブルシューティングを可能にします。

実行オプションの比較

オプション 機能 使用例
-i 対話モード STDIN をオープンに維持
-t 擬似端末 (TTY) 割り当て ターミナルエミュレーション
-u ユーザーコンテキストを指定 ユーザーレベルの操作
-w 作業ディレクトリを設定 具体的なパスでの実行
--env 環境変数を設定 動的な設定

マルチコマンド実行

## 単一のセッションで複数の命令を実行
docker exec web_container bash -c "
    apt update && 
    apt install -y curl && 
    curl 
"

## 連鎖的なコマンド実行
docker exec database_container sh -c "
    pg_dump database_name > /backup/dump.sql && 
    gzip /backup/dump.sql
"

ルートレベルのコンテナ管理

## システム変更のためのルートアクセス
docker exec -u root web_container chmod 755 /var/www/html

## ネットワーク設定のトラブルシューティング
docker exec -u root network_container ip addr

高度な実行ワークフロー

graph TD A[Docker コンテナ] -->|複雑なコマンド| B[docker exec オプション] B -->|実行コンテキスト| C[複数段階プロセス] C -->|結果処理| D[システム出力]

環境とパスの制御

## 特定の環境と作業ディレクトリを設定
docker exec \
  -e DATABASE_URL=postgres://user:pass@host \
  -w /app/scripts \
  web_container \
  python3 migration_script.py

高度な docker exec テクニックは、コンテナ相互作用を細かく制御し、複雑なシステム管理とトラブルシューティングのシナリオを可能にします。

まとめ

Docker exec コマンドをマスターすることで、コンテナプロセスをシームレスに管理し、アプリケーションのデバッグや管理タスクを正確に行うことができます。このチュートリアルでは、必須の構文、対話型および非対話型実行方法、そして実践的な例を紹介することで、コンテナ管理スキルを向上させ、複雑なコンテナ相互作用をシンプルで直感的なものにします。