停止したすべてのDockerコンテナを1つのコマンドで再起動する

停止したすべてのDockerコンテナを1つのコマンドで再起動する

停止したすべてのDockerコンテナを1つのコマンドで再起動する

docker ps -a | grep 終了しました

停止したコンテナをすべて表示

docker ps -a | grep 終了しました | awk '{print $1}'

停止したコンテナのIDを取得する

docker ps -a | grep 終了しました | awk '{print $1}' |xargs docker 開始

停止したコンテナのIDをコンテナ起動コマンドに渡す

1 つのコマンドで実行中のすべての Docker コンテナを停止する

docker ps -a | grep Up | awk '{print $1}' |xargs docker stop

追加知識: Docker 学習ノート: イメージの取得とコンテナの起動と停止

画像を取得する

デフォルトでは、docker pull コマンドは公式の Docker Hub リポジトリからローカル コンピューターにイメージをプルします。

まず、このコマンドの形式を紹介します。

docker pull [オプション] <ウェアハウス名>: <タグ>

で:

docker pull: Docker がイメージをプルするためのコマンド キーワード。

[OPTIONS]: コマンドオプション。

ウェアハウス名: ウェアハウス名の形式は通常、<ユーザー名>/<ソフトウェア名> です。 Docker Hub の場合、ユーザー名を指定しないと、デフォルトは公式イメージである library になります。

タグ: タグは、イメージの異なるバージョンを区別するための重要なパラメーターです。<ウェアハウス名>:<タグ> はイメージを一意に識別します。デフォルトは最新です。

たとえば、公式 Docker Hub リポジトリから Ubuntu 14.04 の公式イメージをプルする場合、ステートメントは次のようになります。

docker pull ubuntu:14.04

docker pull コマンドの舞台裏で何が起こっているのか

まず、タグ値が空の場合、つまりタグが指定されていない場合は、デフォルトのタグである最新のタグが使用されます。タグ値が空でない場合は、指定されたタグが使用されます。

次に、デフォルトでは、Docker Hub で「repoName」という名前のリポジトリを検索し、リポジトリが存在しない場合はエラー メッセージを返します。リポジトリが存在する場合は、リポジトリから対応するタグのイメージをプルします。たとえば、docker pull ubuntu:14.04 を実行すると、タグ 14.04 のイメージが「ubuntu」リポジトリからプルされ、docker pull ubuntu を実行すると、タグ latest のイメージが「ubuntu」リポジトリからプルされます。

(Docker Hub には多くのイメージ リポジトリがあります。通常、同じタイプのイメージは同じリポジトリに配置されます。たとえば、ubuntu リポジトリは、ubuntu:14.04、ubuntu:16.04、ubuntu:latest など、多くの ubuntu イメージで構成されています)。

最後に、プルしたイメージをローカルの指定された場所に保存します。

ミラーアクセラレータの設定

「万里の長城」の影響で、中国では Docker Hub からイメージを取得する速度が遅くなる可能性があります。Alibaba、NetEase など、多くの国内クラウド サービス プロバイダーがイメージ アクセラレータ サービスを提供しています。

Linux システムでの Alibaba Cloud Accelerator の設定を例にとると、次のコマンドを Linux ターミナルにコピーし、root ユーザーとして実行するだけで、Alibaba Cloud Accelerator を正常に設定できます。

# ルートユーザーとして以下の操作を実行します

mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{#次の URL は、独自の Alibaba Cloud アクセラレーション アドレス "registry-mirrors" に置き換えることができます: ["https://jxus37ad.mirror.aliyuncs.com"]
}
終了
systemctlデーモンリロード
systemctl dockerを再起動します

コンテナを起動する

イメージをプルすると、コンテナの動作環境が準備されます。

コンテナを起動する方法は 2 つあります。1 つはイメージを元に新しいコンテナを作成して起動する方法、もう 1 つは停止したコンテナを再起動する方法です。

最初の方法: 作成して開始する

docker run コマンドは、指定されたイメージに基づいてコンテナを作成し、起動します。 docker run の基本的な構文は次のとおりです。

docker run [オプション] イメージ名 [コマンド] [引数]

で:

docker run: コンテナを作成して起動するための Docker コマンド キーワード。

オプション: コマンド オプション。最もよく使用されるオプションには、コンテナーをバックグラウンドで実行してコンテナー ID を返す -d、コンテナーを対話モードで実行する -i、コンテナーに疑似入力ターミナルを割り当てる -t、および起動したコンテナーの名前を指定する –name などがあります。その他のオプションについては、Docker のヘルプ ドキュメントを参照してください。

イメージ名: <ウェアハウス名>:<タグ> の形式で指定します。

