docker container execとは?UP状態のコンテナにコマンドを実行する方法を解説!

Dockerを使っていると、「すでに起動しているコンテナの中で、後からコマンドを実行したい」という場面によく遭遇します。そんなときに活躍するのがdocker container execコマンドです。

この記事では、docker container execについて、以下の内容をわかりやすく解説します。

  • docker container execとは?
  • docker container execの構文
  • docker container execの動作を確認する

docker container execとは?

docker container execすでに起動している(UP状態の)コンテナに対して、新しくコマンドを実行するためのコマンドです。

docker container execには、次のような特徴があります。

  • 対象は「起動中(UP)」のコンテナのみ
  • コンテナを停止・再起動しない
  • コマンドを一時的に実行できる
  • bashなどのシェルを起動して中に入ることもできる

docker container execの構文

docker container execの構文を以下に示します。

docker container execの構文

docker container exec [オプション] <コンテナ名またはコンテナID> <実行したいコマンド>
  • docker container exec
    • 起動中のコンテナでコマンドを実行する
  • コンテナ名またはコンテナID
    • 操作対象となるコンテナ名またはコンテナID
  • 実行したいコマンド
    • コンテナ内で実行するコマンド

docker exec [オプション] <コンテナ名またはコンテナID> <実行したいコマンド>でも動作しますが、こちらは旧コマンドです。

例えば、my-ubuntuという起動中のコンテナに対してlsコマンドを実行する場合は、次のように書きます。

docker container exec my-ubuntu ls

これは、「起動中のmy-ubuntuコンテナに対して、外部(ホスト側)からlsコマンドを実行する」という意味になります。

bashを起動して、コンテナの中に入る場合は、次のように書きます。

docker container exec -it my-ubuntu bash

このコマンドを実行すると、起動中のmy-ubuntuコンテナに後から入ることができます。

docker container execの動作を確認する

次の流れでdocker container execの動きを確認します。

確認の流れ

  • Ubuntuコンテナを起動
  • コンテナ内でsample.txtを作成
  • 別ターミナルからdocker container execを実行

Ubuntuコンテナを起動

まずは、事前準備としてUbuntuコンテナを起動します。

docker container run -it --name my-ubuntu ubuntu:latest
  • docker container run
    • 新しいコンテナを作成して起動
  • -i
    • 標準入力を有効化(コンテナに入力できるようにする)
  • -t
    • 疑似TTYを割り当て(ターミナル操作用)
  • --name my-ubuntu
    • コンテナ名をmy-ubuntuに指定
  • ubuntu:latest
    • Ubuntuの公式イメージ

実行すると、次のような表示になります。

root@xxxxxxxxxxxx:/#

これはUbuntuコンテナの中に入った状態です。このとき、bashが動いており、コンテナはUP状態になっています(bashプロセスが終了しないため、コンテナも起動し続けます)。

別ターミナルでdocker container lsコマンドを実行すると、以下のようにコンテナがUp状態になっていることが確認できます。

$ docker container ls
CONTAINER ID   IMAGE           COMMAND       CREATED          STATUS          PORTS     NAMES
xxxxxxxxxxxx   ubuntu:latest   "/bin/bash"   23 seconds ago   Up 22 seconds             my-ubuntu

コンテナ内でsample.txtを作成

起動したUbuntuコンテナ内で、echoを使ってsample.txtを作成します。

echo "Hello Docker Exec" > sample.txt

sample.txtが作成できているかlsコマンドで確認してみましょう。

root@xxxxxxxxxxxx:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sample.txt  sbin  srv  sys  tmp  usr  var

sample.txtが作成されていることが確認できます。

別ターミナルからdocker container execを実行

新しく別のターミナルを開き、次のコマンドを実行します。

docker container exec my-ubuntu ls

実行結果は以下のようになります。

$ docker container exec my-ubuntu ls
bin
boot
dev
etc
home
lib
lib64
media
mnt
opt
proc
root
run
sample.txt
sbin
srv
sys
tmp
usr
var

先ほど作成したsample.txtがありますね。これは、「起動中のmy-ubuntuコンテナに対して外部(ホスト側・別ターミナル)からlsコマンドを実行している」という状態です。つまり、コンテナの中に入らずに、外からコンテナの中のコマンドを実行することができました。

本記事のまとめ

この記事ではdocker container execコマンドについて説明しました。

docker container execは、起動中(UP状態)のコンテナに対して、後からコマンドを実行できる便利なコマンドです。

Dockerを使いこなすうえで欠かせない基本コマンドなので、ぜひ実際に手を動かしながら慣れていきましょう。

お読みいただきありがとうございました。

スポンサーリンク