主にシェルを使用して複数のコマンドを実行するには、複数の方法があります。
- の「シェル形式」を使用してコマンドを実行します
ENTRYPOINT
。(ただし、Dockerfile
参照では以下の「exec 形式」を優先します。) 舞台裏で、この「シェル形式」は実際にシェル バイナリ ( など/bin/sh
) を実行し、シェルに「スクリプト」 (ここではecho one && echo two
) を解釈させます。
FROM ubuntu:bionic
ENTRYPOINT echo one && echo two
- の「exec 形式」を使用してコマンドを実行します
ENTRYPOINT
。この場合、シェル バイナリが直接呼び出されます。
FROM ubuntu:bionic
ENTRYPOINT ["/bin/sh", "-c", "echo one && echo two"]
- コマンドが複雑になる場合は、それらをファイルに入れることを検討してください。シェル バイナリ (以下のファイルの上部に示され
#/bin/sh
ているように) がスクリプト ファイルの内容を解釈するという点で、上記と実際には違いはありません。
echo -e '#/bin/sh'"\necho one && echo two" > my-entrypoint.sh
FROM ubuntu:bionic
COPY my-entrypoint.sh /
RUN chmod +x /my-entrypoint.sh
ENTRYPOINT /my-entrypoint.sh
- 上記と同様ですが、「exec フォーム」を使用します。
ENTRYPOINT ["/bin/sh", "-c", "/my-entrypoint.sh"]
ENTRYPOINT
(参考までに、 orを使用して組み合わせることができますがCMD
、複数のコマンドを実行する場合ENTRYPOINT
は十分な場合が多いため、それには触れません。参照を確認して、Dockerfile
方法ENTRYPOINT
とCMD
相互作用を確認できます。)
Jib の場合、<container><entrypoint>
/を使用container.entrypoint
してイメージ エントリポイントをカスタマイズできます。( MavenとGradleの参照を確認してください。) また、<extraDirectories>
機能 ( Maven / Gradle ) を使用して、シェル スクリプトを含む任意のファイルを提供できます。さらに、たとえば、シェル スクリプトに実行可能なビットを与えるために<extraDirectories>
使用できます。<permissions>
また、Jib が使用するデフォルトの Java ベース イメージには/bin/sh
バイナリ (シェル) がないため、シェルを持つ別のベース イメージを使用する必要があることに注意してください。
最後に、コンテナー イメージに対して複数のコマンドを実行する方法を説明しているだけであることに注意してください。これは、Kubernetes (または任意の運用環境) で堅牢で回復力のある方法でサービスを実行するための理想的な方法であるとは限りません。