我的用例是我有多个使用相同中间件的快速微服务,我想为每个中间件创建一个npm模块格式的不同repo.
每个仓库都是私人仓库,可以附加部署密钥(可以是不同的密钥或相同)
所有这些都可以在本地运行.但是当我尝试在我的docker-compose设置中使用它时,它在构建阶段的npm安装步骤失败.
Dockerfile
FROM node:alpine
RUN npm install --production
CMD npm start
Run Code Online (Sandbox Code Playgroud)
泊坞窗,compose.yml
services:
node-api:
build:
context: .
dockerfile: Dockerfile
Run Code Online (Sandbox Code Playgroud)
我知道这不起作用,因为我没有在Docker上下文中使用我的本地系统上的部署密钥.
我四处寻找解决方案,似乎没有一个非常容易/非hacky
复制密钥并压缩(缺点:不确定我是如何在docker-compose文件中执行此操作)http://blog.cloud66.com/pulling-git-into-a-docker-image-without-leaving-ssh-键隐藏/
在构建步骤中复制键并添加到图像.(缺点:不太安全:()
使用密钥作为构建参数.(缺点:见2)
像https://www.vaultproject.io/这样的Dockerise 首先运行它,添加密钥并在节点容器中使用它来获取最新的密钥.(缺点:可能很多工作,也许还有其他问题?)
使用Docker机密和docker堆栈部署并将密钥存储在docker机密中(CON:docker stack deploy还不支持docker卷.请参阅https://docs.docker.com/compose/bundles/#producing-a-bundle 不支持的密钥'卷')
我的问题是什么是最安全的自动化解决方案(文件用户的最小手动步骤)?实施时间不太重要.我试图避免检入任何敏感数据,同时让其他人可以轻松地在本地运行.
Rob*_*ert 10
让我们试验这个新功能: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
...
Run Code Online (Sandbox Code Playgroud)
Docker将丢弃您从第一个FROM中保存的所有内容.
| 归档时间: |
|
| 查看次数: |
1651 次 |
| 最近记录: |