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/
 
 
 
 

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

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

    上一篇文章里我们介绍了go modules的初步使用,现在我们来更深入的了解一下如何使用go get在module中管理依赖. module下的包管理 首先我们介绍过go mod edit修改go.m ...

  2. Go语言使用Godep进行包管理

    一.为什么要包管理 默认Go的第三方包都是放在Gopath的src目录下,而且这些包都没有版本号的概念,这样的可能会出现一些问题. 举个例子:当A同事将开发完程序之后,此时可能引用了一个第三方的包,过 ...

  3. 使用glide进行包管理

    glide是golang的一款包管理工具,就像Java下的Maven(当然Maven的定位不只是包管理工具).今天试用了一下,记录一下使用过程和遇到的一些坑. 环境 Windows 7,Goland, ...

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

    Visual Studio Code和Docker开发asp.net core和mysql应用 .net猿遇到了小鲸鱼,觉得越来越兴奋.本来.net猿只是在透过家里那田子窗看外面的世界,但是看着海峡对 ...

  5. vagrant特性——基于docker开发环境(docker和vagrant的结合)-3-boxes和配置

    Docker Boxes Docker provider不需要vagrant box.因此其config.vm.box设置是完全可选的.但是,仍然可以使用并指定一个box来提供默认值.由于一个带着bo ...

  6. FusionInsight大数据开发---MapReduce与YARN应用开发

    MapReduce MapReduce的基本定义及过程 搭建开发环境 代码实例及运行程序 MapReduce开发接口介绍 1. MapReduce的基本定义及过程 MapReduce是面向大数据并行处 ...

  7. Mac结合Docker开发

    Mac结合Docker开发 前几天在看Java并发实战时,在Mac上写了一个示例,结果运行后无法按照书本上运行.主要是有些命令,在Mac和Linux是有区别的,比如top, Mac上是不支持-Hp,意 ...

  8. 企业开发中选择logback而不是log4j的理由

    不知道看到这篇文章的Java工程师有没有考虑过这个问题:为什么在企业开发中会选择logback来记录日志,而不是log4j呢? 如果你以前没有考虑过这个问题,那么现在如果让你考虑一下,你可能觉的会是因 ...

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

    高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES, ...

随机推荐

  1. Your app uses or references the following non-public APIs的解决方案

    之前接了一个旧的项目,代码混乱,年代久远,不得不吐槽一波,好不容易改完需求提交代码,说用到了non-public APIs,搞了好久终于找到地方了,下面是我的解决过程,让大家少走弯路: 下面的被驳回的 ...

  2. java对象的深浅clone

    在Java语言中,数据类型分为值类型(基本数据类型)和引用类型,值类型包括int.double.byte.boolean.char等简单数据类型,引用类型包括类.接口.数组等复杂类型. 浅克隆和深克隆 ...

  3. python学习笔记(mysqldb下载安装及简单操作)

    python支持对mysql的操作 已经安装配置成功python.mysql 之后根据各自电脑配置选择对应系统的MySQL-python 文件是EXE格式.打开下一步即可 下载地址博主分享下: htt ...

  4. PHP使用前的了解

    PHP简介 PHP 是什么? PHP(全称:PHP:Hypertext Preprocessor,即"PHP:超文本预处理器")是一种通用开源脚本语言. PHP 脚本在服务器上执行 ...

  5. DDOS 攻击工具

    DDOS  攻击工具 使用github上的DDOS攻击工具 https://github.com/Ha3MrX/DDos-Attack 将python脚本拷贝到主机,使用 chmod +x ddos- ...

  6. saltstack技术入门与实践

    基本原理 SaltStack 采用`C/S`模式,server端就是salt的master,client端就是minion,minion与master之间通过`ZeroMQ`消息队列通信. minio ...

  7. struts转换器

    struts转换器:在B/S应用中,将字符串请求参数转换为相应的数据类型,是MVC框架提供的功能,而Struts2是很好的MVC框架实现者,理所当然,提供了类型转换机制. 一.类型转换的意义 对于一个 ...

  8. LeetCode OJ:Reverse Linked List (反转链表)

    Reverse a singly linked list. 做II之前应该先来做1的,这个倒是很简单,基本上不用考虑什么,简单的链表反转而已: /** * Definition for singly- ...

  9. Activity传递参数——传递复杂数据(Bunble包)

    一.新建一个空的工程 二.在主界面中添加一个按钮 三.新建一个空的activity,并命名为TheAty 四.修改MainActivity.java中的onCreate函数 protected voi ...

  10. L132

    Major Opioid Maker to Pay for Overdose-Antidote Development A company whose prescription opioid mark ...