如何挑选node docker镜像
如何挑选node docker镜像
在使用Jenkins构建前端项目的时候遇到一点问题: node的版本问题。
由于可能编译的项目历史不同,所依赖的node版本也各有千秋,直接把所有项目都升级到最新的也不合理。所以必须针对不同的项目使用不同node构建环境。
想过nvm,但nvm是系统级别的环境变量切换,会导致同时运行的其他job也会使用nvm更改后的node版本。nvm只适合个人开发使用。
想过下载。最初见到公司的仓库里会有node.gradle脚本,主要用来下载当前项目的node,然后直接用自己下载的node来构建。用起来还行,但脚本维护是一个问题,升级是一个问题,下载也是一个问题。
最终选择用docker来构建。docker可以随意挑选node镜像,可以缓存。我们可以基于官方的镜像,添加一些适合自己的依赖,比如缓存一些公共的module。
docker hub里有多个node tag,选择哪个好呢。
google了一下,大概得出的结论是: alpine足矣。但我最终没有选择alpine, 后面说原因。
Node Docker tag
先来看看node官方的docker镜像有哪些版本。
node:<version>
基于Debian,官方默认镜像。当你不确定你需要什么的时候选择这个就对了。这个被设计成可以丢弃的镜像,也就是可以用作构建源码使用。体积挺大。
node:<version>-slim
基于Debian, 删除了很多默认公共的软件包,只有node运行的最小环境。除非你有空间限制,否则推荐使用默认镜像。
node:<version>-alpine
基于alpine, 比Debian小的多。如果想要最小的镜像,可以选择这个做为base。需要注意的是,alpine使用musl代替glibc。一些c环境的软件可能不兼容。但大部分没问题。
选择
按照版本推荐。对比我们的需求,作为构建环境的化,应该选择默认镜像。
来对比下所谓的镜像体积:
node 12.6.0-buster-slim e6e2b19326d7 13 hours ago 161MB
node 12.6.0-buster b6a436219112 13 hours ago 875MB
node 12.6.0-alpine a9a8b83644f7 3 weeks ago 78.8MB
在这之前先来了解下debian的发行版
Debian 10(buster) — 当前的稳定版(stable)
Debian 9(stretch) — 旧的稳定版(oldstable)
Debian 8(jessie) — 更旧的稳定版(oldoldstable)
Debian 7(wheezy) — 被淘汰的稳定版
最新的node镜像就是基于Debian 10 buster构建的。
image的体积上, alpine几乎比默认镜像小10倍。即便缩减后的slim,也少一半。
再来看image体积重要不重要。大的image下载需要花时间,需要占用磁盘空间。思考一下,官方镜像近1g,这个磁盘空间还是有的。至于下载时间,docker分层缓存机制可以使得我们只要下载一次即可。也是可以接受。
在使用镜像的时候,docker对于共享的分层是不会复制两份的,也就是共享一份,不会增大磁盘空间。详细介绍见理解docker镜像分层
关注下运行时的内存占用
sudo docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
c0affeebef3f gracious_williamson 0.00% 964KiB / 15.54GiB 0.01% 8.23kB / 0B 0B / 0B 1
c7a52376ac30 suspicious_goldstine 0.00% 2.047MiB / 15.54GiB 0.01% 9.57kB / 0B 4.13MB / 0B 1
39ae2195606d unruffled_elgamal 0.00% 1.387MiB / 15.54GiB 0.01% 12.2kB / 0B 0B / 0B 1
差别还是有的,但在可以接受的范围内。
最重要的是,不同tag的docker镜像运行时可以满足需求吗。
针对这三种镜像,分别对vue-element-admin执行了npm install. 结果基于debian的镜像12.6.0-buster-slim和12.6.0-buster都ok,但12.6.0-alpine 报错了
所以呢,针对我当前作为构建环境的需求,选择12.6.0-buster,也没啥。
至于nodejs运行时的server,没有实验,感觉12.6.0-buster-slim挺好。
如何挑选node docker镜像的更多相关文章
- docker制作node程序镜像:
准备: 需要5个文件 新建一个docker文件夹 1 .ignore git忽略文件用的 2 pakage.json 安装NODE程序的 也可以直接拷贝进 docker文件加 3 node环境 lin ...
- node官方docker镜像运行bower 提示 permission denied 解决方法
在使用node官方docker镜像部署node应用时,应用需要npm的scripts中运行bower install 来安装前端包,但是用docker 构建时失败,提示 permission dein ...
- 使用 Docker 部署 Node 应用 - 镜像文件尺寸的优化
前面 使用 Docker 部署 Node 应用 一文中完成了镜像的创建和运行,不过生成的镜像还有些粗糙,需要进一步优化. 镜像的优化 通过 docker images 看到简单的一个 node 服务端 ...
- Docker & ASP.NET Core (2):定制Docker镜像
上一篇文章:把代码连接到容器 Dockerfile 在Docker的世界里,我们可以通过一个叫Dockerfile的文件来创建Docker镜像,随后可以运行容器. Dockerfile就是一个文本文件 ...
- Docker镜像仓库清理的探索之路
用友云开发者中心是基于Docker容器进行微服务架构应用的落地与管理.相信各位同学在使用的过程中,会发现随着Docker镜像的增多,占用磁盘空间也约来越多.这时我们需要清理私有镜像仓库中不需要的镜像. ...
- 构建自定义docker镜像,上传至docker hub
docker 优势 (外部参考) Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后 发布到任何流行的Linux机器上,便可以实现虚拟化.Docker改变了虚拟化的方 式,使 ...
- 使用Jenkins pipeline流水线构建docker镜像和发布
新建一个pipeline job 选择Pipeline任务,然后进入配置页面. 对于Pipeline, Definition选择 "Pipeline script from SCM" ...
- doris 0.9.0版本docker镜像制作与使用
1. 安装docker 详情请参见本人博客 2. 编译doris 详情请参见doris官网文档 3. 在编译好的doris output文件夹下编写两个Dockerfile 3.1 Dockerfi ...
- Maven Docker镜像使用技巧
摘要: Maven是目前最流行的Java项目管理工具之一,提供了强大的包依赖管理和应用构建功能.本文以Maven为例介绍了Docker在应用构建中的一些常见技巧. Maven是目前最流行的Java项目 ...
随机推荐
- Linux运维工程师成长路线及应实现的目标
作为一名运维工程师,需要学习的东西非常多,在学习的过程中也没有任何捷径可言,必须一步一个脚印地学习.积累才能把个人技能提升到相应的高度.根据目前流行的发行版及国际流行的Linux认证,红帽认证和LPI ...
- Md2All:好用的markdown文件转换工具,文章迁移微信公众号的利器
目录 简介 使用体验 极速上手 更多功能 总结 简介 markdown以简单的语法和强大的功能,征服了无数技术创作者,几乎主流的技术博客网站都开始支持markdown语言撰写博客.但是微信公众号的文章 ...
- Liferay6.1 配置友好的URL映射
说明:以下内容和官方文档相差不大,如果您英文较好,建议直接去读官方文档,地址是:https://dev.liferay.com/develop/tutorials/-/knowledge_base/6 ...
- 利用Maven, 搭建最简单的SpringMVC框架
本文介绍使用maven搭建SpringMVC最简单的框架程序过程,适合初学者上手. 文章下载
- python算法与数据结构-双向链表(40)
一.双向链表的介绍 一种更复杂的链表是“双向链表”或“双面链表”.每个节点有两个链接:一个指向前一个节点,当此节点为第一个节点时,指向空值:而另一个指向下一个节点,当此节点为最后一个节点时,指向空值. ...
- Error: Cannot find module '@babel/runtime/core-js/object/keys'(npm start报错)
1.问题描述: 在npm start启动react项目的时候,会出现Cannot find module '@babel/runtime/core-js/object/keys'的报错: 打开:项目根 ...
- 解决kali linux 2016.2实体机安装后root用户没有声音
Kali Linux系统默认状态下,root用户是无法使用声卡的,也就没有声音.启用的方法如下:(1)在终端执行命令:systemctl --user enable pulseaudio (2)在/e ...
- 修改npm默认安装路径
npm config ls npm config set prefix D:\ag\npm
- request - cookie操作(二)
from urllib import request,parsefrom http.cookiejar import CookieJarheaders = { "User-Agent&quo ...
- Codeforces Round #567 (Div. 2)A
A. Chunga-Changa 题目链接:http://codeforces.com/contest/1181/problem/A 题目 Soon after the Chunga-Changa i ...