nodejs docker 开发最好选择yarn 进行包管理而不是npm

npm 与yarn 的区别网上一大堆的文章,我们在构建docker 镜像是应该遵守的有些原则

  • 基础镜像尽量小
  • 对于构建进行缓存处理
  • 构建的docker 的文件层数尽量少
  • 能直接运行的,就别进行重复构建了(比如go)

yarn 在我们进行本地构建的时候可以帮助我们减少很多资源的在重复下载,以及校验,

加速docker 项目的构建

以下为一个简单的例子,具体与npm的比较就不用了,效果太明显了

备注:

此次docker nodejs 镜像使用的是 kkarczmarczyk/node-yarn (下载次数比较高)

nodekjs 的框架使用 hapi

1. 项目初始化

yarn init 

yarn add hapi

package.json  add

"scripts":{

   "run":"node index.js"
}

2. nodejs 简单代码

index.js

const Hapi = require(‘hapi‘);

// Create a server with a host and port
const server = new Hapi.Server();
server.connection({
    host: ‘0.0.0.0‘,
    port: 8009
});

// Add the route
server.route({
    method: ‘GET‘,
    path:‘/hello‘,
    handler: function (request, reply) {

        return reply(‘hello world‘);
    }
});

// Start the server
server.start((err) => {

    if (err) {
        throw err;
    }
    console.log(‘Server running at:‘, server.info.uri);
});

3. docker 配置

Dockerfile

FROM kkarczmarczyk/node-yarn
RUN mkdir -p /home/nodejs/app
WORKDIR /home/nodejs/app
COPY . /home/nodejs/app
RUN yarn
CMD ["yarn","run","run"]

4. 项目结构

5. 构建&&运行

docker build -t demo .
docker run -d -p 8009:8009 demo

6.  构建效果

从上图明显看到每次构建都是走的cache 对于nodejs 包也是,这样可以很快的进行镜像的

构建,明显如直接 npm 的快很多,建议大家在生产环境多使用,高效快速就是王道。

7. 参考资料

https://hub.docker.com/r/kkarczmarczyk/node-yarn/
https://yarnpkg.com/zh-Hans/
https://hapijs.com/
时间: 2024-10-02 07:16:41

nodejs docker 开发最好选择yarn 进行包管理而不是npm的相关文章

在go modules里使用go get进行包管理

上一篇文章里我们介绍了go modules的初步使用,现在我们来更深入的了解一下如何使用go get在module中管理依赖. module下的包管理 首先我们介绍过go mod edit修改go.mod,然而它有两点缺陷: 首先是它的-require必须接受"[email protected]"这种形式,缺一不可,而且不能识别文档规定的master和latest标志. 其次是edit只适合用于修改依赖版本,给package改名,屏蔽特定的package这三个功能,不适用于添加依赖.

Go语言使用Godep进行包管理

一.为什么要包管理 默认Go的第三方包都是放在Gopath的src目录下,而且这些包都没有版本号的概念,这样的可能会出现一些问题. 举个例子:当A同事将开发完程序之后,此时可能引用了一个第三方的包,过了不久之后,B同事接手了该项目,此时如果B同事通过go get 命令获取了包,而且包的版本进行了升级,恰巧这个包又不兼容以前的版本,这就会导致程序编译错误等问题.或者当这个维护的第三方包删除了,那么B同学则不能下载到该包. 由上面的例子就能知道,为什么需要进行包的依赖管理了. go里面进行包依赖管理

使用Docker开发NodeJs APP

英文版原文地址 这是两篇连载文章的第一篇,讲解了如何使用 Docker 替代 Vagrant 开发基于 Express 框架的NodeJs App的部分细节.不过,这次要增加点难度:我们要使用 connect-redis 在 Redis 中实现 session 功能.第二篇文章将基于此继续. The Node App 这个 App 由一个 package.json , server.js 和 .gitignore 文件组成,就这么简简单单: .gitignore : 1 node_modules

Visual Studio Code和Docker开发asp.net core和mysql应用

Visual Studio Code和Docker开发asp.net core和mysql应用 .net猿遇到了小鲸鱼,觉得越来越兴奋.本来.net猿只是在透过家里那田子窗看外面的世界,但是看着海峡对岸的苹果园越来越茂盛,实在不想再去做一只宅猿了.于是,.net猿决定搭上小鲸鱼的渡轮到苹果园去看看. .net猿上了小鲸鱼渡轮就先问了一个问题,苹果园上有能用来编写c#代码的和Visual Studio一样强大的IDE么?这时,天空闪过一道Gamma射线,艾瑞克神说,给你一个 Visual Stud

PHP 应用 Docker 开发大礼包 – Powered by DaoCloud

用 PHP 作为我们「Docker 开发大礼包」开篇是带着一些朝圣的心情的.这是一门堪称「古老」的语言,这也是一门争议最多的语言,这更是一门不断涅槃的语言.「PHP 是最好的语言」这个流传已久的梗,或许正是对我国最有群众基础的编程语言描述里,最经典的注解. 就让我们一起回顾一下 PHP 的发展历程作为此系列文章的开篇.历史是最好的老师,他给每个未来提供启示. 谁创造了 PHP? Rasmus Lerdorf 在 1994 年创造了 PHP,Andi Gutmans 和 Zeev Suraski

如何将自己开发的包打进pybundle

1 将下载的包,缓存在本地目录jjj中: pip bundle project.pybundle -r pip-requires -d jjj 该指令,当jjj目录有包时,它不进行下载而直接使用缓存,如果没有,它将下载,并将包放在jjj下.当你打的包比较多,且网速很慢,导致打包经常超时失败,这个缓存非常有用. 2 不联网,直接用本地缓存包打包: pip bundle project.pybundle -r pip-requires --no-index -f file:///tmp/ jjj 通

开发语言选择事项

开发语言选择考虑项: 团队 成本:主要是时间成本和质量成本.为此还需要考虑人员的培养周期.学习的周期.团队配合的周期.人员流失带来的人力成本 控制:选择了这种语言能不能始终保持控制度 项目特点:根据不同项目需求,选择合适的语言 技术健壮性:包括技术是否安全.文档是否健全.活跃性,例如这种框架社区是否活跃,是否有持续性.

AES128和AES256主要区别和安全程度是多少?他们对于机器的消耗是怎样的?两者性能如何?实际开发如何选择?

高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用.经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准.2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一.    不同于它的前任标准DES,R

Docker开发实践

这篇是计算机类的优质预售推荐<Docker开发实践>. Docker最佳实践图书,系统讲解Docker知识,更有Kubernetes.Shipyard.Machine等高级技术. 编辑推荐 国内最强云加速+云存储"迅雷云"团队倾力打造 全面讲解Docker原理.操作,精选实战案例 详解网络.安全.API.Kubernetes.shipyard.Machine+Swarm+Compose 内容简介 本书详细介绍高级容器引擎Docker的各方面技术,从概念介绍到实战,讨论doc