我正在尝试构建一个最小node.js
docker
映像。我已经node
在我的Debian
系统上编译了,它安装/运行良好。如果我错了,请纠正我,据我所知,复制二进制文件及其依赖项应该足够了,node.js
因此它应该可以在其他系统上运行。
目前我已经编写了以下脚本:
#! /bin/bash
# Build Node as the first step in '/opt/node'.
# Then use this script to install Node to the
# custom directory '/opt/node_tmp' and package
# it to *.tar.gz archive.
set -e
BLD_PATH='/opt/node'
TMP_PATH='/opt/node_tmp'
mkdir -p "${TMP_PATH}"
pushd "${BLD_PATH}"
command python tools/install.py install '' "${TMP_PATH}"
popd
VERSION=$("${TMP_PATH}/bin/node" --version)
# Package Node
tar -Pczf "node_${VERSION}.tar.gz" -C "${TMP_PATH}" .
DEPS=$(ldd "${TMP_PATH}/bin/node" | awk '{for(x=1;x<=NR;x++){if($x~"/"){print $x}}}')
# Package Node dependencies
tar -Pvczf "node_${VERSION}_depends.tar.gz" ${DEPS}
du -sh "node_${VERSION}.tar.gz"
du -sh "node_${VERSION}_depends.tar.gz"
echo "About to delete '${TMP_PATH}', continue?"
select yn in "Yes" "No"; do
case $yn in
([Yy]*)
rm -vrf "${TMP_PATH}"
break
;;
(*) break ;;
esac
done
还有以下内容Dockerfile
:
FROM busybox:latest
MAINTAINER narunask
ARG img="Node"
ARG version="v5.12.0"
## Install Node
ADD node_${version}.tar.gz /usr/local/
ADD node_${version}_depends.tar.gz /
我的Docker
会话如下所示:
/ # echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
/ # ls -l /usr/local/bin
total 18864
-rwxr-xr-x 1 root root 19313296 Mar 22 15:18 node
lrwxrwxrwx 1 root root 38 Mar 24 16:35 npm -> ../lib/node_modules/npm/bin/npm-cli.js
/ # /usr/local/bin/node --version
/bin/sh: /usr/local/bin/node: not found
/ # node --version
/bin/sh: node: not found
希望得到一些帮助。
答案1
如果我错了,请纠正我,根据我的理解,复制 node.js 二进制文件及其依赖项就足够了,因此它应该可以在其他系统上运行。
不,您需要为要在其上运行 Node 的特定系统构建 Node 及其依赖项。将二进制文件从 Debian 移动到精简的 Busybox 映像不太可能成功,除非您将一半的 Debian 系统库一起移动,而且即使这样,也只有其他所有内容(如内核、libc 等)都兼容时才行。
查看 Node 的 Docker 文件:
寻找基于 Alpine 的版本,因为它们是最轻量的。