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 サイトの他の関連記事を参照してください。