如何构建基于Alpine的NodeJS镜像

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

Alpine中NodeJS包的版本查询

nodejs包

在Alpine中为了使用node命令,则需要安装Alpine的nodejs包,支持的相应的nodejs的版本如下所示
如何构建基于Alpine的NodeJS镜像_第1张图片

npm包

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

如何构建基于Alpine的NodeJS镜像_第2张图片

构建镜像

Dockerfile

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

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

构建镜像

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

liumiaocn:nodejs liumiao$ docker build -t nodejs:latest .
Sending build context to Docker daemon  2.048kB
Step 1/2 : FROM alpine:3.10.2
 ---> 961769676411
Step 2/2 : RUN apk add --no-cache npm     && apk add --no-cache nodejs
 ---> Running in c0c2df8380fb
fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/main/x86_64/APKINDEX.tar.gz
fetch 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.trigger
Executing ca-certificates-20190108-r0.trigger
OK: 59 MiB in 22 packages
fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/community/x86_64/APKINDEX.tar.gz
OK: 59 MiB in 22 packages
Removing intermediate container c0c2df8380fb
 ---> e7e0a4a947bd
Successfully built e7e0a4a947bd
Successfully tagged nodejs:latest
liumiaocn:nodejs liumiao$

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

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

版本确认

启动此NodeJS容器并确认版本

liumiaocn:nodejs liumiao$ docker run --rm -it nodejs sh
/ # node -v
v10.16.3
/ # npm -v
6.9.0
/ # 

限制

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

参考内容

https://pkgs.alpinelinux.org

你可能感兴趣的:(#,Angular快速入门)