Dockerコンテナをずっと起動しておく

f:id:utouto97:20210725220655j:plain

TL;DR
docker runでは-itオプションをつける
docker-composeではyamltty: truestdin_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オプションのiinteractiveiです。
コンテナとホストマシンの標準入力をつなぐオプションで、 これを指定することでホストマシンでの入力がコンテナに伝えられます。
つまり、このオプションを指定することで、ホストマシンからコンテナ内へコマンド等を入力できるようになります。

-tオプション
-tオプションのtttytです。
コンテナとホストマシンの標準出力をつなぐオプションで、 これを指定することでコンテナの出力がホストマシンに伝えられます。
つまり、このオプションを指定することで、コンテナの出力をホストマシンで確認できるようになります。

これらのオプションを指定することで、dockerコンテナは起動したままになります。

Docker Compose の場合は設定ファイルに書く

Dockerコンテナを管理するために、Docker Compose を利用しているケースもあると思います。
そのような場合に、dockerコンテナを起動したままにしておくのも簡単にできます。

Docker Compose では、docker run時に-itオプションをつける代わりに、docker-compose.yml ファイルに、tty: truestdin_open: true を書きます。
tty: truedocker run時の-tオプションにあたいするもので、 stdin_open: truedocker run時の-iオプションにあたいするものです。
つまり、Docker Composeを使う場合でも、指定方法が異なるだけで、やっていることは同じで、コンテナとホストマシンの標準入出力をつないでいます。

version: '3'
services:
  py:
    image: python:3.7
    tty: true
    stdin_open: true

まとめ

docker runでは-itオプションをつける
docker-composeではyamltty: truestdin_open: trueを書く