COMMAND: コンテナの起動後に実行される起動コマンドを設定します。

ARG: その他のパラメータ。

docker runの舞台裏で何が起こっているのか

Docker がバックグラウンドで実行する標準的な操作は次のとおりです。

指定されたイメージがローカルに存在するかどうかを確認します。存在しない場合は、パブリック リポジトリからダウンロードして起動します。

イメージを使用してコンテナを作成して起動します。

ファイルシステムを割り当て、読み取り専用イメージ レイヤーの外側に読み取りおよび書き込み可能なレイヤーをマウントします。

ホストの設定されたブリッジ インターフェイスからコンテナーに仮想インターフェイスをブリッジします。

アドレス プールからコンテナーの IP アドレスを構成します。

ユーザーが指定した起動コマンドを実行します。

実行が完了するとコンテナは終了します。

Docker 実行例 1

Ubuntu オペレーティング環境でコンテナを作成して起動し、hello docker を出力します。

たった 1 つのコマンド、docker run ubuntu:14.04 echo 'hello docker' を実行するだけで、問題は解決します。

まず、ubuntu:14.04 イメージがローカルに存在しないため、まず Docker Hub からイメージをダウンロードします (実際には、まず docker pull ubuntu:14.04 を実行する必要があります)。

その後、画像をダウンロードした後、その画像を使用して作成します。 Ubuntu イメージには Ubuntu システムのすべてのコンテンツが含まれているため、イメージを使用してコンテナーを起動すると、コンテナー内で Ubuntu オペレーティング環境が利用できるようになります。

コンテナを起動したら、echo 'hello docker' 起動コマンドを実行し、起動コマンドの実行後にコンテナを終了します。

Docker 実行例 2

Ubuntu オペレーティング環境でコンテナを作成して起動します。コンテナの名前は firstContainer で、ユーザーと対話するためのターミナルがコンテナに割り当てられます。

-i オプションは、標準入力ストリームと標準出力ストリームをコンテナに開いたままにするように Docker に指示し、-t オプションは、Docker が疑似端末 (疑似 tty) を割り当ててコンテナの標準入力にバインドできるようにします。 –name はコンテナのコンテナ名を設定します。

docker run は新しいコンテナを作成して起動するため、このコマンドで作成されたコンテナは、前のインスタンスで作成されたコンテナと同じコンテナではないことに注意してください。また、ubuntu:latest イメージは既にローカルに存在するため、Docker Hub から再度ダウンロードする必要はありません。代わりに、ローカルの ubuntu:latest イメージが直接使用され、コンテナが構築されます。

コンテナを起動したら、コンテナに入り、ターミナルでコンテナと対話します。左側のコマンド プロンプトに基づいて、コンテナー内にいるかどうかを判断できます。たとえば、上記の例では、左側のコマンド プロンプトが root@localhost の場合はコンテナーの外部にいることを意味し、コマンド プロンプトが root@fe263c9359dd/ の場合はコンテナー内にいてコンテナー ID が fe263c9359dd であることを意味します。 exit を通じて現在のコンテナを終了できます。

2番目の方法: 終了したコンテナを起動する

Docker コンテナは非常に軽量ですが、一般的には、コンテナを起動して操作を完了した後に削除することになります。しかし、以前に作成したコンテナに入ると、docker run によって毎回新しいコンテナが作成されることがあり、これは明らかにニーズを満たしていません。この場合、docker start コマンドを使用して、コンテナ名またはコンテナ ID を指定して終了したコンテナを起動できます。

docker start [オプション] コンテナ [コンテナ2...]

で:

docker start: Docker がコンテナを起動するためのコマンド キーワード。

オプション: コマンドオプション。

コンテナ: 起動するコンテナ。コンテナは「コンテナ ID」または「コンテナ名」で表されます。複数のコンテナを指定した場合、すべてのコンテナが起動されます。

firstContainer という名前のコンテナが終了状態にあり、それを起動する必要があるとします。これを行うには、docker start firstContainer を実行します。コマンドの実行後、firstContainer コンテナを起動し、コンテナの起動コマンドを実行します。

しかし、最初のインスタンスによって作成されたコンテナを起動したい場合、コンテナの名前 (指定していないため) も ID もわかりません。何をするか?

コンテナ情報の表示

Docker には docker ps というコマンドがあり、これを使用してコンテナ ID、ベースイメージ、起動コマンド、作成時間、現在のステータス、ポート番号、コンテナ名などのコンテナ情報を表示できます。

