Docker コンテナ内でコマンドを実行する方法

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

はじめに

この包括的なチュートリアルでは、"docker exec into container" コマンドの基本を解説し、コンテナ化されたアプリケーションを効果的に管理および維持するための知識とスキルを身につけるお手伝いをします。Docker コンテナの基本的な理解から、docker exec コマンドをさまざまなユースケースに活用する方法まで、コンテナとの対話に関する必要な知識を網羅しています。

Docker Exec の基礎

Docker Exec コマンドの概要

Docker exec は、実行中のコンテナと直接対話するための強力なコマンドラインツールです。管理者や開発者は、アクティブな Docker コンテナ内でコマンドを実行し、シームレスな管理とトラブルシューティングを実現できます。

主要な機能

docker exec コマンドを使用すると、以下のことができます。

  • 実行中のコンテナ内で特定のコマンドを実行する
  • コンテナのシェル環境にアクセスする
  • 管理タスクやデバッグを実行する
graph LR
    A[Docker ホスト] --> B[実行中のコンテナ]
    B --> |docker exec| C[コマンド実行]

基本的な構文と使用方法

docker exec の標準的な構文は次のとおりです。

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

コマンドオプション

オプション 説明
-i インタラクティブモード STDIN を開いたままにする
-t 擬似端末割り当て ターミナルインタラクションを有効にする
-u ユーザー指定 特定のユーザーとしてコマンドを実行する

実用的なコード例

単純なコマンドの実行

## コンテナ内で ls コマンドを実行する
docker exec my_container ls /app

## インタラクティブな bash シェル
docker exec -it my_container /bin/bash

異なるユーザーとしてコマンドを実行する

## root ユーザーとしてコマンドを実行する
docker exec -u root my_container whoami

## 特定のユーザーとしてコマンドを実行する
docker exec -u developer my_container python --version

docker exec コマンドは、柔軟なコンテナインタラクションを提供し、さまざまな Linux コンテナ管理シナリオを最小限の複雑さでサポートします。

コマンド実行テクニック

インタラクティブ実行と非インタラクティブ実行

Docker exec は、インタラクティブ実行と非インタラクティブ実行の 2 つの主要な実行モードをサポートしており、それぞれ異なるコンテナ管理の目的を果たします。

graph LR
    A[Docker Exec モード] --> B[非インタラクティブ]
    A --> C[インタラクティブ]
    B --> D[単一コマンド実行]
    C --> E[シェルアクセス]

非インタラクティブコマンド実行

非インタラクティブモードでは、アクティブなターミナルセッションを維持せずに特定のコマンドを実行できます。

## 単一コマンドの実行
docker exec my_container ls /var/www

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

インタラクティブシェルアクセス

インタラクティブモードでは、コンテナ内でフルターミナルインタラクションを実現できます。

## インタラクティブな bash シェルを開く
docker exec -it my_container /bin/bash

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

高度な実行テクニック

テクニック コマンド 目的
ユーザー固有の実行 docker exec -u username 特定のユーザーとしてコマンドを実行する
バックグラウンドプロセス docker exec -d container cmd 非ブロッキングコマンドを実行する
環境変数 docker exec -e VAR=value カスタム環境を設定する

特権コマンド実行

## ルートレベルアクセス
docker exec -u root my_container command

## sudo風の実行
docker exec -u root my_container sudo -u appuser command

これらのコマンド実行テクニックをマスターすることで、多様なシナリオにおいて効率的で柔軟なコンテナ管理が可能になります。

実用的な Docker Exec のシナリオ

システム監視と診断

Docker exec は、コンテナ内の包括的なシステム監視とトラブルシューティングを可能にします。

## システムリソースの確認
docker exec my_container top

## ネットワーク接続の分析
docker exec my_container netstat -tuln

## システムログの表示
docker exec my_container journalctl -xe

データベース管理

graph LR
    A[Docker Exec] --> B[データベース操作]
    B --> C[接続]
    B --> D[クエリ実行]
    B --> E[ユーザー管理]

データベースインタラクションの例

## MySQL データベース操作
docker exec mysql_container mysql -u root -p
docker exec mysql_container mysqldump database_name

## PostgreSQL の管理
docker exec postgres_container psql -U username

アプリケーションデバッグ

シナリオ コマンド 目的
Python デバッグ docker exec app_container python -m pdb script.py インタラクティブなデバッグ
Node.js インスペクション docker exec -it node_container npm test テストスイートの実行
依存関係の確認 docker exec container_name pip list インストール済みのパッケージの確認

セキュリティと権限管理

## 新しいユーザーの作成
docker exec -u root container_name useradd -m newuser

## ファイルパーミッションの変更
docker exec container_name chmod 755 /path/to/file

## 現在のユーザーコンテキストの確認
docker exec container_name whoami

リモート設定の更新

## 設定ファイルの更新
docker exec web_container sed -i 's/old_value/new_value/g' /etc/config.yml

## サービスの再起動
docker exec container_name systemctl restart service_name

実用的な Docker exec のシナリオは、コンテナ管理におけるその汎用性を示し、システム管理とトラブルシューティングのための強力なツールを提供します。

まとめ

"docker exec コンテナへの入" チュートリアルは、強力な docker exec コマンドを深く掘り下げ、Docker コンテナ内へのアクセス、コマンドの実行、管理タスクの実行を可能にします。このツールをマスターすることで、問題のトラブルシューティング、繰り返しタスクの自動化、コンテナ化されたアプリケーション全体の健全性の維持が可能になり、信頼性と効率的な動作を確保できます。