Dockerコンテナをずっと起動しておく
TL;DR
docker run
では-it
オプションをつける
docker-composeではyamlにtty: true
とstdin_open: true
を書く
処理が終わるとDockerコンテナは終了
通常、dockerコンテナは起動したらそのまま終了してしまいます。
DockerfileにCMD
を指定することで、コマンドを実行させることができますが、その指定されたコマンドが終了すると、やはりdockerコンテナは終了してしまいます。
しかし、dockerコンテナを起動したままにしておきたいときもあると思います。
例えば、コンテナ内に入ってコマンドを打ち込みたいとき、等があります。
そのようなときに、dockerコンテナを起動したままにしておく方法をまとめます。
Dockerコンテナを起動したままにするにはitオプション
Dockerコンテナを起動するとき、docker run
コマンドを使用します。
$ docker run -d python:3.7
このとき、-it
オプションをつけると、コンテナは終了せずに、維持されます。
(もともとついてる-d
オプションと合わせて-itd
)
$ docker run -itd python:3.7
この-it
オプションとは、-i
オプションと-t
オプションの二つのことです。
-i
オプション
-i
オプションのi
はinteractive
のi
です。
コンテナとホストマシンの標準入力をつなぐオプションで、
これを指定することでホストマシンでの入力がコンテナに伝えられます。
つまり、このオプションを指定することで、ホストマシンからコンテナ内へコマンド等を入力できるようになります。
-t
オプション
-t
オプションのt
はtty
のt
です。
コンテナとホストマシンの標準出力をつなぐオプションで、
これを指定することでコンテナの出力がホストマシンに伝えられます。
つまり、このオプションを指定することで、コンテナの出力をホストマシンで確認できるようになります。
これらのオプションを指定することで、dockerコンテナは起動したままになります。
Docker Compose の場合は設定ファイルに書く
Dockerコンテナを管理するために、Docker Compose を利用しているケースもあると思います。
そのような場合に、dockerコンテナを起動したままにしておくのも簡単にできます。
Docker Compose では、docker run
時に-it
オプションをつける代わりに、docker-compose.yml ファイルに、tty: true
と stdin_open: true
を書きます。
tty: true
はdocker run
時の-t
オプションにあたいするもので、
stdin_open: true
はdocker run
時の-i
オプションにあたいするものです。
つまり、Docker Composeを使う場合でも、指定方法が異なるだけで、やっていることは同じで、コンテナとホストマシンの標準入出力をつないでいます。
version: '3' services: py: image: python:3.7 tty: true stdin_open: true
まとめ
docker run
では-it
オプションをつける
docker-composeではyamlにtty: true
とstdin_open: true
を書く