2016-03-23 5 views
1

Dockerfileを把握するのが少し難しいと思っています。 Tomcatの画像を作成するdockerfileで次のコマンドを考えてみましょう:Dockerのイメージを理解する

RUN wget -q https://archive.apache.org/dist/tomcat/tomcat-${TOMCAT_MAJOR_VERSION}/v${TOMCAT_MINOR_VERSION}/bin/apache-tomcat-${TOMCAT_MINOR_VERSION}.tar.gz &&\ 
tar zxf apache-tomcat-*.tar.gz 

ADD helloWorld.war ${CATALINA_HOME}/webapps/ 

CMD ["/opt/tomcat/bin/tomcat.sh"] 

私はTomcatをダウンロードしてwarファイルを追加して、Tomcatを開始しています。

  1. ここで私が理解していないのは、実行、追加、およびCMDが実行されるときです。ドッカーのビルドやドッカーの実行時に実行されますか?
  2. ドッカーの実行中に実行される場合、helloWorld.warはどこから取得されますか?ドッカー画像はhelloWorld.warのパッケージで、dockerfileのコマンドセットですか?

答えて

0
  1. RUNADDは、ビルド時間(docker build)で実行されますとCMD/ENTRYPOINTは、実行時間(docker run)で実行されます。

    • RUN画像を構築している間に実行され、対応するレイヤーがドッカー画像に追加されます。

    • CMDは、コンテナが起動するたびに実行されるデフォルトのコマンドです。

    • ADD/COPYは、イメージを構築する際にホストからドッカーのイメージにファイルをコピーします。

  2. helloWorld.warがドッカー画像内にパックされます。 warファイルをdocker runに指定する場合は、volumesを使用できます。 tomcatのwebappsディレクトリをマウントできます。あなたのイメージをビルドするとき

docker run -v /path/to/war/file/in/host:/path/to/webapps/war/in/container tomcat

0

RUNとADDコマンドが実行されます。 CMDは、イメージの実行時に実行されるデフォルトコマンドです。 CMDはコンテナの内部で実行されるため、helloWorld.warはコンテナの「内側」(最初のレイヤー)から取得されます。

関連する問題