Trong docker tôi muốn làm điều này:
git clone XYZ
cd XYZ
make XYZ
Tuy nhiên vì không có lệnh cd, tôi phải vượt qua trong đường dẫn đầy đủ mọi lúc (tạo XYZ / fullpath). Bất kỳ giải pháp tốt cho việc này?
Trong docker tôi muốn làm điều này:
git clone XYZ
cd XYZ
make XYZ
Tuy nhiên vì không có lệnh cd, tôi phải vượt qua trong đường dẫn đầy đủ mọi lúc (tạo XYZ / fullpath). Bất kỳ giải pháp tốt cho việc này?
Câu trả lời:
Bạn có thể chạy tập lệnh hoặc tham số phức tạp hơn với RUN. Dưới đây là một ví dụ từ Dockerfile mà tôi đã tải xuống để xem trước đây:
RUN cd /opt && unzip treeio.zip && mv treeio-master treeio && \
rm -f treeio.zip && cd treeio && pip install -r requirements.pip
Do sử dụng '&&', nó sẽ chỉ nhận được lệnh 'pip install' cuối cùng nếu tất cả các lệnh trước đó đã thành công.
Trên thực tế, vì mỗi RUN tạo ra một cam kết mới & (hiện tại) một lớp AUFS, nếu bạn có quá nhiều lệnh trong Dockerfile, bạn sẽ sử dụng hết các giới hạn, do đó, việc hợp nhất các RUN (khi tệp ổn định) có thể rất điều hữu ích để làm.
cd
chỉ duy nhất kéo dài cho RUN
lệnh hiện tại . Việc tiếp theo RUN
sẽ bắt đầu từ hiện tại WORKDIR
.
Để thay đổi vào thư mục khác, sử dụng WORKDIR . Tất cả các lệnh RUN, CMD và ENTRYPOINT sau WORKDIR sẽ được thực thi từ thư mục đó.
RUN git clone XYZ
WORKDIR "/XYZ"
RUN make
RUN git clone http://username:password@url/example.git
WORKDIR /folder
RUN make