当前位置: 首页 > 编程笔记 >

docker中编译nodejs并使用nginx启动

徐涵亮
2023-03-14
本文向大家介绍docker中编译nodejs并使用nginx启动,包括了docker中编译nodejs并使用nginx启动的使用技巧和注意事项,需要的朋友参考一下

1.编译Nodejs

要进行Nodejs编译,使用docker就变得非常的方便了。

首先从hub.docker.com下载最新的镜像。https://hub.docker.com/_/node/

一般的项目都使用的是node6的镜像。

docker pull node:6-alpine

然后就可以直接使用npm install了。

Alpine是一个非常小的操作系统,在编译,运行docker非常喜欢使用这个系统,因为小,占用磁盘小,下载速度快,部署也快。

节省磁盘空间,节省部署时间。

2.使用docker镜像提前下载库

但是遇到一个问题,就是下载编译的时间太长了。

一般使用nodejs进行开发的时候都有一个package.json 里面具体的项目依赖 包,下载这个依赖需要很长时间。一般使用阿里云的镜像安装。

npm install --registry=https://registry.npm.taobao.org

而在使用docker 进行构建,编译的时候每次都是要下载这些依赖。大大增加了编译的时间。

FROM docker.io/library/node:6-alpine

RUN echo -e "http://mirrors.aliyun.com/alpine/v3.4/main\n\

http://mirrors.aliyun.com/alpine/v3.4/community" > /etc/apk/repositories

COPY package.json /root/

RUN cd /root && npm install --registry=https://registry.npm.taobao.org

可以提前将镜像下载好,然后在编译。做一个基础的镜像。如下:

构建这个基础镜像:

docker build -t my-demo/node6-alpine:latest .

在利用这个镜像进行编译:

#!/bin/sh

mkdir /app && cd /app

git clone xxx.git /app

ln -s /root/.gnupg /app/.gnupg

ln -s /root/.npm /app/.npm

ln -s /root/node_modules /app/node_modules

npm install --registry=https://registry.npm.taobao.org

npm run build

build.sh

然后利用这个基础镜像进行编译,生气了之前的instal 过程。

期中的node_modules是node的模块文件夹。编译后的文件在dist文件夹内。

3.使用nginx启动

首先从https://hub.docker.com/_/nginx/  下载一个镜像:

FROM docker.io/library/nginx:1-alpine

ADD ./dist/* /usr/share/nginx/html/

EXPOSE 80

ENTRYPOINT ["nginx","-g","daemon off;"]

使用nginx镜像启动,直接将node编译后的文件放到html目录

编译docker :

docker build -t my-demo/nginx:latest .

启动docker:

docker run -itd -p 8080:80 my-demo/nginx:latest

然后直接访问 8080 端口就可以了。

总结:

(首发,请勿转载。)

现在前后端的拆分,可以提高开发效率。但是部署起来稍微麻烦,需要前后的分别进行编译,前端编译也需要很长时间。可以提前将依赖库大成一个node基础镜像,然后再进行编译,这样可以大大的提高编译时间。同时运行环境使用一个nginx,将html,css,js等资源文件都放上,也才20多MB。而且在nginx中也可以将后台api在进行配置,将前后端集成进来。同时docker的镜像大大的提高了开发效率,环境的安装问题一下子得到了解决。

 类似资料:
  • 使用Ubuntu编译openwrt时,需要安装很多依赖,然后下载SDK进行配置,每个开发者都需要重复进行这些 步骤。如果做成一个虚拟机镜像,大家下载就能用,就方便多了。使用Docker即可实现。 下载 docker image 先安装docker,把当前用户加入docker组。如果用户名是ubuntu,则在Ubuntu系统里指令如下: curl -sSL https://get.daocloud.

  • 本文向大家介绍Docker使用编写dockerfile启动node.js应用,包括了Docker使用编写dockerfile启动node.js应用的使用技巧和注意事项,需要的朋友参考一下 编写 Dockerfile 以 express 自动创建的目录为例,目录结构如下: 在项目目录下新建 Dockerfile 文件 FROM 指定基础镜像为 node 的 10.15 版本(node 官方版本可在此

  • 本文向大家介绍ubuntu编译nodejs所需的软件并安装,包括了ubuntu编译nodejs所需的软件并安装的使用技巧和注意事项,需要的朋友参考一下 闲了一段时间后,要开始做个项目了! 公司以java为主,因此一直以来的技术栈为springboot,zookeeper,jredis,dubbo,druid.....经典的分布式服务器体系架构。 我花了点时间,统计了一下maven中的依赖包,共计3

  • 主要内容:运行文件的旧方式,新的文件运行方式从 Java 11 开始,现在可以轻松运行单个 Java 文件而无需编译。考虑以下示例 : ApiTester.java 运行文件的旧方式 新的文件运行方式 这项新功能将帮助开发人员快速运行功能,而无需在运行代码之前进行编译。

  • 如何在Intellij中启用部分编译? NetBeans中的相同特性也需要编译,在NetBeans中可以运行类中的main方法,而不需要在同一个项目中使用非dependecies。 编辑: 在执行了CrazyCoder的建议并取得了一些成功之后,现在当我试图运行一个与未编译的文件无关的文件时,我得到了ClassNotFoundException。在修复了非编译文件之后,它运行得很好。

  • 问题内容: 我犯了一个可怕的错误,那就是告诉Netbeans在运行Maven应用程序时始终忽略编译错误。 现在,我要撤消此操作,无论如何我似乎都无法在各种配置面板中找到任何选项。 有人知道可以在哪里更改此选项吗? TIA! 一月 问题答案: 不要打扰-在创建目录diff后找到它: 停止Netbeans,删除下面的文件,然后再次启动Netbeans。 .netbeans / 7.0 / config