Docker
使用 makefile 在 docker 多階段建構中復製文件
我正在使用多階段建構將建構環境與最終的 docker 映像分開:
FROM ubuntu:bionic AS build RUN apt-get update && apt-get install -y \ build-essential \ [...] RUN wget https://someserver.com/somefile.tar.gz && \ tar xvzf somefile.tar.gz && \ ./configure && \ make && make install && \ [missing part] FROM ubuntu:bionic COPY --from=build /tmp/fakeroot/ / [...]
有沒有一種簡單的方法來收集執行時創建/複製的所有文件
make install
?目前我正在使用組合
ldd
和單個文件副本來獲取它們:cp /etc/xyz/* /tmp/fakeroot/xyz cp --parents $(ldd /usr/sbin/nginx | grep -o '/.\+\.so[^ ]*' | sort | uniq) /tmp/fakeroot
但是由於 make install 已經有了將哪個文件複製到哪個目錄的資訊,所以我問自己是否沒有任何方法可以使用這種機制。
感謝您的任何想法!
我現在發現的一種方法是使用checkinstall替換
make install
步驟並跟踪安裝以在第一階段生成一個包。然後在第二階段我dpkg
用來安裝這個包。所以現在我在做:
FROM ubuntu:bionic AS build RUN [...] ./configure && \ make && \ checkinstall --install=no --default && \ cp XYZ-*.deb /XYZ.deb FROM ubuntu:bionic COPY --from=build /XYZ.deb / RUN dpkg -i /XYZ.deb && \ rm /XYZ.deb && \ [...]
這種方法有什麼缺點嗎?
./configure --prefix=/path/to/somewhere
將強制make install
部署下的所有文件/path/to/somewhere
所以在第二階段很容易從這個地方複製所有文件。