docker startコマンドの使い方(実例付)CE対応

Docker
Docker公式ロゴ3a
©2020 Docker Inc. All rights reserved

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

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

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

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

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

フォーマット

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

主なオプション一覧

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

コマンド例

$ docker start testvm

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

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

基本事項の解説

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

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

 別コマンドのdocker runは、コンテナの生成から起動まで行う際に使用します。

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

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

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

$ docker start testvm

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

$ docker ps
CONTAINER ID   IMAGE   COMMAND       CREATED         STATUS        PORTS  NAMES
7ad7ecdf5e45   ubuntu  "/bin/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  "/bin/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

 作成したコンテナを、以下の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 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のコマンドの一覧(CE対応版)(オリジナルな実例付き)」をご参照ください。

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

コメント

タイトルとURLをコピーしました