如何将软件或其他软件包添加到Docker容器?

Bec*_*cks 1 python selenium containers jenkins docker

我已经从docker hub提取了jenkins容器,如下所示:

docker pull jenkins
Run Code Online (Sandbox Code Playgroud)

容器运行,我可以在中访问Jenkins UI:

http://localhost:8080
Run Code Online (Sandbox Code Playgroud)

我的问题是:

如果我想能够创建一个从github存储库提取的jenkins作业,并且希望从该存储库的测试文件之一运行一些python测试,我该如何安装诸如virtualenvwrapper, pip, pytest, nose, seleniumetc之类的额外软件包?

似乎Docker容器未与本地主机文件系统共享任何引用。

如何在正在运行的容器中安装此类软件包?

谢谢

Deb*_*Ray 5

您将需要在Docker容器构建时安装所有依赖项。

您可以Dockerfile在jenkins库中创建自己的库,然后在其中放置自定义内容。你Dockerfile可以看起来像

FROM jenkins:latest
MAINTAINER Becks

RUN apt-get update && apt-get install -y {space delimited list of package}
Run Code Online (Sandbox Code Playgroud)

然后,您可以执行类似...

docker build -t jenkins-docker --file Dockerfile .
docker run -it -d --name=jenkins-docker jenkins-docker
Run Code Online (Sandbox Code Playgroud)

我可能没有正确编写所有语法,但这基本上是您需要做的。如果您想run加速jenkins 的步骤,请按照Dockerfile 此处现有内容进行操作,并将相关部分添加到dockerfile中,以添加一些RUN运行jenkins的步骤。

遇到了类似的问题,尽管该页面也将docker袜子安装在另一个容器中,从而将一个容器连接到另一个容器,但也遇到了类似的问题。鉴于它是一个外部链接,因此这里是相关的dockerfile,

FROM jenkins:1.596

USER root
RUN apt-get update \
      && apt-get install -y sudo \
      && rm -rf /var/lib/apt/lists/*
RUN echo "jenkins ALL=NOPASSWD: ALL" >> /etc/sudoers

USER jenkins
COPY plugins.txt /usr/share/jenkins/plugins.txt
RUN /usr/local/bin/plugins.sh /usr/share/jenkins/plugins.txt
Run Code Online (Sandbox Code Playgroud)

这就是您如何旋转它的方法。

docker build -t myjenk .
...
Successfully built 471fc0d22bff
$ docker run -d -v /var/run/docker.sock:/var/run/docker.sock \
                -v $(which docker):/usr/bin/docker -p 8080:8080 myjenk
Run Code Online (Sandbox Code Playgroud)

我强烈建议您浏览该帖子。非常棒

  • 虽然 Debosmit'answer 是一种干净的方法,但您也可以用一种 hacky 的方式来完成。启动 jenkins,然后在 `docker exec -it container_name_or_id bash` 中连接并执行相同的 `apt-get update && apt-get install -y {space delimited list of package}` 然后与容器断开连接,然后 `docker commit container_name_or_id myuser :myjenkins` 请参阅文档 https://docs.docker.com/engine/reference/commandline/commit/ 现在你里面有一个 shell,所以你可以 (3认同)
  • 您实际上不应该使用docker commit,因为dockerfiles对于维护和文档化更好。特别是对于像在容器中安装软件包这样简单的事情。 (3认同)