我正在尝试为Centos7创建rpm包。所以我从Centos7映像创建Dockerfile并在其中构建rpm。它可以成功构建,但是存在一个问题:当我尝试将此rpm作为其他Dockerfile中的软件包使用/opt/app-root/bin
时,需要在将其安装到时将其安装到usr/bin
。
这是我用于构建rpm的Dockerfile(我也将其安装在内部以检查其工作原理):
FROM centos/python-27-centos7:latest
USER root
RUN yum update -y
RUN yum install rpm-build -y
WORKDIR /usr/src/app
COPY . .
RUN bash -c "pip install --upgrade pip"
RUN git clone https://github.com/klbostee/typedbytes.git
RUN bash -c "cd typedbytes && python setup.py install"
RUN bash -c "pip install -r requirements.txt"
RUN git clone https://github.com/klbostee/dumbo
RUN bash -c "cd dumbo && python setup.py \
--command-packages=pypi2rpm.command bdist_rpm2 \
--binary-only \
--tmppath /tmp/ \
--dist-dir=. \
--no-autoreq \
--name=python27-dumbo \
--python=python"
RUN cd dumbo && yum install *.rpm -y
CMD ["bash"]
我docker run -ti -v ...
在那之后使用并从安装的卷中复制rpm。之后,我尝试在另一个Dockerfile中使用此rpm,它成功安装了它,但是找不到使用它的命令:no such file or directory
我想它将rpm安装到错误的路径,然后找不到它。
我想我的问题正在使用USER root
-看起来这就是为什么它尝试将其安装到/opt/root/
但我不知道如何更改它的原因。
如何安装到usr/bin
?我需要在Docker中创建另一个用户吗?还是什么?
我开始认为我的问题是为构建的应用选择了错误的图像。我尝试使用另一个:
FROM centos:centos7
并手动将python安装到它。这就解决了问题-在此图像中,我在编写Dockerfile时具有root特权,并且我的库安装到/usr/bin
我希望的位置。因此,解决方案是:
FROM centos:centos7
MAINTAINER The CentOS Project <cloud-ops@centos.org>
RUN yum -y update; yum clean all
RUN yum -y install epel-release; yum clean all
RUN yum -y install python-pip; yum clean all
RUN yum -y install rpm-build
RUN yum -y install git, which
RUN pip install --upgrade pip
RUN pip install --upgrade setuptools
RUN mkdir app
COPY . /app
WORKDIR /app
RUN git clone https://github.com/klbostee/typedbytes.git
RUN cd typedbytes && python setup.py install
...
等等。