ホームページ >バックエンド開発 >Golang >Docker Compose でワンタイムコマンドを実行するにはどうすればよいですか?

Docker Compose でワンタイムコマンドを実行するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-16 05:20:03477ブラウズ

How to Execute a One-Time Command in Docker Compose?

Docker Compose でのワンタイム コマンドの実行

Docker Compose のコンテキストで、特定のコマンド ( ./my-project -setup) は、コンテナーの再起動やデプロイメントに関係なく、1 回のみです。この必要性は、初期化またはデータのセットアップが必要な状況で発生します。

この問題に対処するには、コンテナ内にエントリポイント スクリプトを実装することを検討してください。このスクリプトは、データベースがすでに初期化されているかどうかを確認するタスクを処理します。開始されていない場合、スクリプトは必要な初期化手順を実行します。

コンテナーの起動順序は保証されていないため、アプリケーション コンテナーがデータベース コンテナーより前に起動する可能性があることに注意することが重要です。これに対処するには、スクリプトにそのような発生を処理するロジックを組み込む必要があります。

このアプローチの例は、WordPress の公式イメージ (https://github.com/docker-library/wordpress/blob) にあります。 /df190dc9c5752fd09317d836bd2bdcd09ee379a5/apache/docker-entrypoint.sh#L146-L171)。スクリプトはデータベースへの接続を試行し、初期化が必要かどうかを確認し、データベースにまだアクセスできない場合は再試行します。

ボリューム管理の最適化

最初の Docker compose でファイルを作成するには、「データ専用」コンテナを使用してボリュームを接続しました。ただし、Docker の最新バージョン (1.9 以降) はボリューム管理機能を提供します。これにより、データ専用コンテナを個別に用意する必要がなくなります。

データ専用コンテナを削除し、mongo サービスを次のように変更することで、Docker 構成ファイルを簡素化できます。

mongo:
    image: mongo:latest
    volumes:
      - mongodata:/data/db
    ports:
      - "28001:27017"
    command: --smallfiles --rest --auth

この構成mongodata という名前のボリュームがまだ存在しない場合は作成します。または、その名前の既存のボリュームを再利用します。ボリュームを管理するには、コマンド docker volume ls for list と docker volume rm を使用します。削除用。

以上がDocker Compose でワンタイムコマンドを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。