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

2023-11-24

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

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

所有这些在本地都可以正常工作。但是,当我尝试将其与 docker-compose 设置一起使用时,它在构建阶段的 npm 安装步骤中失败。

Dockerfile

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-keys-behind/

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

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

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

  5. 使用 Docker 密钥和 docker stack 部署并将密钥存储在 docker 密钥中(缺点:docker 堆栈部署尚不支持 docker 卷。请参阅此处https://docs.docker.com/compose/bundles/#having-a-bundle不支持的密钥“卷”)

我的问题是什么是最secure可能的自动化解决方案(文件用户的手动步骤最少)?实施时间不太重要。我试图避免检查任何敏感数据,同时让其他人可以轻松地在本地运行它。


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

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

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

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 开始未保存的所有内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