このドキュメントで説明されているソフトウェアはサポートされていないか、拡張サポートが提供されています。
現在サポートされているリリースにアップグレードすることをお薦めします。

4.2 Dockerコンテナの作成および実行

コンテナ内でアプリケーションを実行するには、次のようにdocker runコマンドを使用します。

[root@host ~]# docker run -i -t --name guest oraclelinux:6.8 /bin/bash
[root@guest ~]# cat /etc/oracle-release
Oracle Linux Server release 6.8
[root@guest ~]# 

この例では、oraclelinux:6.8という名前のOracle Linux 6イメージを使用して対話型のbashシェルを実行し、コンテナを提供します。 -tオプションと-iオプションを指定すると、擬似端末を使用してコンテナを対話的に実行できます。[root@host ~][root@guest ~]#はそれぞれ、ホストおよびコンテナによって表示されるプロンプトを表します。 コンテナによって表示される実際のプロンプトは異なる場合があります。

--nameオプションでは、コンテナ・インスタンスの名前guestを指定します。 コンテナは終了時にDockerによって削除されないので、後で再起動できます。

システムにイメージがまだ存在しない場合、Dockerエンジンはdocker pull操作を実行して、次の例に示すようにDocker Hub(または指定した別のリポジトリ)からイメージをダウンロードします:

[root@host ~]# docker run -i -t --rm oraclelinux:7.0
Unable to find image 'oraclelinux:7.0' locally
Pulling repository oraclelinux
073ded22ac0f: Download complete 
511136ea3c5a: Download complete 
ad98bd7101f2: Download complete 
cbb192d7f4cf: Download complete 
Status: Downloaded newer image for oraclelinux:7.0
[root@guest /]# cat /etc/oracle-release 
Oracle Linux Server release 7.0
[root@guest /]# exit
exit
[root@host ~]# 

コンテナの名前を指定するかわりに、--rmオプションを指定したので、コンテナは終了時にDockerによって削除され、再起動できません。

次のように、別のシェル・ウィンドウからdocker psコマンドを使用して、現在実行中のコンテナに関する情報を表示できます。

[root@host ~]# docker ps
CONTAINER ID  IMAGE              COMMAND    CREATED         STATUS        PORTS  NAMES
768a3d7b605a  oraclelinux:6.8    /bin/bash  14 minutes ago  Up 14 minutes        guest

IDが77bacba845e2guestという名前のコンテナは、現在コマンド/bin/bashを実行しています。 コンテナの管理には、IDよりも名前を使用する方が便利です。

コンテナで実行中のプロセスを表示するには、docker topコマンドを使用します。

[root@host ~]# docker top guest
UID    PID    PPID   C   STIME   TTY     TIME       CMD
root   7474   1958   1   15:40   pts/2   00:00:00   /bin/bash

1.3.0以上のDockerでは、次のようにdocker execコマンドを使用して、すでに実行中のコンテナ内で追加のプロセスを実行できます。

[root@host ~]# docker exec -i -t guest bash
[root@guest ~]#

1.3.0以上のDockerでは、次のようにdocker createコマンドを使用して、コンテナを後で開始できるように設定できます。

[root@host ~]# docker create -i -t --name newguest oraclelinux:6 /bin/bash
af621dc9888019a4e8b58c5ef95e265d18c05c983761d5b8c7c046fcbf1176e0
[root@host ~]# docker start -a -i newguest
[root@newguest ~]#

docker start-aオプションと-iオプションを指定すると、現在のシェルの標準入力、出力およびエラー・ストリームはコンテナの標準入力、出力およびエラー・ストリームにアタッチされ、また、すべてのシグナルがコンテナに転送されるようになります。

コンテナを終了するには、コンテナ内でbashコマンド・プロンプトにCtrl-Dまたはexitと入力するか、docker stopコマンドを使用します。

[root@host ~]# docker stop guest
guest

docker ps-aオプションを指定すると、現在実行中または終了済のすべてのコンテナが表示されます。

[root@host ~]# docker ps -a
CONTAINER ID  IMAGE              COMMAND    CREATED  STATUS             PORTS  NAMES
768a3d7b605a  oraclelinux:6.8    ...        ...      Exited (0) 9 seconds ago  guest
8a1b9b19bb70  oraclelinux:6.6    ...        ...      Up 38 seconds   ...       newguest

docker startを使用して、停止されているコンテナを再起動できます。 再アタッチ後のコンテナのコンテンツは、前回使用時のまま変更されていません。

[root@host ~]# docker start -a -i guest
[root@guest ~]# touch /tmp/foobar
[root@guest ~]# exit
[root@host ~]# docker start -a -i guest
[root@guest ~]# ls -l /tmp/foobar
-rw-r--r--. 1 root root 0 Aug 29 05:23 /tmp/foobar

コンテナでは加えられた変更はすべて保持されるので、変更の消失を懸念することなく、コンテナ内でファイルの再構成やパッケージのインストールを行えます。

同じ名前の新しいコンテナを作成できるように、コンテナを完全に削除する必要がある場合は、docker rmコマンドを使用します。

[root@host ~]# docker rm guest
guest
注意

--rmオプションを指定してコンテナを実行すると、Dockerは該当するコンテナが存在する場合にそのコンテナを削除します。 --rmオプションと-dオプションは併用できません。

1.2.0以上のDockerでは、docker rm-fオプションを指定すると、実行中のコンテナは削除前に強制終了されます。 以前のバージョンで同じコマンドを実行すると、コンテナは削除前に停止されます。 コンテナを安全に停止するには、docker stopを使用してください。

次のように、docker logsコマンドを使用して、コンテナ内で発生しているイベントをウォッチできます。

[root@host ~]# docker logs -f guest
...
bash-4.x# touch /tmp/foobar
bash-4.x# exit
exit
bash-4.x# 
bash-4.x# ls -l /tmp/foobar
-rw-r--r--. 1 root root 0 Aug 29 05:23 /tmp/foobar

-fオプションを指定すると、コンテナ内でイベントが発生した際にコマンドによって出力が更新されます。 Ctrl-Cと入力してコマンドを終了します。

docker inspectコマンドを使用すると、コンテナに関する詳細情報をJSON形式で取得できます。 このコマンドでは、次のように構成の特定の要素を取得することもできます。

[root@host ~]# docker inspect --format='{{ .State.Running }}' guest
true