Dockerコンテナの自動終了を停止する方法の詳細な説明

Dockerコンテナの自動終了を停止する方法の詳細な説明

この記事では、Docker コンテナとフロントエンド プロセスの関係と、コンテナを永続的に実行できるように Dockerfile/docker-compose.yml を記述する方法について簡単に説明します。

Docker コンテナのライフサイクルは、コンテナ内の前のプロセスと関連しています。そのため、数秒実行しただけで自動的に終了するコンテナがいくつかあることがあります。コンテナ内に常駐する前のプロセスがないため、前のプロセスが終了するとコンテナは自動的に終了します。

例えば、docker hello-world

# フラッシュでいろいろ出力 docker run --name hello-world hello-world
# hello-worldコンテナが終了したことがわかります docker ps -a

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

インターネット上には、コンテナの作成時に while(true) 無限ループ (もちろん sleep) を実行したり、tail -f /dev/null などを使用したりする方法が多数あります。いずれにせよ、目的は永続的なフロントエンド プロセスを開始することです。実際、docker コンテナの interactive および tty パラメータをよりエレガントに使用して、sh/bash (*nix システムに必須) コマンドを事前コマンドとして起動し、コンテナが自動的に終了しないようにすることができます。

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

# alpine システムイメージを使用してコンテナを作成します # -i interactive=true で stdin を開きます
# -t tty=true はセッションターミナルを割り当てます# -d デーモンモードは省略でき、コンテナに直接入ることができます。終了するには ctrl+p+q を押す必要があります# 終了できません。終了は 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 ターミナルを直接起動しないと、終了できません。そうしないと、コンテナも終了します。

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

docker commit -m "alpine with sl cmd" -a "big_cat" alpine big_cat/alpine_sl
Docker イメージ
# アカウントをお持ちの場合は、docker hub に公開します: docker push big_cat/alpine_sl

# 後でコンテナを停止/起動するときに -it パラメータを指定する必要はありません。docker stop alpine
docker スタートアルパイン

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

docker commit -m "alpine with sl cmd" -a "big_cat" alpine big_cat/alpine_sl
Docker イメージ
# アカウントをお持ちの場合は、docker hub に公開します: docker push big_cat/alpine_sl

上記のコマンドは、コンテナが自動的に終了しないように、実際には sh/bash セッション ターミナルをフロント プロセスとして使用します。

コンテナを作成するときにこのように書くのは乱暴だと思うなら、それは問題ではありません。これをすべてdocker-composeにプッシュすることができます。
ドッカーの作成

バージョン: '3'

サービス:
  ビッグキャットアルパイン:
    コンテナ名: big_cat_alpine
    画像: アルパイン
    stdin_open: true # -i インタラクティブ
    端末: 真 # -t 端末
    特権: true
    エントリポイント: ["sh"] # sh を実行する

コンテナを作成してコンテナにログインする

実行ファイル:
ドッカーps
docker exec -it big_cat_alpine sh

2 つのパラメータを docker-compose に渡し、オーケストレーション後にサービス コンテナを起動します。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Dockerコンテナ内の設定ファイルの変更の実装
  • spring-boot と docker-java に基づいて Docker コンテナの動的な管理と監視を実装します [完全なソース コードのダウンロード付き]
  • Linux 上で Docker コンテナを作成、一覧表示、削除する方法の概要
  • Dockerコンテナアプリケーションログの表示方法
  • Dockerコンテナのログ処理の詳細な説明
  • dockerコンテナがIP経由でホストマシンにアクセスできない問題を解決する方法の詳細な説明
  • Dockerコンテナを使用してホストネットワークにアクセスする方法
  • Dockerコンテナの操作手順の概要と詳細説明

<<:  MYSQL ログとバックアップおよび復元の問題の詳細な説明

>>:  Reactは感情を使ってCSSコードを書く

推薦する

SQL の左結合と右結合の原理と例の分析

テーブルが 2 つあり、テーブル A のレコードがテーブル B に存在しない可能性があります。左結合...

Nginx 構成の実装 HTTPS セキュリティ認証

1. HttpとHttpsの違いHTTP: インターネットで最も広く使用されているネットワーク プロ...

フロートとBFCをクリアするCSSメソッド

イギリスBFC: ブロック書式設定コンテキストBFCレイアウトルール内箱は縦方向に次々に配置されます...

MySQL の単一テーブル クエリ操作例の詳細な説明 [構文、制約、グループ化、集計、フィルタリング、並べ替えなど]

この記事では、MySQL の単一テーブル クエリ操作について説明します。ご参考までに、詳細は以下の通...

一般的な CSS プロパティのブラウザ互換性の概要 (推奨)

CSS プロパティのブラウザ互換性をまとめる必要があるのはなぜですか?使用する際は、Can I U...

JavaScript における一般的な配列操作

目次1. 連結() 2. 結合() 3. プッシュ() 5. シフト() 6. シフト解除() 7....

JavaScript DOM オブジェクト操作

目次1. コア1. Domノードを取得する2. ノードの更新2.1 実践演習3. Domノードを削除...

MySql8.0バージョンに接続するMyBatisの設定問題について

mybatis を学習しているときにエラーが発生しました。エラーの内容は次のとおりです。データベース...

MySQL PXC クラスターの構築方法

目次1. PXCの紹介1.1 PXC の紹介1.2 PXC の特徴と利点1.3 PXCの限界と欠点1...

SpringBoot プロジェクトの Docker 環境を実行するときに発生する無限再起動問題の詳細な説明

もしかしたら私の考え方が間違っていたのかもしれないし、問題の説明が少し乱雑だったのかもしれないが、こ...

MySQLの詳細な説明Explain

日常業務では、実行に時間のかかる SQL ステートメントを記録するために、スロー クエリを実行するこ...

Linux ディスクとディスク パーティションを理解するための記事

序文Linux システムのすべてのハードウェア デバイスは、ファイルの形式で表現され、使用されます。...

MySQLでカーソルトリガーを使用する方法

カーソル選択クエリによって返される行のセットは、結果セットと呼ばれます。結果セット内の行は、入力した...

Vue-router プログラムナビゲーションの 2 つの実装コード

ページをナビゲートする2つの方法宣言型ナビゲーション: リンクをクリックしてナビゲーションを実現する...

Web 上の要素を非表示にする方法とその利点と欠点

ソースコードの例: https://codepen.io/shadeed/pen/03caf6b36...