文档首页> 编译构建 CodeArts Build> 最佳实践> 图形化构建> 使用Node.js构建包制作Docker镜像
更新时间:2023-10-19 GMT+08:00

使用Node.js构建包制作Docker镜像

目标

本文旨在帮助用户了解如何使用软件开发生产线编译构建服务打包Node.js项目及制作构建包的Docker镜像。

前提准备

了解Docker的基本概念、环境安装和基本操作,关于如何在各个操作系统平台安装docker,请参考Docker官方文档

如果是初次使用编译构建服务,请先新建项目,然后开始本示例。

  1. 在本地创建一个用于存放代码的目录“nodesource”并进入该目录。
  2. 在“nodesource”目录新建名称为“package.json”的文件,内容如下:

    {
    "name": "docker_web_app",
    "version": "1.0.0",
    "description": "Node.js on Docker",
    "author": "First Last <first.last@example.com>",
    "main": "server.js",
    "scripts": {
    "start": "node server.js"
    },
    "dependencies": {
    "express": "^4.16.1"
    }
    }

  3. 新建名为“server.js”的文件,内容如下:

    'use strict';
    const express =require('express');
    // Constants
    const PORT=8080;
    const HOST='0.0.0.0';
    // App
    const app =express();
    app.get('/',(req, res)=>{  
    res.send('Hello world\n');
    });
    app.listen(PORT,HOST);
    console.log(`Running on http://${HOST}:${PORT}`);

  4. 本地验证。代码准备好后,可以在本地先编译,然后将项目运行起来,看结果是否正常。

    1. 打开一个命令行,cd到nodesource所在目录,输入“npm install”完成依赖安装,再输入“node server.js”运行项目。

    2. 然后,打开浏览器,在浏览器中输入“本机IP:8080”,如果出现下图结果,则表示服务运行正常。

  5. 在“nodesource”目录下,新建“Dockerfile”文件,内容如下:

    #use the latest LTS (long term support) version 12 of node available from the Docker Hub
    FROM node:12
    # Create app directory
    WORKDIR /usr/src/app
    # Install app dependencies
    # A wildcard is used to ensure both package.json AND package-lock.json are copied
    # where available (npm@6+)
    COPY package*.json ./
    RUN npm install
    # If you are building your code for production
    # RUN npm ci --only=production
    # Bundle app source
    COPY . .
    EXPOSE 8080
    CMD ["node","server.js"]

  6. 新建“.dockerignore”文件,内容如下:

    node_modules
    npm-debug.log

  7. 上传代码至代码托管服务。

    在导航栏选择服务 > 代码托管,参考创建代码仓库创建名为“nodesource”的代码仓库,然后上传代码至代码仓库,代码上传完后,可进入代码仓库查看内容。

打包并制作、推送镜像

  1. 新建构建任务,其中,源码源选择前提准备中创建好的代码仓库“nodesource”,构建模板选择“npm”,并将任务名称命名为“nodesource-build”。
  2. 配置构建步骤。

    1. 配置“Npm构建”,在命令编辑器里,注释掉“npm run build”,输入“zip -r ./nodeserver.zip ./”,用来将代码打包成“nodeserver.zip”。

    2. 配置“上传软件包到软件发布库”,按如下图填写参数。
      • 构建包路径:待上传的软件包路径。
      • 发布版本号:软件包的版本。
      • 包名:软件包名称。

    3. 在“上传软件包到软件发布库”构建步骤后添加“制作镜像并推送到SWR仓库”构建步骤,并按如下图填写参数。

  3. 配置完所有构建步骤,单击“新建并执行”,执行编译构建任务。

    任务执行成功后,从日志里可以查看到新的镜像地址。

查看并验证构建结果

  1. 在导航栏选择制品仓库 > 软件发布库,查看上传的软件包,名称与构建任务名称一致。

  2. 获取镜像下载指令并将镜像设置为公开镜像。

    1. 进入容器镜像服务SWR,单击左侧导航栏“我的镜像”,搜索并单击刚制作好的“nodestudy”镜像。

    2. 进入镜像详情页,单击“下载指令”列的,获取完整的镜像下载指令(docker pull + 镜像地址)。

    3. 选中镜像版本“v1.1.0”,单击右上角的“编辑”,在弹框中选择“公开”,然后单击“确定”。

  3. 验证镜像。

    1. 找一个安装了Docker的主机,在命令行中输入上一步获取的镜像下载指令。

    2. 执行命令“docker run -p 28080:8080 -d 镜像地址”启动镜像。

      其中,“-p 28080:8080”表示把镜像中的8080端口映射到本机的28080端口。

    3. 在浏览器中输入“http://ip:port”,出现如下界面,说明镜像制作成功。

      其中ip为主机IP地址。