当前位置: 首页 > 面试题库 >

在docker的构建阶段内使用github私有仓库部署密钥进行npm安装

姚建树
2023-03-14
问题内容

我的用例是,我有多个使用相同中间件的快速微服务,并且我想为每个中间件创建一个npm模块格式的不同存储库。

每个存储库都是私有存储库,可以附加一个部署密钥(可以是不同的密钥,也可以是相同的密钥)

所有这些在本地都可以。但是,当我尝试在docker-compose安装程序中使用它时,它在构建阶段的npm install步骤中失败。

Docker文件

FROM node:alpine
RUN npm install --production
CMD npm start

docker-compose.yml

services:
   node-api:
        build:
            context: .
            dockerfile: Dockerfile

我知道这是行不通的,因为我没有在Docker上下文中在本地系统上使用的部署密钥。

我到处寻找解决方案,但似乎没有一个很容易/很不客气

  1. 复制密钥并压扁(缺点:不确定我如何在docker-compose文件中执行此操作)http://blog.cloud66.com/pulling-git-into-a-docker-image-without-leaving-ssh-背后的钥匙/

  2. 在构建步骤中复制密钥并添加到图像。(缺点:不是很安全:()

  3. 使用密钥作为构建参数。(缺点:请参阅2)

  4. 首先运行Dockerise之类的https://www.vaultproject.io/之类的东西,添加密钥并在节点容器中使用它来获取最新密钥。(缺点:可能很多工作,也许还有其他问题?)

  5. 使用Docker机密和Docker堆栈部署并将密钥存储在Docker机密中(CON:Docker堆栈部署尚不支持Docker卷。请参见此处https://docs.docker.com/compose/bundles/#production-a-bundle 不支持的键“音量”)

我的问题是,最 安全的
自动化解决方案是什么(文件用户的最小手动步骤)?实施时间无关紧要。我试图避免检入任何敏感数据,同时使其他人可以轻松地在本地运行此数据。


问题答案:

让我们尝试一下这个新功能:Docker多阶段构建

您可以有选择地将工件从一个阶段复制到另一个阶段,从而在最终图像中留下不需要的所有内容。

这个想法是构建一个临时的基础映像,然后仅从上一个映像中获取您想要的内容,然后再次开始构建。它在 同一个 Dockerfile中使用多个FROM :

FROM node as base-node-modules
COPY your_secret_key /some/path
COPY package.json /somewhere
RUN npm install <Wich use your key>

FROM node #yes again!
...
...
COPY --from=base-node-modules /somewhere/node_modules /some/place/node_modules
...
... # the rest of your Dockerfile
...

Docker将丢弃您从第一个FROM中未保存的所有内容。



 类似资料:
  • 所有这些在本地都能正常工作。然而,当我试图在docker-compose设置中使用它时,它在构建阶段的npm安装步骤中失败了。 DockerFile Docker-compose.yml Dockerise像https://www.vaultproject.io/这样的东西,首先运行它,添加键并在节点容器中使用它来获得最新的键。(缺点:可能有很多工作,可能还有其他问题?) 使用Docker sec

  • 本文向大家介绍Docker私有仓库Registry部署的实现,包括了Docker私有仓库Registry部署的实现的使用技巧和注意事项,需要的朋友参考一下 随着docker使用的镜像越来越多,就需要有一个保存镜像的地方,这就是仓库。目前常用的两种仓库:公共仓库和私有仓库。最方便的就是使用公共仓库上传和下载,下载公共仓库的镜像是不需要注册的,但是上传时,是需要注册的。 私有仓库最常用的就是Regis

  • 本文档介绍使用 docker-compose 部署 harbor 私有仓库的步骤,你也可以使用 docker 官方的 registry 镜像部署私有仓库(部署 Docker Registry)。 使用的变量 本文档用到的变量定义如下: $ export NODE_IP=10.64.3.7 # 当前部署 harbor 的节点 IP $ 下载文件 从 docker compose 发布页面下载最新的

  • 问题内容: 如何在中指定多阶段构建? 对于每个变体(例如dev,prod …),我都有一个包含2个docker文件的多阶段构建: 开发人员:+ 或产品:+ 文件(所有变体通用): 档案: 档案: 没有docker-compose,我可以构建为: 根据compose-file doc,我可以指定要构建的Dockerfile。 但是,如何在其中指定2个Dockerfile (用于多阶段构建)? 问题答

  • 错误------------------------------------------------- npm安装失败,代码为%1 npm错误!代码为npm错误!syscall spawn git npm错误!路径git npm错误!errno ENOENT npm err!执行时发生错误:npm错误!Enent未定义的ls-remote-h-t ssh:/git@github.com/priva

  • 使用Chart便于封装和管理kubernetes中的应用,因此当企业内部的应用多了以后,互相依赖、部署环境复杂之后,原先的直接使用yaml文件的管理方式已经不再适应生产的需要,因此我们有必要构建自己的chart仓库。本文中我们将使用 GitHub Pages 来构建我们自己的 chart 仓库。 目的 我们需要构建一个GitHub pages存储所有chart的压缩文件,最好还要有一个前端来展示和