Я пытаюсь построить минимальный 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
Был бы признателен за помощь.
Поправьте меня, если я ошибаюсь, насколько я понимаю, этого должно быть достаточно копирования двоичных файлов node.js и их зависимостей, чтобы он работал в другой системе.
Нет, вам нужно создать Node и его зависимости для конкретной системы, в которой вы собираетесь его запускать. Перемещение двоичных файлов из Debian в урезанный образ Busybox вряд ли сработает, если вы не переместите вместе с ним половину системных библиотек Debian, и даже тогда, только если все остальное совместимо, например ядро, libc и т. Д.
См. Файлы Docker для Node:
И ищите те, которые основаны на Alpine, так как они будут самыми легкими.