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コードを書く

推薦する

HTML(CSSスタイル仕様)を読む必要があります

CSS スタイル仕様1. クラスセレクター2. タグセレクター3. IDセレクター4. CSSスタイ...

MYSQL 左結合の最適化 (10 秒から 20 ミリ秒)

目次【機能背景】 [生のSQL] 【独自SQL解析】 【分析手順】 [最適化されたSQL] 【最適化...

MySQLの半同期の詳細な説明

目次序文MySQL マスタースレーブレプリケーションMySQL でサポートされているレプリケーション...

Windows 10 64 ビット版に MySQL 5.6.35 をインストールするためのグラフィック チュートリアル

1. MySQL Community Server 5.6.35をダウンロードするダウンロードアドレ...

Linux ソースコードからのソケット (TCP) バインドの詳細な説明

目次1. 最も単純なサーバー側の例2. バインドシステムコール2.1、inet_bind 2.2、i...

Linux で MySQL 8.0 サービスを完全に削除する方法

この記事を読む前に、Linuxコマンド、特にcentos7.3環境でyumを使用してインストールされ...

MySQL の集計関数 count の使用法とパフォーマンスの最適化テクニック

この記事の環境はWindows 10、MySQLのバージョンは5.7.12-logです1. 基本的な...

マーキー要素は、スクロールするフォントや画像などの効果を実装します。

マーキー要素を使用すると、単純なフォント(画像など)のスライドやその他の効果を実現できます。コードを...

shtml includeの使い方

これを応用することで、ウェブサイトの一部の公開領域を独立したページにすることができ、その後、この技術...

MySQLで負荷分散を実装する方法

序文MySQL は、クライアント/サーバー構造に基づく、高速、高性能、マルチスレッドのオープン ソー...

Vue カプセル化に基づくプルダウン更新およびプルアップ読み込みコンポーネント

VueとネイティブJavaScriptカプセル化に基づいて、プルダウンリフレッシュとプルアップロード...

ReactにおけるuseRefの具体的な使い方

React の経験がある人なら、コンポーネントインスタンスオブジェクトや DOM オブジェクトを取得...

MySQL のファントムリード問題を解決する方法

目次序文1. ファントムリーディングとは何ですか? 2. ファントムリーディングの問題点は何ですか?...

Nginx 正規表現関連のパラメータとルールの紹介

序文最近、私はクライアントのサーバー構成を支援しており、Nginx 構成ファイルを頻繁に変更していま...

さまざまな解像度やブラウザでウェブページを適切に表示する方法

キーコードは次のとおりです。コードをコピーコードは次のとおりです。 html{高さ:100%; }コ...