🐳

コンテナを永続起動し、好きな時にシェルを起動できるようにする方法(OS系コンテナの即時停止の対策!)

に公開

特にOS系コンテナを起動する際に気を付けるポイント(即時停止の防止)

こちらの記事で、Debianコンテナを起動(run)しようとした際にitオプションのつけ忘れで
うまく起動ができなかった(起動後、瞬時に落ちていた)ことを触れました。

https://zenn.dev/engineer_k/articles/a3615dfe54e990

OS系のコンテナでは、シェルを指定してコンテナを起動することが多いです。
ただ、シェルがメインプロセスとなっているため、exitを実行するとコンテナまで停止してしまうのは実用的にどうかと思っています。

皆さんがコンテナを起動するときは以下を期待していませんでしょうか。

「コンテナは常に起動しておいて、起動状態のコンテナにいつでもログインできてシェルを実行できる」

上記の方法をdebianの例を用いて紹介します!

1. バックグラウンド実行で影響のないコマンドを実行させる

(例)tailコマンド(オプション -f)を実行し続ける

  • コンテナの起動
docker run --name mydebian -d debian tail -f /dev/null
  • 起動確認をする(docker ps)
docker ps
  • 実行結果(コンテナの起動を確認)
CONTAINER ID   IMAGE          COMMAND               STATUS         NAMES
3a9f1c2b7e8d   debian         "tail -f /dev/null"   Up X seconds   mydebian

2. 起動中のコンテナにのシェルを起動する

execコマンドでシェルを起動する

  • execコマンドの実行
docker exec -it mydebian /bin/bash
  • 実行結果
    これでコンテナのシェルを立ち上げられましたね。
root@<コンテナID>:/#

やり方はこれだけです!
execでシェルを起動するときはオプション-it(-i=標準入力を開く、-t=擬似端末を割り当てる)を付けましょう。

これでexitコマンドでシェルを抜けても、バックグラウンドでメインプロセスのtailが動いているのでコンテナは起動し続けますね。

特にOS系のコンテナを使いたいときに役にたつと思います。

他にいいやり方があったら教えて下さい!

体系的に学びたい方向けに・・・

Dockerを体系的に学びたい方はUdemyで講座を開設したのでぜひ!
3時間ほどの講義で一通りのDockerの基本が学べますよ。
https://www.udemy.com/course/dockerwindowspc/?referralCode=6EDF0B9CB44057ACC299

Discussion