我使用多阶段构建将构建环境与最终的 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/ /
[...]
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法来收集make install在运行时创建/复制的所有文件?
目前我正在使用ldd和单个文件副本的组合来获取它们:
cp /etc/xyz/* /tmp/fakeroot/xyz
cp --parents $(ldd /usr/sbin/nginx | grep -o '/.\+\.so[^ ]*' | sort | uniq) /tmp/fakeroot
Run Code Online (Sandbox Code Playgroud)
但是由于 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 && \
[...]
Run Code Online (Sandbox Code Playgroud)
这种方法有什么缺点吗?
| 归档时间: |
|
| 查看次数: |
1205 次 |
| 最近记录: |