ホームページ  >  記事  >  運用・保守  >  Docker がコンテナーの自動終了を防ぐ方法

Docker がコンテナーの自動終了を防ぐ方法

WBOY
WBOYオリジナル
2022-03-08 10:40:215644ブラウズ

docker では、コンテナが自動的に終了しないように、コンテナに常駐の前処理を追加できます。docker コンテナの対話型パラメータと tty パラメータを使用して、「sh/bash」コマンドを有効にすることができますこうすることでコンテナは自動的に終了しません。

Docker がコンテナーの自動終了を防ぐ方法

このチュートリアルの動作環境: linux7.3 システム、docker-1.13.1 バージョン、Dell G3 コンピューター。

Docker がコンテナの自動終了を防ぐ方法

Docker コンテナのライフ サイクルは、コンテナ内の前処理に関連しています。これが、次の期間のみ実行されるコンテナが発生する理由です。数秒で自動的に終了する理由: コンテナ内にフロントエンドプロセスが常駐していないため、フロントエンドプロセスの実行終了後、コンテナは自動的に終了します。

例: docker hello-world

# 一闪而过 输出一堆东西
docker run --name hello-world hello-world
# 可以看到 hello-world 容器已经退出了
docker ps -a

コンテナが自動的に終了しないようにするにはどうすればよいですか? alpine/centos/ubuntu などの純粋なコンテナにログインする場合は、それに基づいていくつかのサービス コンポーネントをインストールし、独自のイメージにコミットします。

インターネットを見ると、while(true) 無限ループを実行したり (もちろんしばらくスリープします) たり、コンテナ作成時に tail -f /dev/null を使用したりする方法がたくさんあります。常駐フロントエンド プロセスの目的は、コンテナを開くことです。実際、Docker コンテナの対話型パラメータと tty パラメータをよりエレガントに使用して、sh/bash (*nix システムには必須) コマンドをプレコマンドとして開くことができ、コンテナが自動的に終了しないようにすることができます。

たとえば、alpine イメージを基本イメージとして使用して、alpine システムの小さなコンテナーを作成し、永続的に実行できるようにして、ログインして特定のコマンドを対話的に実行できるようにします。

# 使用 alpine 系统镜像创建容器
# -i interactive=true 开启 stdin
# -t tty=true 分配会话终端
# -d 守护模式 不加也可以 不加就直接进入容器中了 需要 ctrl+p+q 切出
# 不能 exit 哟, exit 相当于结束 sh 会话了 容器会退出的
docker run -it -d --name alpine alpine sh
# alpine 肯定在运行
docker ps
# 登入容器
docker exec -it alpine sh
# apline 使用的 apk 作为包管理
# 安装个小火车
# 后续可以使用 docker commit -m "alpine with sl cmd" -a "big_cat" alpine big_cat/alpine_sl 生成新的镜像
apk add sl
# 退出容器 注:-d 启动的才可以,如果没有 -d 启动直接进入的 sh终端 则不能退出,否则容器也会退出
exit

コンテナの変更を送信して新しいイメージを生成します

docker commit -m "alpine with sl cmd" -a "big_cat" alpine big_cat/alpine_sl
docker images
# 有账号的话发布到 docker hub 上去
docker push big_cat/alpine_sl
# 后续停止/启动容器时就不需要在指定 -it 参数了
docker stop alpine
docker start alpine

コンテナの変更を送信して新しいイメージを生成します

docker commit -m "alpine with sl cmd" -a "big_cat" alpine big_cat/alpine_sl
docker images
# 有账号的话发布到 docker hub 上去
docker push big_cat/alpine_sl

上記のコマンドは、実際には sh/bash セッション ターミナルをコンテナが自動的に終了しないように前処理します。

コンテナを作成するときにこのように書くのは大雑把だと思われる場合でも、問題はありません。これらを docker-compose にプッシュできます

docker-compose.yml
version: '3'
 
services:
     big_cat_alpine:
     container_name: big_cat_alpine
     image: alpine
     stdin_open: true # -i interactive
     tty: true # -t tty
     privileged: true
     entrypoint: ["sh"] # 执行 sh

コンテナの作成とコンテナへのログイン

docker-compose up -d big_cat_alpine ./
docker ps
docker exec -it big_cat_alpine sh

これら 2 つのパラメーターを docker-compose 経由で渡し、オーケストレーション後にサービス コンテナーを開始します。

推奨される学習: 「docker ビデオ チュートリアル

以上がDocker がコンテナーの自動終了を防ぐ方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。