环境
- OS: manjaro 20.0.3
- Docker: 19.03.11-ce
遇到的问题
我使用Nodejs
官方的源码包安装Nodejs
。也就是将官网下载的tar
格式的包解压后,再链接二进制文件的方式。
但是发生了一个问题:我将源码包里边的node
可执行文件链接到/usr/sbin/node
后,执行node -v
,提示command not found
。
原因
几经查找,发现原来是因为Nodejs
官网提供的源码包是使用glibc
库打包的,而Alpine
使用的是musl
库
解决方案
- 使用
Alpine
自带的apk
进行安装:apk add nodejs npm
。 - 使用非官方构建源里边的包,里边有
musl
版本的:https://unofficial-builds.nodejs.org/download/release/ 。虽说是非官方构建源,也是官网上提供的链接。
反思
之前也看到过Alpine
关于编译库的坑,但是没想到这么快就让我遇上了,而且的确容易被command not found
这个提示误导,这使我一度怀疑dash
,$PATH
和ln
。调试过程中,我开始反思:为什么放着好好的debian
不用非要用这个?然后看了下我那个打包完的镜像,就那个1.5G
的镜像,唉~
题外话
最近接手的一个项目用的是传统的人工 + 智能
的方式部署的web
环境。部署过程一言难尽,于是我便有了上docker
的念头。web
应用的包主要包含
1. ruby
2. node
3. rails
4. apache
5. passenger
一开始使用的是基于buster
(buster
基于debian
)的ruby
镜像,打包完的镜像大小有1.5G
,把我吓了一跳。这还是在尽可能的减少分层和删除依赖得到的结果。网上找了下,比较有效的方法也就是用小一点的镜像了。于是便用了Alpine
,最终得到的包的大小为640M
,也算是还能接受吧。