在docker容器中安装包

在docker容器中安装包,docker,jenkins,Docker,Jenkins,我想知道如何在docker容器中安装软件包。我的用例是,我有一个jenkins服务器,它有几种代理,包括docker代理模板,如果不需要虚拟机环境,它会导致为每个构建创建并使用docker容器,默认情况下没有标签。问题是,如果可能的话,如何在这样的docker容器中进行构建之前以安全的方式安装依赖项?我不认为为一个不同的项目分别设置多个图像是一个好主意,每次在某个项目需要依赖项时修改一个图像可能会使该图像膨胀,以防我需要其中的许多图像。但通常,出于安全原因,容器内部没有根访问权限。如何应对这种情

我想知道如何在docker容器中安装软件包。我的用例是,我有一个jenkins服务器,它有几种代理,包括docker代理模板,如果不需要虚拟机环境,它会导致为每个构建创建并使用docker容器,默认情况下没有标签。问题是,如果可能的话,如何在这样的docker容器中进行构建之前以安全的方式安装依赖项?我不认为为一个不同的项目分别设置多个图像是一个好主意,每次在某个项目需要依赖项时修改一个图像可能会使该图像膨胀,以防我需要其中的许多图像。但通常,出于安全原因,容器内部没有根访问权限。如何应对这种情况/可能的选项是什么?

Jenkins允许您指定将在其中创建代理的docker映像

例如:

agent {
    docker {
        image 'maven:3-alpine'
        label 'my-defined-label'
        args  '-v /tmp:/tmp'
    }
}
如果在dockerhub上找不到包含必要依赖项的公共映像,则需要创建自定义映像。方法是创建Dockerfile并在其中安装Dependencies

FROM base-image
RUN apt-get update && apt-get install ...
然后,您可以使用此Dockerfile来构建代理,或者构建一个映像并将其放在jenkins主机上,然后使用上面的管道语法来配置代理

您可以直接使用Dockerfile:

agent { dockerfile { dir 'path-to-Dockerfile' } } 

老实说,我不确定这些脚本的安全性。可以编写并提交jenkinsfile的人可能会使用管道脚本损坏主节点,或者使用运行docker的节点。我说得对吗?我使用的不是docker pipeline,而是一个cloud docker插件,默认情况下,每个构建都在自己的容器中运行,无需明确请求,但我只有一个图像,除非我制作了多个模板。如果我理解正确,但不确定我是否按照我目前没有学习pipeline的方式执行,则可以编写管道脚本,这些脚本可能没有太多限制,所以理论上,我可以用脚本片段运行的节点做所有事情,对吗?所以我可以运行docker容器,但我不能完全将它们用作安全边界。如果我说的是错的,我会用管道来达到这个目的。