パラメータなしで docker ps を実行すると、実行中のコンテナがすべて表示されます。たとえば、docker ps を実行します。下図に示すように、現在の Docker 環境では、実行中のコンテナは 1 つだけです。そのコンテナ ID は fe263c9359dd で、ubuntu:latest イメージに基づいており、起動コマンドは「/bin/bash」、作成時間は 2 分前、現在のステータスは「Up 2 minutes」で、2 分間実行されていることを意味します。コンテナ名は firstContainer です。

docker ps –a コマンドを使用すると、停止したコンテナも含め、Docker 環境内のすべてのコンテナを表示できます。 docker ps –a を実行すると、次の図に示すように、firstContainer という名前のコンテナに加えて、ee826f1d58ff という名前のコンテナも表示されます (コンテナ ID はランダムに生成されます)。ただし、このコンテナの現在のステータスは 3 分前に終了 (0) となっており、終了状態にあり、3 分前に終了したことを意味します。

この終了したコンテナは、docker start ee826f1d58ff または docker start g\fracious_lewin で起動できます。

実際の状況では、docker start ee826f1d58ff を使用して最初のインスタンスのコンテナを起動し、次に docker ps を使用して表示しますが、コンテナは表示されません。つまり、docker ps を実行すると、コンテナ ID ee826f1d58ff のコンテナは実行状態ではなく、終了状態になります。

docker ps の実行結果は次のとおりです: コンテナ ID ee826f1d58ff のコンテナの現在のステータスは 2 秒前に終了しました (0)。 ! !これは、ee826f1d58ff コンテナは確かに終了状態ですが、2 秒前に終了したことを意味します。2 秒前であったことに注意してください。これは、コンテナが 2 秒前に起動されたが、何らかの理由でコンテナが終了したことを示しています。 !

実際の状況では、docker start ee826f1d58ff を実行して、コンテナ ID ee826f1d58ff のコンテナを起動します。 !しかし、start コマンドを実行すると、コンテナはすぐに終了します。

コンテナを停止する

docker stop を使用してコンテナを停止する

docker stop を使用すると、実行中のコンテナを終了できます。コマンドの形式は次のとおりです。

docker stop [オプション] コンテナ [コンテナ...]

で:

docker stop: コンテナを停止するための Docker のコマンド キーワード。

オプション: コマンド オプション。-t は、コンテナが終了していない場合にコンテナを強制的に停止するまでの待機秒数を指定します。デフォルトの待機時間は 10 秒です。

コンテナ: 起動するコンテナ。コンテナは「コンテナ ID」または「コンテナ名」で表されます。複数のコンテナを指定した場合、すべてのコンテナが起動されます。

たとえば、firstContainer という名前のコンテナを停止する場合は、docker stop firstContainer を実行できます。コマンドが実行されると、firstContainer は終了状態になります。終了したコンテナは、docker ps –a を使用して表示できます。

実際の作業では、docker stop を実行してもコンテナがすぐに終了せず、しばらく待つ必要がある場合があります。

コンテナは実際にはプロセスです。 docker stop を実行すると、まずコンテナのメイン プロセスに SIGTERM シグナルが送信され、メイン プロセスはリソースを解放し、ステータスを保存して、自身を終了しようとします。ただし、待機時間が -t で設定された時間を超えると、コンテナのメイン プロセスに SIGKILL シグナルが送信され、コンテナは直ちに終了します。

どのような状況でコンテナは起動後すぐに終了しますか?

実際の場面では、docker stop コマンドを使用してコンテナを強制終了するだけでなく、コンテナの start コマンドが終了したときにもコンテナが自動的に終了します。

docker run --name testcontainer ubuntu echo 'hello docker' を例にとると、echo 'hello docker' はコンテナの起動コマンドです。実際、このコマンドを実行した後、docker ps -a を実行すると、以下に示すように、testcontainer コンテナが終了状態になっていることがわかります。

[root@localhost デスクトップ]# docker run --name testcontainer ubuntu echo 'hello docker'
こんにちはドッカー
[root@localhost デスクトップ]# docker ps -a
コンテナID イメージ コマンド 作成ステータス ポート名
da14116bf641 ubuntu "echo 'hello docker'" 6秒前 終了しました (0) 4秒前 testcontainer

コンテナが起動すると、コンテナ起動コマンドが実行されます。上記のコマンドを実行してコンテナを作成・起動すると、すぐにコンテナ起動コマンド echo 'hello docker' が実行されるため、コンテナは終了しています。そのため、docker ps -a を使用してコンテナの状態を確認すると、終了した状態になっています。

Docker コンテナはプロセスであり、実際には sh をメインプロセスとして使用します。メインプロセスが停止すると、コンテナも停止します。ただし、コンテナの「起動コマンド」を実行すると、実行を継続するコマンドがないためメインプロセスが停止し、コンテナも停止します。

コンテナが起動後すぐに終了しないようにするにはどうすればよいですか?

