docker では、コンテナが自動的に終了しないように、コンテナに常駐の前処理を追加できます。docker コンテナの対話型パラメータと tty パラメータを使用して、「sh/bash」コマンドを有効にすることができますこうすることでコンテナは自動的に終了しません。
このチュートリアルの動作環境: linux7.3 システム、docker-1.13.1 バージョン、Dell G3 コンピューター。
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 サイトの他の関連記事を参照してください。