#node.js #docker #dockerfile #apk #alpine
Вопрос:
У меня есть файл Docker с базовым изображением «python:alpine»
Мне нужен как python, так и node.js установлен в контейнере, поэтому я начинаю с образа python.
Как установить последнюю версию node.js («Текущие последние функции» node.js) в контейнере без указания версии?
На момент написания этого поста,
RUN apk -v --no-cache --update add nodejs
установит «LTS, рекомендованный для большинства пользователей», а не «текущие последние функции».
Ссылка: https://nodejs.org/en
На момент написания этого поста:
- «LTS рекомендуется для большинства пользователей»: 14.7.6
- «Текущие последние функции»: 16.9.1
В этом примере я хочу установить 16.9.1 вместо 14.7.6, но не указывать конкретную версию в своем файле Dockerfile
Цель этого состоит в том, чтобы снизить обслуживание файла настройки, чтобы он всегда извлекал последнюю «последнюю версию функций», не проверяя node.js сайт для номера версии и жесткого кодирования этого в файл настройки.
Ответ №1:
Видишь это:
«край» — это название, данное текущему дереву разработки Alpine Linux. Он состоит из репозитория APK под названием «edge» и содержит последнюю версию всех доступных пакетов Alpine Linux. Эти пакеты регулярно обновляются.
И, nodejs-current
это имя пакета для последней версии функции, поэтому вы можете использовать следующий:
apk add --no-cache nodejs-current --repository="http://dl-cdn.alpinelinux.org/alpine/edge/community"
Весь пробег:
/ # apk update
fetch https://dl-cdn.alpinelinux.org/alpine/v3.14/main/x86_64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.14/community/x86_64/APKINDEX.tar.gz
v3.14.2-38-g27e4ada230 [https://dl-cdn.alpinelinux.org/alpine/v3.14/main]
v3.14.2-36-g70ff2140e8 [https://dl-cdn.alpinelinux.org/alpine/v3.14/community]
OK: 14938 distinct packages available
/ # apk search --no-cache nodejs-current --repository="http://dl-cdn.alpinelinux.org/alpine/edge/community"
fetch http://dl-cdn.alpinelinux.org/alpine/edge/community/x86_64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.14/main/x86_64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.14/community/x86_64/APKINDEX.tar.gz
nodejs-current-doc-16.9.1-r0
nodejs-current-16.9.1-r0
nodejs-current-dev-16.9.1-r0
/ # apk add --no-cache nodejs-current --repository="http://dl-cdn.alpinelinux.org/alpine/edge/community"
fetch http://dl-cdn.alpinelinux.org/alpine/edge/community/x86_64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.14/main/x86_64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.14/community/x86_64/APKINDEX.tar.gz
(1/8) Installing ca-certificates (20191127-r5)
(2/8) Installing brotli-libs (1.0.9-r5)
(3/8) Installing c-ares (1.17.2-r0)
(4/8) Installing libgcc (10.3.1_git20210424-r2)
(5/8) Installing nghttp2-libs (1.43.0-r0)
(6/8) Installing libstdc (10.3.1_git20210424-r2)
(7/8) Installing libuv (1.41.0-r0)
(8/8) Installing nodejs-current (16.9.1-r0)
Executing busybox-1.33.1-r3.trigger
Executing ca-certificates-20191127-r5.trigger
OK: 74 MiB in 22 packages
/ # node -v
v16.9.1