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:latestdocker 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.txtsample.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 varsample.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を使いこなすうえで欠かせない基本コマンドなので、ぜひ実際に手を動かしながら慣れていきましょう。
お読みいただきありがとうございました。