Docker and private modules

要将私有npm软件包安装在Docker容器中,您将需要使用Docker的构建时变量.

Background: runtime variables

如果您具有以下Dockerfile:

FROM risingstack/alpine:3.3-v4.3.1-3.0.1

COPY package.json package.json  
RUN npm install

# Add your source files
COPY . .  
CMD npm start  

它将使用RisingStack Alpine Node.JS Docker映像 ,将package.json复制到我们的容器中,安装依赖项,复制源文件并运行package.json指定的start命令.

为了安装私有软件包,您可能认为我们可以在运行npm install之前使用ENV参数添加一行:

ENV NPM_TOKEN=00000000-0000-0000-0000-000000000000

但是,这并不像您期望的那样起作用,因为您希望在运行docker build时进行npm安装,并且在这种情况下,未使用ENV变量,它们仅设置为运行时.

Using build-time variables in Docker

代替运行时变量,必须使用将环境变量传递给Docker的另一种方法,该方法自Docker 1.9起可用: ARG参数 .

Overview

  1. Create and check in a project-specific .npmrc file
  2. Update the Dockerfile
  3. Build the Docker image

Create and check in a project-specific .npmrc file

一个允许您使用--build-arg传递NPM_TOKEN的完整示例,需要在项目中添加.npmrc文件.

将项目特定的.npmrc文件与用于令牌的变量一起使用,以使用npm安全地验证Docker映像.

  1. 在项目的根目录中,创建一个包含以下内容的自定义.npmrc文件:
//registry.npmjs.org/:_authToken=${NPM_TOKEN}
  1. .npmrc.npmrc文件.

Update the Dockerfile

利用该文件的.npmrc比之前的示例多了几行,该示例允许我们使用.npmrc文件和ARG参数:

FROM risingstack/alpine:3.3-v4.3.1-3.0.1

ARG NPM_TOKEN  
COPY .npmrc .npmrc  
COPY package.json package.json  
RUN npm install  
RUN rm -f .npmrc

# Add your source files
COPY . .  
CMD npm start

这将添加预期的ARG NPM_TOKEN ,但还会复制.npmrc文件,并在npm install完成时将其删除.

Build the Docker image

要使用上述Dockerfile和npm身份验证令牌构建映像,可以运行以下命令. 注意. 最后给docker build当前目录作为参数.

docker build --build-arg NPM_TOKEN=${NPM_TOKEN} .

这将使用当前NPM_TOKEN环境变量构建Docker映像,因此您可以以当前登录用户的身份在容器内运行npm install .

注意:即使删除.npmrc文件,该文件也将保留在提交历史记录中. 要彻底清除您的秘密,请确保将其压扁.

< Using private packages in a CI/CD workflow

by  ICOPY.SITE