我的用例是,我有多个使用相同中间件的 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 上下文中的本地系统上使用的部署密钥。
我四处寻找解决方案,但没有一个看起来很简单/非黑客
复制密钥并压缩(缺点:不知道如何在 docker-compose 文件中执行此操作)http://blog.cloud66.com/pulling-git-into-a-docker-image-without-leaving-ssh-keys-behind/
复制构建步骤中的密钥并添加到图像中。 (缺点:不太安全:( )
使用密钥作为构建参数。 (缺点:参见 2)
Dockerise 类似的东西https://www.vaultproject.io/首先运行它,添加密钥并在节点容器中使用它来获取最新的密钥。 (缺点:可能需要大量工作,也许还有其他问题?)
使用 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(使用前将#替换为@)