シェルスクリプトを使用して Docker サービスを一括で開始および停止する

シェルスクリプトを使用して Docker サービスを一括で開始および停止する

最近、日々のテストで docker を手動で起動または停止する必要があることが多くなったため、手動操作を置き換えるためにシェル スクリプトを作成することにしました。また、次に示すように、スクリプトは Python スクリプトを介してリモートで呼び出すこともできます。

現在、スクリプトはコンテナ ID をスクリプト内にハードコードしています。もちろん、スクリプトにパラメータを渡すことで制御することもできます。変更することもできます。

Dockerを起動する

起動スクリプトは次のとおりです。

#!/bin/bash
コンテナID="ad3e4d7fc407 a228730a915f ad3e4d7fc4099"
statusLived="ライブ"
statusdead="死亡"
notExistContainer="なし"
再試行回数=3
関数 GetContainerStatus(){
 コンテナが存在する場合=$(sudo docker ps -a | grep -i $1 | wc -l ) 
 [ ${containerExist} -gt 0 ]の場合
  それから
  pid=$(sudo docker stats --format "{{.PIDs}}" --no-stream $1 )
  [ "${pid}" != "0" の場合
   それから 
   エコー「${statusLived}」
  それ以外
   echo "${statusdead}"
  フィ
 それ以外
  echo "${notExistContainer}" 
 フィ
}
関数StartContainer(){
 sudo docker 再起動 $1
}
${containerIDs} のコンテナID
 する
 ((i=1;i<=${再試行回数};i++)) の場合
 する
 ステータス=$(GetContainerStatus ${containerID})
 echo "コンテナ ${containerID} のステータスは ${status} です"
 [ "${status}" == ${statusLived} ] の場合
  それから
  echo "コンテナ ${containerID} はすでに実行中です"
  壊す
 フィ
 [ "${status}" == ${notExistContainer} ] の場合
  それから
  echo "コンテナ ${containerID} は存在しませんでした"
  壊す
 フィ
 [ "${status}" == ${statusdead} ] の場合
  それから
  echo "コンテナ ${containerID} が停止しました、コンテナを起動してください"
  コンテナの開始 ${containerID}
  検証ステータス=$(GetContainerStatus ${containerID})
  [ "${verifyStatus}" == ${statusLived} ] の場合
   それから
    echo "コンテナ ${containerID} の起動に成功しました"
    壊す
  それ以外
   echo "${i} コンテナの起動を再試行します"
   コンテナの開始 ${containerID}
  フィ
 フィ
 終わり
終わり

Dockerを停止する

停止スクリプトは次のとおりです。

#!/bin/bash
コンテナID="589bda1309cd ad3e4d7fc407 a228730a915f ad3e4d7fc4099"
statusLived="ライブ"
statusdead="死亡"
notExistContainer="なし"
再試行回数=3
関数 GetContainerStatus(){
 コンテナが存在する場合=$(sudo docker ps -a | grep -i $1 | wc -l ) 
 [ ${containerExist} -gt 0 ]の場合
  それから
  pid=$(sudo docker stats --format "{{.PIDs}}" --no-stream $1 )
  [ "${pid}" != "0" の場合
   それから 
   エコー「${statusLived}」
  それ以外
   echo "${statusdead}"
  フィ
 それ以外
  echo "${notExistContainer}" 
 フィ
}
関数StopContainer(){
 sudo docker stop $1
}
${containerIDs} のコンテナID
 する
 ((i=1;i<=${retryCount};i++)) の場合
 する
  ステータス=$(GetContainerStatus ${containerID})
  echo "コンテナ ${containerID} のステータスは ${status} です"
  [ "${status}" == ${statusdead} ] の場合
  それから
  echo "コンテナ ${containerID} はすでに停止しています"
  壊す
  フィ
  [ "${status}" == ${notExistContainer} ] の場合
  それから
  echo "コンテナ ${containerID} は存在しませんでした"
  壊す
  フィ
  [ "${status}" == ${statusLived} ] の場合
  それから
   echo "コンテナ ${containerID} は稼働中です。コンテナを停止してください"
   コンテナを停止 ${containerID}
   検証ステータス=$(GetContainerStatus ${containerID})
   [ "${verifyStatus}" == ${statusdead} ] の場合
   それから
    echo "コンテナ ${containerID} の停止に成功しました"
    壊す
   それ以外
   echo "${i} コンテナの停止を再試行します"
   コンテナを停止 ${containerID}
   フィ
  フィ
 終わり
終わり

Python 呼び出しスクリプト

Python サンプル スクリプトは次のとおりです。

パラミコをインポートする
def StartContainer(svr,port,user,pwd):
 クライアント = paramiko.SSHClient()
 クライアントがホストキーポリシーを欠落しているかどうかを設定します。
 client.connect(svr、ポート=port、ユーザー名=user、パスワード=pwd、タイムアウト=5)
 client.exec_command("cd /home/TestCode/ && bash startContainer.sh")
def StopContainer(svr,port,user,pwd):
 クライアント = paramiko.SSHClient()
 クライアントがホストキーポリシーを欠落しているかどうかを設定します。
 client.connect(svr、ポート=port、ユーザー名=user、パスワード=pwd、タイムアウト=5)
 client.exec_command("cd /home/TestCode/ && bash stopContainer.sh ")

要約する

以上、シェルスクリプトを使用して Docker サービスを一括起動・停止する方法についてご紹介しました。お役に立てれば幸いです。

以下もご興味があるかもしれません:
  • シェルで一括してコメント化およびコメント解除する方法
  • シェル スクリプトを使用してファイル サイズをカウントし、ユーザーをバッチで作成する例
  • シェルスクリプトのバッチコピーとコマンド実行の詳細な例
  • シェルスクリプトは ssh-copy-id を実装し、公開鍵をリモートホストにバッチで自動的に送信します。
  • シェル スクリプトを使用して ES インデックスを一括削除する方法
  • シェルバッチcurlインターフェーススクリプトの簡単な実装方法
  • 画像ファイル名のシェルコマンドラインバッチ処理の詳細な説明
  • シェルを使用して複数のサーバーでバッチ操作を実行する方法

<<:  TypeScript の Enum が問題となる理由

>>:  MySQL インデックスのカーディナリティの概念と使用例

推薦する

VueでEchartsチャートの幅と高さの適応を実現する実践

目次1. インストールとインポート2. 手ぶれ補正機能を定義する3. チャートコードを描くinit ...

Docker環境でMySQLを実行し、Binlogを有効にしてマスタースレーブ同期を構成する方法

同じサーバーで、Docker を使用して Mysql のマスター スレーブ同期設定をシミュレートしま...

大きな太陽の天気アイコンを純粋な CSS で記述する方法の例

効果効果図は以下のとおりです実装のアイデアDivは太陽の長方形の光と影を実現します前の疑似要素は、既...

mysql 5.7.11 winx64.zip インストールと設定方法のグラフィックチュートリアル

MySql データベース システムをインストールして構成します。 1. ダウンロード http://...

SQLと各種NoSQLデータベースの使用シナリオの説明

SQL はメイントランクです。なぜ私はこのように理解するのでしょうか。技術的な観点からリレーショナル...

JavaScript インタビュー: 配列の平坦化メソッドを実装する方法

目次1 配列のフラット化とは何ですか? 2 JS標準ライブラリの配列フラット化メソッド3 フラットメ...

Vue のライフサイクルとフック関数の詳細な説明と典型的な面接の質問

目次1. Vue ライフサイクル2. フック機能2.1 4つの段階と8つの方法に分かれています。 2...

Vue シンプル登録ページ + 確認コード送信機能の実装例

目次1. エフェクト表示2. 検証コードとメールプッシュ管理の強化(後述のブログを参照) 3. 一般...

QQブラウザ機能を実装するためのCSS

コード知識ポイント1. fullpage.jsを組み合わせてフルスクリーンスクロールを実現する2. ...

Web デザインでフラッシュ オーバーレイ ポップアップ レイヤーの z-index プロパティを設定しても機能しない

デフォルトでは、Flash は常にページのトップレベルに表示されます。つまり、ページに DHTML ...

フロントエンド開発に必須:推奨されるブラウザ互換性テストツール 12 選

フロントエンド開発者にとって、さまざまな主要ブラウザのさまざまなバージョンでコードが適切に動作するこ...

jsでユーザー登録機能を実装する

この記事の例では、ユーザー登録機能を実装するためのjsの具体的なコードを参考までに共有しています。具...

ホストNginx + Docker WordPress Mysqlを設定するための詳細な手順

環境Linux 3.10.0-693.el7.x86_64 Docker バージョン 18.09.0...

モバイルデバイス用のメタタグ設定の完全なリスト

序文以前フロントエンドを勉強していたとき、メタタグに対する私の理解はこの一文だけでした。 <メ...

MySQL データベースの操作とデータ型

目次1. データベース操作1.1 データベースの表示1.2 データベースを作成する1.3 データベー...