Запуск Node.js на Docker Busybox

Я пытаюсь создать минимальный образ node.js docker . Я скомпилировал узел в своей системе 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

Буду признателен за помощь.

0
задан 24 March 2017 в 19:21
1 ответ

Поправьте меня, если я ошибаюсь, насколько я понимаю, этого должно быть достаточно копирования двоичных файлов node.js и их зависимостей, чтобы он работал в другой системе.

Нет, вам нужно для создания Node и его зависимостей для конкретной системы, в которой вы собираетесь его запускать. Перемещение двоичных файлов из Debian в урезанный образ Busybox вряд ли сработает, если вы не переместите вместе с ним половину системных библиотек Debian, и даже тогда, только если все остальное совместимо, например ядро, libc и т. Д.

См. Файлы Docker для Node:

И ищите те, которые основаны на Alpine, так как они будут наиболее легкими.

1
ответ дан 4 December 2019 в 16:19

Теги

Похожие вопросы