使用Docker的Perl安装问题

时间:2017-06-09 02:38:48

标签: docker

我正在尝试使用perl安装来构建docker镜像。

Dockerfile:

FROM amazonlinux
WORKDIR /shared
RUN yum -y install gcc
ADD http://www.cpan.org/src/5.0/perl-5.22.1.tar.gz /shared
RUN tar -xzf perl-5.22.1.tar.gz

WORKDIR /shared/perl-5.22.1
RUN ./Configure -des -Dprefix=/opt/perl-5.22.1/localperl

RUN make
RUN make test
RUN make install

执行所有这些步骤我可以看到它执行make,make test和make install命令,但是当我这样做时:

docker run -it testsh /bin/bash

错误:

当我检查perl -v时,表示找不到命令。

我需要去perl目录 'cd perl-5.22.1'再次运行'make install'然后perl -v工作

但是当我使用docker image构建它时,我希望perl安装正常工作。谁能告诉我这里出了什么问题?

2 个答案:

答案 0 :(得分:1)

确实安装了perl,只是没有添加到路径中。 export PATH = $ PATH:/shared/perl-5.22.1应该这样做 - 当然,你想在Dockerfile中添加一个PATH更新。

答案 1 :(得分:1)

乍一看,我认为当你第二次运行make install时,它会将perl的bin目录添加到PATH env中,但当我比较env之前和之后make install的输出时它显示了相同的PATH变量内容。 您在perl -v运行容器后make install工作的原因是make installperl二进制文件放入/ usr / bin / perl。我不知道它为什么会这样运作,但它就是这样。此外,在图像中存储信息源几乎没用。

无论如何,我同意 @belwood 关于将perl的bin方法添加到PATH环境变量的建议。我只想纠正这条道路:/opt/perl-5.22.1/localperl/bin

您需要在Dockerfile中添加它(基本上我已经重写了您的文件以使其生成更高效的图像),例如:

FROM amazonlinux

RUN mkdir -p /shared/perl-5.22.1
WORKDIR /shared/perl-5.22.1

RUN yum -y install gcc \
  && curl -SL http://www.cpan.org/src/5.0/perl-5.22.1.tar.gz -o perl-5.22.1.tar.gz \
  && tar --strip-components=1 -xzf perl-5.22.1.tar.gz \
  && rm perl-5.22.1.tar.gz \
  && ./Configure -des -Dprefix=/opt/perl-5.22.1/localperl \
  && make -j $(nproc) \
  && make -j $(nproc) test \
  && make install \
  && rm -fr /shared/perl-5.22.1 /tmp/*

ENV PATH="/opt/perl-5.22.1/localperl/bin:$PATH"
WORKDIR /root

CMD ["perl","-de0"]

当您只使用此图片运行容器时,您将立即进入perl的shell。如果您需要bash,请使用docker run -it --rm amazon-perl /bin/bash

查看 Dockerfile参考文档中的Environment replacement部分也是一件好事,只是为了弄清楚工作原理。例如,RUN由于Dockerfile指令而在RUN中包含那么多load行,将在当前图像顶部的新图层中执行命令并提交结果。因此,您将获得许多不必要的图层。