将node.js 应用构建成docker镜像

本文内容:将node.js 应用构建成dokcer镜像, 并上传到阿里云

创建 Node.js 应用

1.首先,创建一个 package.json 文件,描述你应用程序以及需要的依赖:

{
  "name": "pack_docker",
  "version": "1.0.0",
  "description": "Node.js on Docker",
  "author": "weiweiyi",
  "main": "pack.js",
  
  "dependencies": {
    "dingtalk-robot-sender": "^1.2.0",
    "compressing": "^1.7.0",
    "node-ssh": "13.0.1"
  }
}

2.运行 npm install

这会自动生成一个 package-lock.json 文件,将其拷贝进入接下来的 Docker 镜像中。

3.将你需要运行或者存放的node.js文件放在本目录下

创建 Dockerfile 文件

创建一个空文件,命名为 Dockerfile:

touch Dockerfile

编写该文件

# 指定node 版本
FROM node:14.16.0

# 工作目录
WORKDIR /root/

# 复制文件
COPY package*.json ./

# 安装依赖
RUN npm install

# 拷贝应用程序
COPY pack.js .

# 也可以选择,直接运行该js文件
# CMD [ "node", "pack.js" ]

创建.dockerignore文件 和 .gitignore文件

避免 node_modules 被拷贝到docker image中。

/node_modules

创建docker image

创建命令:

docker build . -t <your username>/pack-docker

查看创建情况
docker images

image.png

将本目录下文件推送到github仓库

image.png

推送镜像到阿里云

参考老师的文章: https://segmentfault.com/a/11...

首先登录阿里云的容器镜像服务,创建仓库
image.png



代码源选择刚才上传的github仓库
image.png

添加构建规则
image.png

image.png

点击立即构建,等待构建成功
image.png

至此,我们就可以通过该镜像仓库的公网地址使用该镜像

image.png

使用

例如在.gitlab-ci.yml中使用

angular-pack:
  tags:
    - docker
  stage: pack-web
  # 使用镜像
  image: registry.cn-hangzhou.aliyuncs.com/weiweiyi/pack-docker:1.0
  before_script:
   - cd web 
  variables:
   HOST: "xxxx"
   DINGTOKEN: "xxx"
   # ssh连接用户名密码
   PASSWORD: "xxx"
   USERNAME: "xxx"
   # http端口
   PORT: "5080"
   # ssh端口
   SSHPORT: "5022"
   
  script:
    - env
    - npm install -dd
    - npm run build
    - export
    - node /root/pack.js
  rules:
    - if: $CI_COMMIT_TAG != null

622 声望
104 粉丝
0 条评论
推荐阅读
为什么要有Java 内存模型,是什么, 解决了什么
Java内存模型(Java Memory Model,JMM) 定义了 java 运行时如何与硬件内存进行交互,比如规定了一个线程如何看到其他内存修改后共享变量的值。一些高级特性也建立在JMM的基础上,比如volatile 关键字。

weiweiyi3阅读 487

反编译微信小程序获取小程序前端源码wxapkg
研究反编译的原因就是我自己辛苦了半个月写的小程序,忘记备份放在桌面,心急体验Win11系统 重装系统忘记备份源码,后悔莫及。 后来网上找了反编译的教程,反编译已经上线了的小程序 于是自己尝试了一下,真的可...

TANKING13阅读 10k评论 7

封面图
PDF 预览和下载你是怎么实现的?
在开发过程中要求对 PDF 类型的发票提供 预览 和 下载 功能,PDF 类型文件的来源又包括 H5 移动端 和 PC 端,而针对这两个不同端的处理会有些许不同,下文会有所提及。

熊的猫7阅读 3.9k评论 1

封面图
Just for fun——C#应用和Nodejs通讯
进程通信常见的进程通讯的方法有:管道(Pipe)命名管道信号消息队列其他管道是比较简单基础的技术了,所以看看它。Node IPC支持Node官方文档中Net模块写着:IPC SupportThe net module supports IPC with named ...

pigLoveRabbit3阅读 6.8k评论 2

「过程详解」async await综合题
如果你之前跟我一样一直对async await熟悉又陌生的话(熟悉是可能每天都在用,陌生是针对一些组合题又丈二和尚摸不着头脑),不妨可以边看边练,总结规律,相信会逐渐清晰并有所得。本文对每个案例都详细描述了代...

wuwhs5阅读 1.3k

封面图
突破难关:Docker镜像和容器的区别以及构建的最佳实践
Docker 可谓是开启了容器化技术的新时代,现在无论大中小公司基本上都对容器化技术有不同程度的尝试,或是已经进行了大量容器化的改造。伴随着 Kubernetes 和 Cloud Native 等技术和理念的普及,也大大增加了业务...

张晋涛4阅读 1.1k

封面图
cligetter|一款快速生成 Cli工具 开发模版的脚手架
近年来 cli工具 的开发,对于不断发展的前端生态来说,似乎也逐渐成为工程师们的必备技能。其实开发一个 cli工具 并不难,但对于前端的同学可能存在一点认知上的小门槛,特别是对于刚开始接触 cli 脚手架工具开发...

木木剑光3阅读 660

622 声望
104 粉丝
宣传栏