最近公司有一个外包项目需要在不能连外网的情况下部署node项目到甲方公司内部。直接使用node官网的安装包可以获得node运行环境,但像pm2这种工具要离线装就会比较费劲,所以最终选择了使用docker容器来简化这部分工作。

软件版本:

当前操作系统:macos 10.14.6
docker:19.03.8
系统镜像:centos:7.6.1810

这里使用两种打包方式:

一、直接启动镜像联网安装打包离线镜像

1.命令行进入容器

docker run -it centos:7.6.1810 /bin/bash

2.搭建node运行环境

# 创建项目目录

mkdir -p /data/node

cd /data/node

# 安装node二进制包
curl https://nodejs.org/dist/v10.15.3/node-v10.15.3-linux-x64.tar.gz > node-v10.15.3-linux-x64.tar.gz
tar -zxvf node-v10.15.3-linux-x64.tar.gz
rm -rf node-v10.15.3-linux-x64.tar.gz
mv node-v10.15.3-linux-x64 /usr/local/nodejs
ln -s /usr/local/nodejs/bin/node /usr/local/bin/
ln -s /usr/local/nodejs/bin/npm /usr/local/bin/
# 切换npm源
npm config set registry https://registry.npm.taobao.org --global
npm install -g pm2
# 设置pm2运行路径
echo "export PATH=$PATH:/usr/local/nodejs/bin" >> ~/.bashrc
#设置时区
echo "export TZ=Asia/Shanghai" >> ~/.bashrc
ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
source ~/.bashrc
#退出容器
exit

3.根据容器生成镜像

docker docker commit -m "node_env" -a "lablelan" 容器id node_env
# 可以看到node_env已经打包成镜像
docker images

二、 通过dockerfile生成镜像

1.当前目录下创建Dockerfile文件写入

FROM centos:7.6.1810
RUN mkdir -p /data/node
WORKDIR /data/node
RUN curl https://nodejs.org/dist/v10.15.3/node-v10.15.3-linux-x64.tar.gz > node-v10.15.3-linux-x64.tar.gz
RUN tar -zxvf node-v10.15.3-linux-x64.tar.gz && rm -rf node-v10.15.3-linux-x64.tar.gz
RUN mv node-v10.15.3-linux-x64 /usr/local/nodejs && ln -s /usr/local/nodejs/bin/node /usr/local/bin/ && ln -s /usr/local/nodejs/bin/npm /usr/local/bin/
RUN npm config set registry https://registry.npm.taobao.org --global && npm install -g pm2 && echo "export PATH=$PATH:/usr/local/nodejs/bin" >> ~/.bashrc
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

2.使用dockerfile文件生成镜像

docker build -f ./Dockerfile -t node_env
# 等待docker构建完成后可看见node_env镜像
docker images

导出镜像包

docker save -o node_env.tar node_env

docker:打包node+npm+pm2运行环境镜像的更多相关文章

  1. Centos7安装Docker 基于Dockerfile 搭建httpd运行环境

    Centos7安装Docker 基于Dockerfile 搭建httpd运行环境 docker docker搭建 docker build 本文档完成目标内容如下 使用Docker搭建http服务器一 ...

  2. windows8 使用docker创建第一个nodejs运行环境

    现在公司电脑使用的是windows8操作系统,如果想要运行docker,只能安装Docker ToolBox 关于安装Docker ToolBox,请查看文章<windows8安装docker( ...

  3. Linux下用Docker部署接口安全的运行环境

    背景:MySQL数据库运行在宿主机上(Linux) 需求:Redis.服务.页面分别运行在独立的docker中,并处于同一网络,容器内部重要目录要挂载在物理目录,保证数据安全 方法: 一.设置网络环境 ...

  4. docker之配置TensorFlow的运行环境

    Docker是一种 操作系统层面的虚拟化技术,类似于传统的虚拟机.传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程:而容器内的应用进程直接运行于宿主的内核,容 ...

  5. CentOS 下安装 Node npm pm2

    1.node安装 参考:http://blog.csdn.net/haidaochen/article/details/7257655 下载,你需要在https://nodejs.org/en/dow ...

  6. docker下PHP+Nginx+HHVM运行环境

    Dockerfile 准备开始,我们创建一个 Dockerfile —— Dockerfile 包含如何创建所需镜像的指令. FROM    centos:centos6MAINTAINER Mike ...

  7. 搭建node js的运行环境。

    第一步:首先安装一个NVM,就是一个node的版本管理器. nvm的下载地址::https://github.com/coreybutler/nvm-windows/releases,我选择下载的是n ...

  8. win7搭建node+npm+bower的环境

    原文的地址:https://my.oschina.net/JeeChou/blog/219699 Windows下的NodeJS安装是比较方便的(v0.6.0版本之后,支持windows native ...

  9. 用Docker打包Python运行环境

    虽然Docker作为部署环境打包镜像的工具,和我的科研并没有直接的关系.但我觉得在项目中运用Docker来打包环境依赖也可以大大提高工作效率,于是准备专门学习一下Docker. 1. Docker基础 ...

随机推荐

  1. 「LOJ 6373」NOIP2017 普及组题目大融合

    NOIP2017 普及组题目大融合 每个读者需要有某个后缀的书,可以暴力map,复杂度\(o(9*nlog(n))\),也可以反串建trie树,复杂度\(o(9*n)\). 故可以求出需要的最少的RM ...

  2. [NOI Online #1 提高组]

    A 首先从 \(t = 2\) 的特殊部分分出发. 不难发现这个操作是很不直观的,于是可以考虑对于每个操作 \((u, v)\) 在 \(u, v\) 之间连一条无向边. 显然连通块之间要分开考虑,对 ...

  3. HTML横向二级导航

    图片素材没有发,就一个logo还有一个Nav背景图. 效果 HTML <!DOCTYPE html> <html lang="zh-cn"> <hea ...

  4. 消息队列 - mac上安装RabbitMq (转)

    什么是RabbitMQ? RabbitMQ是由Erlang语言编写的实现了高级消息队列协议(AMQP)的开源消息代理软件(也称为面向消息的中间件).支持WIndows.Linux.MAC OS 操作系 ...

  5. lua语言:string

    转载请注明来源:https://www.cnblogs.com/hookjc/ 字符串库函数string.len(s)          返回字符串s的长度:string.rep(s, n)      ...

  6. drop、delete和truncate三者的区别

    相同点:1.truncate和不带where子句的delete.以及drop都会删除表内的数据.2.drop.truncate都是DDL语句(数据定义语言),执行后会自动提交.不同点:1. trunc ...

  7. UITextFIeld的输入格式问题 ----W.P

    ---恢复内容开始--- 1.银行卡的输入格式,四个数字,一个空格. 2.金额的输入格式限制,不能以"."开头,"."后精确两位. 注意:第三方输入软件(百度, ...

  8. JavaWeb项目根路径问题

    jsp中获取项目根路径: 方法① 最顶部增加代码: <% String path = request.getContextPath(); String basePath = request.ge ...

  9. selenium连接浏览器方式

    支持HtmlUnitDriver无头浏览器自动化   定位元素的方式:是可嵌套的 WebElement cheese = driver.findElement(By.id("cheese&q ...

  10. 人工智能——CNN卷积神经网络项目之猫狗分类

    首先先导入所需要的库 import sys from matplotlib import pyplot from tensorflow.keras.utils import to_categorica ...