DockerはCMDまたはENTRYPOINTコマンドを使用して複数のサービスを同時に起動します

DockerはCMDまたはENTRYPOINTコマンドを使用して複数のサービスを同時に起動します

要件: Celery は Django に導入されています。Django プロジェクトを開始するときに、Celery サービスも開始するにはどうすればよいですか?

ENTRYPOINTコマンドの使用を開始する

1. Dockerfileを書く

 Centos:7より
 実行 localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
 ENV LC_ALL zh_CN.UTF-8
 コピー ./hrms $CODE_DIR/hrms/
 コピー ./run $CODE_DIR/run/
 実行 chmod a+x $CODE_DIR/run/*
 pip3 install -r $CODE_DIR/hrms/requirements.txt を実行します。
 エクスポーズ8080
 ワークディレクトリ /opt/hrms/hrms/

上記を読む必要はありません。重要なのは次のコマンドを見ることです。

 #CMD でサービスを開始します# CMD ["python3.5", "/opt/hrms/hrms/manage.py", "runserver", "0.0.0.0:8080"] 
 
 #複数のサービスを開始する場合は、CMDを使用してスクリプトを実行し、スクリプト内で複数のサービスを開始できます。CMD source /opt/hrms/run/entrypoint.sh
 
 #複数のサービスを開始する場合は、ENTRYPOINTを使用してスクリプトを実行し、スクリプト内で複数のサービスを開始することもできます。ENTRYPOINT ["/opt/hrms/run/entrypoint.sh"]

CMD と ENTRYPOINT の違いは、CMD コマンドは docker-compose.yml ファイル内の command コマンドで上書きできることです。コマンドが指定されると、CMD コマンドは実行されなくなりますが、ENTRYPOINT は上書きできません。

ここでは次の操作を実行できます。

CMD を使用してスクリプトを起動し、スクリプト内で Django、Celery などの複数のサービスを起動します。データベースの移行のみを実行する場合は、docker-compose.yml ファイル内のコマンドで python manage.py migrate を実行すると、CMD コマンドは実行されず、データベースの移行のみが実行されます。

2. entrypoint.sh スクリプト ファイル

#!/bin/bash
 #Djangoを起動
 python3.5 /opt/hrms/hrms/manage.py runserver 0.0.0.0:8080 & 
 
 #ワーカーを起動する
 celery worker -A celery_tasks.main -l info -f /opt/hrms/logs/celery.log & #ログの場所は絶対パスで記述する必要があることに注意してください#開始ビート
 セロリビート -A celery_tasks.main -l 情報

注: 最初の 2 つのサービスはバックグラウンドで実行する必要があり、つまり、それらの後に & を追加し、最後のサービスはフォアグラウンドで実行する必要があります。

それ以外の場合、すべてがフォアグラウンドで実行されると、最初のサービスのみが起動します。すべてがバックグラウンドで実行されると、最後のサービスが実行されたときにコンテナは終了します。

追加知識: Dockerfile CMDの使用

CMD の 3 つの形式:

CMD ["実行可能ファイル","パラメータ1","パラメータ2"] (exec 形式、推奨形式)

CMD ["param1","param2"] (ENTRYPOINTのデフォルトパラメータとして)

CMD コマンド param1 param2 (シェル形式)

注記:

上記の exec フォームは JSON 配列に解析されるため、一重引用符ではなく二重引用符を使用する必要があります。

exec フォームはコマンド シェルを呼び出しません。

たとえば、CMD [ "echo", "HOME"] では、HOME 変数は置き換えられません。シェルを使用する場合は、次のようになります: CMD [ "sh", "-c", "echo $HOME" ]

Dockerfile には CMD が 1 つだけ存在する必要があります。複数存在する場合は、最後のものだけが実行されます。

フォーマットの使用例:

CMD [“sh”,”run.sh”]

または

CMD sh run.sh

私が皆さんに共有したいのは、CMD または ENTRYPOINT コマンドを使用して Docker で複数のサービスを同時に起動する方法に関する上記の記事だけです。これが皆さんの参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • カスタム Docker イメージを作成するための Dockerfile の詳細な説明と CMD と ENTRYPOINT 命令の比較
  • Dockerfile の CMD および ENTRYPOINT コマンドの詳細な説明
  • Docker コンテナで DockerFile を使用して複数の Tomcat サービスをデプロイする手順
  • Dockerで構築されたコンテナにpingツールをインストールする
  • dockerログマウントの問題を解決する
  • Docker MySQLコンテナデータベースへの変更が有効にならない問題を解決する
  • dockerコンテナは直接実行され、pingを介してパブリックIP操作を取得します。
  • Docker ファイルの保存パス、コンテナの起動コマンド操作の取得

<<:  MySQL全文インデックスの原理と欠点

>>:  blockquote タグの使用に関する注意

推薦する

SQL文でのgroup byの使用について簡単に説明します

1. 概要Group by は、by の後の規則に従ってデータをグループ化することを意味します。いわ...

新しい要素を作成する3つの方法のまとめ

1つ目: テキスト/HTML経由var txt1="<h1>テキスト。<...

ウェブページでコンテンツを引用するためによく使われるHTMLタグをマスターする

長い引用には blockquote を、短い引用には q を、参考文献には cite を使用します。...

美しい FLASH ウェブサイト デザイン例 50 選

Flashにより、デザイナーや開発者はブラウザ上でリッチなコンテンツを提供し、動き、インタラクティブ...

MySQL におけるデータタイムとタイムスタンプの違い

MySQL には 3 つの日付型があります。日付(年-月-日)テーブル test(hiredate ...

アルバムと写真をアルバムに保存するためのWeChatアプレット

私は現在、Xiao Nian Gao に似たビデオおよびツール アプリを開発しています。ユーザーが作...

Docker で hyperf を開発する完全な使用例の詳細な説明

ハイパーフ公式サイトHyperf 公式ドキュメントのインストール1. Dockerの使用docker...

ランダムロールコールテーブルを実装するためのネイティブJavaScript

この記事では、JavaScriptのランダムロールコールテーブルの具体的なコードを参考までに紹介しま...

Vueデータ割り当て問題の解決

私が長い間遭遇してきた問題を要約してみましょう。プロジェクトでは、フロントエンドをレンダリングするた...

Win2008 サーバー セキュリティ チェック手順ガイド (日常のメンテナンス手順)

ドキュメントはしばらく前から書いていましたが、アップロードする勇気がありませんでした。サーバーのセキ...

Windows10にMySQL5.6.35データベースを2つインストールする

次のように、Win10 での 2 つの MySQL5.6.35 データベースのインストールを記録しま...

Nginx での SSL 証明書のインストールと展開手順の概要

目次問題の説明:インストール手順1. 準備2. サーバーにリモート接続する3. 証明書と秘密鍵ファイ...

CSS3 を使用して入力複数選択ボックスのスタイルをカスタマイズする例

原則: まず入力要素を非表示にし、次に CSS を使用してラベル要素のスタイルを設定します (他の要...

開発者がデータベースロックを詳細に理解する必要がある理由

1.ロックしますか? 1.1 ロックとは何ですか?ロックの本当の意味は、鍵またはコードで開くことがで...

docker-maven-plugin の詳細な使用方法

目次Docker-Maven-プラグインMavenプラグインの自動デプロイメント手順1. ホストマシ...