コンテナの sh メインプロセスが停止しない場合は、コンテナは停止しないことを意味しますか?答えはイエスです。したがって、起動コマンドが完了まで実行できない場合、または起動コマンドの実行後にコンテナの sh メイン プロセスが停止しない場合は、コンテナは起動後すぐに終了しません。

コンテナが起動直後に停止するのを防ぐことができる 2 つの例を次に示します。

起動コマンドを無限ループに設定する

docker run ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"

コンテナを作成して起動した後、このコマンドは /bin/sh -c "while true; do echo hello world; sleep 1; done" を実行します。このコマンドは強制終了されない限り完了しないため、コンテナのメインプロセス sh は停止せず、したがってコンテナも停止しません。しかし、これをやるとコンテナを正常に操作することができず、リソースを占有してしまうため、実際の作業ではあまり意味がありません。

起動コマンドを「永久に実行されるサブプロセスを開始する」に設定します

docker run --name first_container -it ubuntu /bin/bash

このコマンドを実行すると、コンテナが作成・起動され、/bin/bash が実行されると、子プロセスが起動します。このとき、親プロセス (つまり、コンテナのメインプロセス sh) はスリープ状態になります。スリープ状態は終了状態ではないため、コンテナは実行を継続します。

コンテナ内で exit を入力したり、ctrl D を実行した後にコンテナが終了するのはなぜでしょうか。これは exit により現在のプロセス、つまり /bin/bash が exit (終了) されるためです。子プロセスが終了するため、sh メインプロセスは実行状態に戻ります。しかし、実行を継続するコマンドがないため、sh メインプロセスが終了し、コンテナが終了します。

停止したすべての Docker コンテナを再起動する上記の 1 つのコマンドは、エディターがあなたと共有するすべての内容です。これが参考になれば幸いです。また、123WORDPRESS.COM をサポートしていただければ幸いです。

以下もご興味があるかもしれません:
  • Docker stopはすべてのコンテナを停止/削除します
  • Dockerコンテナを作成、起動、停止する方法
  • Dockerコンテナを停止および削除できない問題の解決策

<<:  非常に詳細な MySQL8.0.22 のインストールと設定のチュートリアル

>>:  ハイパーリンクを表示して開く方法

推薦する

CSS の inline-block の最小幅値の詳細な説明

序文最近、私は夜に時間を取って「CSS World」という本を読んでいます。この本は非常に興味深く、...

Linux での NVIDIA GPU 使用状況の監視の詳細な説明

TensorFlow をディープラーニングに使うとビデオメモリ不足がよく起こるので、GPU 使用状況...

MySQL マスタースレーブレプリケーションの原理と注意点

前面に書かれた最近、Mycat で特別なトピックを書いています。最近、多くの友人が面接に出かけている...

リンク更新ページと js 更新ページの使用例

1. リンクの使用方法:コードをコピーコードは次のとおりです。 <a href="j...

JavaScript が Jingdong のカルーセル効果を模倣

この記事では、JD.comのカルーセル効果の表示を実現するためのJavaScriptの具体的なコード...

Windows での MySQL データベースのマスター/スレーブ構成チュートリアル

WindowsでMySQLデータベースのマスターとスレーブを構成する詳細なプロセスは次のとおりです。...

node.js でマルチコア CPU を最大限に活用する方法

目次概要node.js でマルチコア CPU を最大限に活用する方法Node で子プロセスを作成する...

WeChatアプレットがシンプルな計算機機能を実装

WeChatアプレット:シンプルな計算機、参考までに、具体的な内容は次のとおりです。ミニプログラムに...

Vueの学習手順

目次1. v-text (v-instruction name = "variable&q...

MySQL の冗長インデックスと重複インデックスの詳細な説明

MySQL では、同じ列に複数のインデックスを作成できます。意図的であるかどうかにかかわらず、MyS...

mysqldump でデータベースをバックアップするときに特定のライブラリを除外する例

例: mysqldump –all-databases を使用すると、すべてのライブラリがエクスポー...

MySQLのトランザクション管理操作の詳細な説明

この記事では、MySQL のトランザクション管理操作について説明します。ご参考までに、詳細は以下の通...

親要素に対する CSS 子要素の固定配置ソリューションの詳細な説明

基本概念絶対配置: 絶対配置に設定された要素ボックスはドキュメント フローから完全に削除され、その包...

タイムライン効果を実現するCSS3

最近、コンピューターの電源を入れたところ、Geek Academy が新規ユーザーに 1 か月の無料...

HTML における <meta> タグの使用に関する詳細な説明

私たちが作成する Web ページでは、より多くの人々に訪問してもらいたい場合、検索エンジンを使用して...