如何构建基于Alpine的NodeJS镜像
发布日期:2021-06-30 20:13:23 浏览次数:2 分类:技术文章

本文共 2275 字,大约阅读时间需要 7 分钟。

NodeJS的运行需要libc的支持,而基于musl的Alpine镜像显然不能符合这个要求。在前面的文章中也验证过,目前使用社区对于Alpine镜像的glibc的粗暴支持方案,是无法直接安装后解决NodeJS使用问题的,依然会提示env: ‘node’: No such file or directory的问题。而Alpine中自带的nodejs则没有这个问题。

Alpine中NodeJS包的版本查询

nodejs包

在Alpine中为了使用node命令,则需要安装Alpine的nodejs包,支持的相应的nodejs的版本如下所示

在这里插入图片描述

npm包

在Alpine中为了使用npm命令,则需要安装Alpine的npm包,支持的相应的npm的版本如下所示

在这里插入图片描述

构建镜像

Dockerfile

准备如下的Dockerfile即可构建基于Alpine的NodeJS镜像。

liumiaocn:nodejs liumiao$ cat Dockerfile FROM alpine:3.10.2RUN apk add --no-cache npm \    && apk add --no-cache nodejsliumiaocn:nodejs liumiao$

构建镜像

使用上述Dockerfile进行docker build生成nodejs的镜像,执行日志如下所示

liumiaocn:nodejs liumiao$ docker build -t nodejs:latest .Sending build context to Docker daemon  2.048kBStep 1/2 : FROM alpine:3.10.2 ---> 961769676411Step 2/2 : RUN apk add --no-cache npm     && apk add --no-cache nodejs ---> Running in c0c2df8380fbfetch http://dl-cdn.alpinelinux.org/alpine/v3.10/main/x86_64/APKINDEX.tar.gzfetch http://dl-cdn.alpinelinux.org/alpine/v3.10/community/x86_64/APKINDEX.tar.gz(1/8) Installing ca-certificates (20190108-r0)(2/8) Installing c-ares (1.15.0-r0)(3/8) Installing libgcc (8.3.0-r0)(4/8) Installing http-parser (2.9.2-r0)(5/8) Installing libstdc++ (8.3.0-r0)(6/8) Installing libuv (1.29.1-r0)(7/8) Installing nodejs (10.16.3-r0)(8/8) Installing npm (10.16.3-r0)Executing busybox-1.30.1-r2.triggerExecuting ca-certificates-20190108-r0.triggerOK: 59 MiB in 22 packagesfetch http://dl-cdn.alpinelinux.org/alpine/v3.10/main/x86_64/APKINDEX.tar.gzfetch http://dl-cdn.alpinelinux.org/alpine/v3.10/community/x86_64/APKINDEX.tar.gzOK: 59 MiB in 22 packagesRemoving intermediate container c0c2df8380fb ---> e7e0a4a947bdSuccessfully built e7e0a4a947bdSuccessfully tagged nodejs:latestliumiaocn:nodejs liumiao$

执行完成之后发现此镜像大概49.5M左右

liumiaocn:nodejs liumiao$ docker images |grep nodejs |grep latestnodejs                                          latest                          e7e0a4a947bd        Less than a second ago   49.5MBliumiaocn:nodejs liumiao$

版本确认

启动此NodeJS容器并确认版本

liumiaocn:nodejs liumiao$ docker run --rm -it nodejs sh/ # node -vv10.16.3/ # npm -v6.9.0/ #

限制

但是这种方式无法支持nodejs和npm的各种版本,如果开发者对版本没有特定的要求,可以使用这种方式,但是如果有需求,而这个版本又无法通过apk add来进行安装,由于官方的NodeJS并未提供相应的基于musl编译的二进制包,如果又不希望放弃Alpine,仅存的不多的选择就是通过源码进行编译来构建NodeJS镜像了。

参考内容

https://pkgs.alpinelinux.org

转载地址:https://liumiaocn.blog.csdn.net/article/details/102595065 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:从源码构建基于Alpine的NodeJS镜像
下一篇:ng-alain中的husky使用问题与解决

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年05月04日 14时14分17秒