docker startコマンドの使い方(実例で解説)

docker startコマンド解説

 本記事はDocker ver24.0.7の環境で確認しています。

 このコマンドは、停止状態、もしくはdocker createコマンドで作成したコンテナを起動することが出来ます。

 また、オプションを指定することによって、コンテナの標準入力や標準出力、標準エラー出力に接続することも可能です。

 それでは以下で詳細に解説いたします。

docker startコマンドのフォーマットとオプション

フォーマット

docker start [オプション] [コンテナ] [コンテナ...]

主なオプション一覧

オプション概説
-aコンテナの標準出力及び標準エラー出力と
Dockerホストの標準出力及び標準エラー出
力を接続する
-iコンテナの標準入力とDockerホストの標準
入力を接続する

コマンド例

$ docker start testvm

docker startコマンドの主な使い方

 以下で実例をまじえたコマンドの使い方を解説していきたいと思います。

基本事項の解説

 停止状態(docker stopコマンドで停止した状態)やdocker createコマンドで生成したコンテナを起動することができます。

 すでにコンテナとして存在するもののみ起動することが可能です。

 似たようなコマンドに、docker runがあります。このコマンドは、コンテナの生成から起動まで行う際に使用します。

 間違えやすいのでご注意ください。

作成したコンテナや停止状態のコンテナを起動する

 以下のコマンドで、コンテナtestvmを作成します。

$ docker create -it --name testvm ubuntu bash

 このdocker createコマンドを実行しますと、bashをデーモンとして動かす空のコンテナが作成されます。

 作成したコンテナtestvmを起動します。

$ docker start testvm

 docker psコマンドでtestvmコンテナが起動していることを確認します。

$ docker ps
CONTAINER ID   IMAGE   COMMAND       CREATED         STATUS        PORTS  NAMES
7ad7ecdf5e45   ubuntu  "bash"        19 seconds ago  Up 3 seconds         testvm

 「STATUS」が「UP」と表示されてますので、起動状態であることが確認できます。

 ちなみに、停止状態のコンテナはdocker psコマンドに「-a」オプションを付けて実行することで確認できます。

$ docker ps -a
CONTAINER ID  IMAGE   COMMAND      CREATED          STATUS
       PORTS   NAMES
7ad7ecdf5e45  ubuntu  "bash"       21 seconds ago   Exited (0) 5 seconds ago
               testvm

 「STATUS」がExitedになっていますので、testvmは停止しています。

 この状態のコンテナは、docker startコマンドで起動することができます。

標準出力と標準エラー出力に接続してコンテナを起動する

 以下のコマンドで、「ping localhost」を実行するCentOSがベースイメージのコンテナtestvm2を作成します。

$ docker create --name testvm2 centos ping localhost

※ubuntuのDockerイメージにはpingが入っていませんでしたので、本節ではCentOSのDockerイメージを使用しております

 作成したコンテナを、以下のdocker startコマンドで起動します。

$ docker start testvm2

 念のため起動確認をしておきます。

$ docker ps | grep testvm2
472c2ea7a687    centos   "ping localhost"    2 minutes ago
  Up About a minute   testvm2

 名前がtestvmのコンテナが起動(Up状態)されていることが確認できました。

 コンテナ内ではpingコマンドが実行されており、コンテナ内の標準出力に、その結果が出力されている状態です。

 よって、Dockerホスト上には何も出力されません。

 ここで、docker stopコマンドで、このコンテナを停止させます。

$ docker stop testvm2

 次に、以下のコマンドで停止したコンテナを起動してみてください。

 -aオプションを付けてコンテナを起動しますと、コンテナ内の標準出力をDockerホストに出力することができます。

$ docker start -a testvm2

 以下のように、pingコマンドの出力内容が表示されたと思います。

PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.037 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.028 ms
64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.030 ms
64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.057 ms
64 bytes from localhost (127.0.0.1): icmp_seq=5 ttl=64 time=0.061 ms

 「Ctrl+c」を打つと出力は止まります。

 これによってpingコマンドが停止しますので、それと同時にコンテナtestvm2も停止します。

 再度、先ほどのdocker startコマンドを「-a」オプション付きで実行しますと、コンテナtestvm2が起動し、pingが実行されます。

 「-a」オプションを付けることによって、コンテナとDockerホストの標準出力及び標準エラー出力が接続されます。

 それによって、コンテナ内の標準出力に出力されているpingコマンドの結果が、Dockerホストの標準出力に出力され、結果としてpingコマンドの出力がDockerホスト上に表示されるようになるわけです。

標準入力に接続してコンテナを起動する

 以下のコマンドで、シェルプログラムの「bash」を実行するCentOSがベースイメージのコンテナtestvm3を作成します。

$ docker create -it --name testvm3 centos bash

 次に、docker startコマンドの「-a -i」の2つのオプションを付けてコンテナtestvm3を起動します。

$ docker start -i -a testvm3

 すると、以下のようなプロンプトに変わりました。

[root@8dd46bef316c /]#

 これは、「-a」と「-i」のオプションを付けて起動することによって、コンテナ内のbashプロセスの標準入出力とDockerホストの標準入出力が接続されて、結果として、コンテナ内で動いているbashプロセスのプロンプトがDockerホスト上に表示されたことになります。

 「exit」コマンドでシェルを終了させますと、コンテナも停止してしまいますが、再度「-a」と「-i」のオプションを付けてdocker startで起動すると、またプロンプトが表示されます。

コンテナ内でシェルを起動して開発などを行う場合は、上記の方法でも可能ですが、通常は起動中のコンテナに対してdocker execコマンドで別途シェルを起動して行います。

docker execコマンドは以下の記事で解説しております。

おわりに

 以上でdocker startコマンドの紹介を終わります。

 ご指摘、ご要望などが御座いましたらコメントいただけるとうれしいです。

 他のDockerコマンドの実例付紹介記事は、本サイト内の別記事「Dockerコマンドの一覧(オリジナルな実例付き)」をご参照ください。

 ご訪問ありがとうございました!

コメント