web-dev-qa-db-ja.com

Dockerでディレクトリコマンドを変更しますか?

港湾労働者で私はこれをしたいです。

git clone XYZ
cd XYZ
make XYZ

しかし、cdコマンドがないので、毎回フルパスで渡す必要があります(XYZ/fullpathにします)。これに対する何か良い解決策はありますか?

160
RParadox

スクリプトを実行することも、RUNに対するより複雑なパラメータを実行することもできます。これは私が以前に見たためにダウンロードしたDockerfileからの例です:

RUN cd /opt && unzip treeio.Zip && mv treeio-master treeio && \
    rm -f treeio.Zip && cd treeio && pip install -r requirements.pip

'&&'を使用しているため、前のコマンドがすべて成功した場合にのみ、最後の 'pip install'コマンドが使用されます。

実際には、すべてのRUNが新しいコミットを作成し、(現在)AUFSレイヤを作成しているので、Dockerfileにコマンドが多すぎると、上限を使い果たしてしまいます。やるのに便利なこと。

108
Alister Bulman

別のディレクトリに移動するには、 WORKDIR を使用します。 WORKDIRの後のすべてのRUN、CMD、およびENTRYPOINTコマンドは、そのディレクトリから実行されます。

RUN git clone XYZ 
WORKDIR "/XYZ"
RUN make
412
RUN git clone http://username:password@url/example.git
WORKDIR /folder
RUN make
28