Use github private repo deploy key inside build stage in docker for npm install
我的用例是,我有多个使用相同中间件的Express Micro服务,我想为每个中间件创建一个NPM模块格式的不同repo。
每个回购都是私有回购,可以附加部署密钥(可以是不同的密钥或相同的密钥)
所有这些在本地都可以正常工作。但是,当我尝试将它与Docker Compose安装程序一起使用时,它在构建阶段的NPM安装步骤失败。
文档文件
1 2 3 | FROM node:alpine RUN npm install --production CMD npm start |
docker-compose.yml公司
1 2 3 4 5 | services: node-api: build: context: . dockerfile: Dockerfile |
我理解这不起作用,因为我没有在Docker上下文中本地系统上使用的部署密钥。
我四处寻找解决方案,没有一个看起来很容易/不容易破解。
复制key-in和squash(缺点:不确定如何在docker撰写文件中执行此操作)http://blog.cloud66.com/pulling-git-into-a-docker-image-without-leaving-ssh-keys-behind/
复制生成步骤中的键并添加到映像。(缺点:不太安全:()
使用键作为生成参数。(缺点:见2)
dockerise类似于https://www.vaultproject.io/首先运行它,添加密钥并在节点容器中使用它来获取最新的密钥。(缺点:可能有很多工作,可能还有其他问题?)
使用docker secrets和docker stack deploy并将密钥存储在docker secrets中(con:docker stack deploy还不支持docker卷)。请参阅此处https://docs.docker.com/compose/bundles/producing-a-bundle不支持的密钥"volumes")。
我的问题是什么是最安全的自动化解决方案(文件用户的最低手动步骤)?实施时间不那么令人担心。我尽量避免签入任何敏感数据,同时让其他人在本地轻松运行这些数据。
让我们来试验一下这个新特性:Docker多阶段构建
You can selectively copy artifacts from one stage to another, leaving behind everything you don’t want in the final image.
其想法是构建一个临时的基础映像,然后重新开始构建,只从上一个映像中获取所需的内容。它在同一个dockerfile中使用了multiple-from:
1 2 3 4 5 6 7 8 9 10 11 12 | 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会放弃所有你从一开始就没有保存的东西。