精华内容
下载资源
问答
  • 在前一篇文章中介绍了直接使用Alpine的npmjs与npm的package的方式来构建NodeJS镜像,但是这种方法的局限性目前在于Alpine的包所支持的版本有限,如果所需版本不能通过apk add来添加,使用源码进行编译来生成所需的...

    在前一篇文章中介绍了直接使用Alpine的npmjs与npm的package的方式来构建NodeJS镜像,但是这种方法的局限性目前在于Alpine的包所支持的版本有限,如果所需版本不能通过apk add来添加,使用源码进行编译来生成所需的NodeJS包则成为解决方法之一。这篇文章将通过在具体的版本来介绍如何在Alpine中进行源码的编译来生成NodeJS的二进制包。

    源码编译方式说明
    和基于m4的源码编译方式类似,还是configure && make && make install三板斧即可完成。事前保证编译器等准备条件,安装成功基本应该不会碰到问题。在本文中直接使用Alpine镜像启动一个容器来说明源码安装的整个过程

    步骤1: 启动Alpine容器

    liumiaocn:~ liumiao$ docker run -it --rm alpine:3.10.2 sh
    / #
    

    步骤2: 事前准备

    需要安装的包包括:python gcc g++ make linux-headers

    • 安装python
    ~ # apk add python
    fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/main/x86_64/APKINDEX.tar.gz
    fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/community/x86_64/APKINDEX.tar.gz
    (1/10) Installing libbz2 (1.0.6-r7)
    (2/10) Installing expat (2.2.8-r0)
    (3/10) Installing libffi (3.2.1-r6)
    (4/10) Installing gdbm (1.13-r1)
    (5/10) Installing ncurses-terminfo-base (6.1_p20190518-r0)
    (6/10) Installing ncurses-terminfo (6.1_p20190518-r0)
    (7/10) Installing ncurses-libs (6.1_p20190518-r0)
    (8/10) Installing readline (8.0.0-r0)
    (9/10) Installing sqlite-libs (3.28.0-r1)
    (10/10) Installing python2 (2.7.16-r1)
    Executing busybox-1.30.1-r2.trigger
    OK: 139 MiB in 34 packages
    ~ #
    

    注:如果python不安装的话,可能会提示

    ./configure: exec: line 4: python: not found
    

    查看解压后的代码,从congigure可以看到如下代码,所以python也是需要的

    /tmp/node-v8.6.0 # grep python configure 
    # Locate python2 interpreter and re-execute the script.  Note that the
    which python2.7 >/dev/null && exec python2.7 "$0" "$@"
    which python2 >/dev/null && exec python2 "$0" "$@"
    exec python "$0" "$@"
      python2 = which('python2') or which('python2.6') or which('python2.7')
      if python2:
        sys.stderr.write('  ' + python2 + ' ' + ' '.join(sys.argv))
    /tmp/node-v8.6.0 # 
    
    • 安装gcc编译器和g++编译器
    ~ # apk add --no-cache gcc
    fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/main/x86_64/APKINDEX.tar.gz
    fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/community/x86_64/APKINDEX.tar.gz
    (1/10) Installing binutils (2.32-r0)
    (2/10) Installing gmp (6.1.2-r1)
    (3/10) Installing isl (0.18-r0)
    (4/10) Installing libgomp (8.3.0-r0)
    (5/10) Installing libatomic (8.3.0-r0)
    (6/10) Installing libgcc (8.3.0-r0)
    (7/10) Installing mpfr3 (3.1.5-r1)
    (8/10) Installing mpc1 (1.1.0-r0)
    (9/10) Installing libstdc++ (8.3.0-r0)
    (10/10) Installing gcc (8.3.0-r0)
    Executing busybox-1.30.1-r2.trigger
    OK: 92 MiB in 24 packages
    ~ # 
    
    • 安装make
    ~ # apk add --no-cache make
    fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/main/x86_64/APKINDEX.tar.gz
    fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/community/x86_64/APKINDEX.tar.gz
    (1/1) Installing make (4.2.1-r2)
    Executing busybox-1.30.1-r2.trigger
    OK: 205 MiB in 38 packages
    ~ #
    
    • 安装linux-headers
    ~ # apk add linux-headers
    (1/1) Installing linux-headers (4.19.36-r0)
    OK: 212 MiB in 39 packages
    ~ #
    

    如果不安装,在make的过程中,可能会提示如下类似的linux/xxx.h找不到的错误信息。还不是是因为Alpine删的太干净了,不然咋么才能这么小呢。

    ../deps/v8/src/base/cpu.cc:11:10: fatal error: linux/auxvec.h: No such file or directory
     #include <linux/auxvec.h>  // AT_HWCAP
    

    步骤2: 下载nodejs源码

    下载地址:wget https://nodejs.org/dist/版本号/node-v版本号.tar.gz

    以8.6.0为例,源码下载方式为:

    wget https://nodejs.org/dist/8.6.0/node-v8.6.0.tar.gz

    可以使用任何方式获取源码,然后上传至Alpine容器之中。

    /tmp # ls
    node-v8.6.0.tar.gz
    /tmp #
    

    步骤3: 解压源码

    使用tar命令对源码进行解压

    /tmp # tar xvf node-v8.6.0.tar.gz 
    ...省略
    node-v8.6.0/benchmark/arrays/zero-int.js
    /tmp #
    /tmp # ls
    node-v8.6.0         node-v8.6.0.tar.gz
    /tmp # cd node-v8.6.0/
    /tmp/node-v8.6.0 # ls
    AUTHORS                COLLABORATOR_GUIDE.md  README.md              deps                   src
    BSDmakefile            CONTRIBUTING.md        android-configure      doc                    test
    BUILDING.md            GOVERNANCE.md          benchmark              lib                    tools
    CHANGELOG.md           LICENSE                common.gypi            node.gyp               vcbuild.bat
    CODE_OF_CONDUCT.md     Makefile               configure              node.gypi
    /tmp/node-v8.6.0 # 
    

    步骤4: configure

    执行命令:./configure

    配置后续生成的二进制文件的目录,也可以直接设定到/usr/local等PATH搜索目录下,其实修改的是node_prefix的值。执行日志如下所示:

    /tmp/node-v8.6.0 # ./configure
    creating ./icu_config.gypi
    * Using ICU in deps/icu-small
    creating ./icu_config.gypi
    { 'target_defaults': { 'cflags': [],
                           'default_configuration': 'Release',
                           'defines': [],
                           'include_dirs': [],
                           'libraries': []},
      'variables': { 'asan': 0,
                     'coverage': 'false',
                     'debug_devtools': 'node',
                     'debug_http2': 'false',
                     'debug_nghttp2': 'false',
                     'force_dynamic_crt': 0,
                     'gas_version': '2.32',
                     'host_arch': 'x64',
                     'icu_data_file': 'icudt59l.dat',
                     'icu_data_in': '../../deps/icu-small/source/data/in/icudt59l.dat',
                     'icu_endianness': 'l',
                     'icu_gyp_path': 'tools/icu/icu-generic.gyp',
                     'icu_locales': 'en,root',
                     'icu_path': 'deps/icu-small',
                     'icu_small': 'true',
                     'icu_ver_major': '59',
                     'node_byteorder': 'little',
                     'node_enable_d8': 'false',
                     'node_enable_v8_vtunejit': 'false',
                     'node_install_npm': 'true',
                     'node_module_version': 57,
                     'node_no_browser_globals': 'false',
                     'node_prefix': '/usr/local',
                     'node_release_urlbase': '',
                     'node_shared': 'false',
                     'node_shared_cares': 'false',
                     'node_shared_http_parser': 'false',
                     'node_shared_libuv': 'false',
                     'node_shared_openssl': 'false',
                     'node_shared_zlib': 'false',
                     'node_tag': '',
                     'node_use_bundled_v8': 'true',
                     'node_use_dtrace': 'false',
                     'node_use_etw': 'false',
                     'node_use_lttng': 'false',
                     'node_use_openssl': 'true',
                     'node_use_perfctr': 'false',
                     'node_use_v8_platform': 'true',
                     'node_without_node_options': 'false',
                     'openssl_fips': '',
                     'openssl_no_asm': 0,
                     'shlib_suffix': 'so.57',
                     'target_arch': 'x64',
                     'uv_parent_path': '/deps/uv/',
                     'uv_use_dtrace': 'false',
                     'v8_enable_gdbjit': 0,
                     'v8_enable_i18n_support': 1,
                     'v8_enable_inspector': 1,
                     'v8_no_strict_aliasing': 1,
                     'v8_optimized_debug': 0,
                     'v8_promise_internal_field_count': 1,
                     'v8_random_seed': 0,
                     'v8_trace_maps': 0,
                     'v8_use_snapshot': 'true',
                     'want_separate_host_toolset': 0}}
    creating ./config.gypi
    creating ./config.mk
    /tmp/node-v8.6.0 #
    

    步骤5: make && make install

    执行命令:make && make install

    执行日志如下所示:

    /tmp/node-v8.6.0 # make && make install
    make -C out BUILDTYPE=Release V=1
    ...省略
    installing /usr/local/include/node/openssl/archs/VC-WIN32/opensslconf.h
    installing /usr/local/include/node/openssl/opensslconf.h
    installing /usr/local/include/node/zconf.h
    installing /usr/local/include/node/zlib.h
    /tmp/node-v8.6.0 # 
    

    注:make的时间较长,需要耐心等待。而make install主要是个copy动作,所以会很快。应为make速度很慢,如果CPU有多个,或者多核的情况下,可以考虑使用-j参数指定多个CPU加快速度。而至于CPU的个数几个合适,则可以考虑使用getconf来获取,getconf _NPROCESSORS_ONLN即可获取相应的个数。设定小于或等于此值以加快构建的速度,如果就一个CPU的话可以忽略。

    步骤6: 结果确认

    /tmp/node-v8.6.0 # which npm
    /usr/local/bin/npm
    /tmp/node-v8.6.0 # which node
    /usr/local/bin/node
    /tmp/node-v8.6.0 # node -v
    v8.6.0
    /tmp/node-v8.6.0 # npm -v
    5.3.0
    /tmp/node-v8.6.0 # 
    
    展开全文
  • nodejs镜像制作

    2020-09-20 17:55:22
    文章目录一、安装Docker二、在镜像仓库上创建一个命名空间二、创建alpine和npm两个镜像二、上传镜像版本1、拉取alpine镜像2、登录腾讯云的镜像仓库3、上传alpine镜像4、构建npm镜像 # 前言 制作镜像的前提是:要有...


    前言

    制作镜像的前提是:要有一台云服务器和用于存放镜像的仓库。本人使用的是腾讯云服务器,镜像仓库直接使用腾讯云提供的容器服务即可,点我即可查看腾讯云提供的容器服务。


    一、安装Docker

    由于我的云服务器的操作系统是ubuntu,安装docker一行命令即可搞定

    sudo apt-get install docker.io
    

    二、在镜像仓库上创建一个命名空间

    我创建的命名空间是sampsonliu,这个命名空间表示以后所有的镜像上传到这个目录下面
    在这里插入图片描述


    三、创建alpine和npm两个镜像

    我创建了alpine和npm两个镜像,alpine镜像作为构建nodejs的基础镜像在这里插入图片描述在这里插入图片描述


    四、上传镜像版本

    1、通过Docker Hub拉取alpine镜像

    在这里插入图片描述
    在这里插入图片描述


    2、登录腾讯云的镜像仓库

    在这里插入图片描述
    在这里插入图片描述


    3、上传alpine镜像

    sudo docker tag a24bb4013296 ccr.ccs.tencentyun.com/sampsonliu/alpine:0.0.1
    在这里插入图片描述
    sudo docker push ccr.ccs.tencentyun.com/sampsonliu/alpine:0.0.1
    在这里插入图片描述


    4、构建npm镜像

    我把构建npm镜像的操作写成了脚本,代码地址是:https://github.com/sampsonliu/base-images/tree/master/nodejs,共有三个核心文件:version、alpine.dockerfile、build.sh

    version

    VERSION=0.0.1
    

    alpine.dockerfile

    
    FROM ccr.ccs.tencentyun.com/sampsonliu/alpine:0.0.1
    
    RUN set -x \
        && apk -U --no-cache add --update nodejs npm \
        && rm -rf /var/cache/apk/*
        && npm -v \
        && node -v
    

    build.sh

    #/bin/bash
    
    set -x
    image_group="ccr.ccs.tencentyun.com/sampsonliu"
    base_dir=$(cd "$(dirname "$0")";pwd)
    
    version=`sed '/^VERSION=/!d;s/.*=//' ${base_dir}/version`
    
    echo "local version is ${version}"
    
    image_name="npm"
    dockerfile="${base_dir}/alpine.dockerfile"
    echo "build ${image_name}:${version}" \
    && docker build --pull -t ${image_group}/${image_name}:${version} -f ${dockerfile} ${base_dir} \
    && docker push ${image_group}/${image_name}:${version} \
    && echo "build ${image_name} finish"
    

    构建过程如下:
    在这里插入图片描述
    查看仓库npm镜像版本:
    在这里插入图片描述


    展开全文
  • NodeJS镜像配置

    千次阅读 2017-06-26 22:14:47
    更改 nods 的npm 镜像为 淘宝镜像

    NodeJS镜像配置

    nodejs和npm的仓库托管在S3上,在国内访问十分困难,这里可以用淘宝的镜像站npm.taobao.org代替。以下提供几种不同的使用淘宝NodeJS镜像的方法:

    nvm使用淘宝镜像

    很多人会使用nvm管理本地nodejs版本。而nvm支持通过环境变量指向nodejs和iojs的下载地址。

    配置这两个环境变量即可:

    Linux/Unix系统使用以下命令设置这个环境变量:

    export NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node
    export NVM_IOJS_ORG_MIRROR=https://npm.taobao.org/mirrors/iojs

    永久生效请自行添加到shell的启动脚本配置中(bash可以添加到~/.bashrc,zsh可以添加到~/.zshrc)。

    之后nvm ls-remotenvm install命令将会使用淘宝的镜像了。

    npm使用淘宝镜像安装包

    npm使用registry这个属性指定仓库,因此配置这个属性即可。修改npm配置属性的几种方法详见官方文档

    这里只贴出修改registry的方法,以下三种任意一种即可:

    • 修改~/.npmrc文件(没有就自行新建一个),写入registry = https://registry.npm.taobao.org
    • 使用命令npm config set registry https://registry.npm.taobao.org(效果和上面等效)
    • 添加环境变量NPM_CONFIG_REGISTRY=https://registry.npm.taobao.org

    同样的方法,将disturl这个配置同样指向: https://npm.taobao.org/dist, 任选一种方案:

    npm config set disturl https://npm.taobao.org/dist

    node-sass/phantomjs/electron使用淘宝镜像站

    有些软件包安装的时候会下载已预编译好的二进制格式,比如node-sass/phantomjs/electron等等,这几个软件包大多数都将编译好的成品托管在S3上。

    比较幸运的是这些软件包都有办法指定下载的路径,有兴趣的可以自己去读这些包的安装代码,会去从环境变量或npmrc配置中读取下载的路径,这里只贴出npmrc方案。同样也适用于npm环境变量配置方案:

    npm config set electron_mirror https://npm.taobao.org/mirrors/electron/
    npm config set sass_binary_site https://npm.taobao.org/mirrors/node-sass/
    npm config set phantomjs_cdnurl https://npm.taobao.org/mirrors/phantomjs/

    然后试试npm install phantomjs-prebuilt,就会看到从淘宝镜像站下载phantomjs了。

    博文源地址:http://www.jianshu.com/p/253cb9003411



    展开全文
  • 如何构建基于Alpine的NodeJS镜像

    千次阅读 2019-10-16 21:17:34
    NodeJS的运行需要libc的支持,而基于musl的Alpine镜像显然不能符合这个要求。在前面的文章中也验证过,目前使用社区对于Alpine镜像的glibc的粗暴支持方案,是无法直接安装后解决NodeJS使用问题的,依然会提示env: ...

    NodeJS的运行需要libc的支持,而基于musl的Alpine镜像显然不能符合这个要求。在前面的文章中也验证过,目前使用社区对于Alpine镜像的glibc的粗暴支持方案,是无法直接安装后解决NodeJS使用问题的,依然会提示env: ‘node’: No such file or directory的问题。而Alpine中自带的nodejs则没有这个问题。

    Alpine中NodeJS包的版本查询

    nodejs包

    在Alpine中为了使用node命令,则需要安装Alpine的nodejs包,支持的相应的nodejs的版本如下所示
    在这里插入图片描述

    npm包

    在Alpine中为了使用npm命令,则需要安装Alpine的npm包,支持的相应的npm的版本如下所示

    在这里插入图片描述

    构建镜像

    Dockerfile

    准备如下的Dockerfile即可构建基于Alpine的NodeJS镜像。

    liumiaocn:nodejs liumiao$ cat Dockerfile 
    FROM alpine:3.10.2
    RUN apk add --no-cache npm \
        && apk add --no-cache nodejs
    liumiaocn:nodejs liumiao$
    

    构建镜像

    使用上述Dockerfile进行docker build生成nodejs的镜像,执行日志如下所示

    liumiaocn:nodejs liumiao$ docker build -t nodejs:latest .
    Sending build context to Docker daemon  2.048kB
    Step 1/2 : FROM alpine:3.10.2
     ---> 961769676411
    Step 2/2 : RUN apk add --no-cache npm     && apk add --no-cache nodejs
     ---> Running in c0c2df8380fb
    fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/main/x86_64/APKINDEX.tar.gz
    fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/community/x86_64/APKINDEX.tar.gz
    (1/8) Installing ca-certificates (20190108-r0)
    (2/8) Installing c-ares (1.15.0-r0)
    (3/8) Installing libgcc (8.3.0-r0)
    (4/8) Installing http-parser (2.9.2-r0)
    (5/8) Installing libstdc++ (8.3.0-r0)
    (6/8) Installing libuv (1.29.1-r0)
    (7/8) Installing nodejs (10.16.3-r0)
    (8/8) Installing npm (10.16.3-r0)
    Executing busybox-1.30.1-r2.trigger
    Executing ca-certificates-20190108-r0.trigger
    OK: 59 MiB in 22 packages
    fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/main/x86_64/APKINDEX.tar.gz
    fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/community/x86_64/APKINDEX.tar.gz
    OK: 59 MiB in 22 packages
    Removing intermediate container c0c2df8380fb
     ---> e7e0a4a947bd
    Successfully built e7e0a4a947bd
    Successfully tagged nodejs:latest
    liumiaocn:nodejs liumiao$
    

    执行完成之后发现此镜像大概49.5M左右

    liumiaocn:nodejs liumiao$ docker images |grep nodejs |grep latest
    nodejs                                          latest                          e7e0a4a947bd        Less than a second ago   49.5MB
    liumiaocn:nodejs liumiao$
    

    版本确认

    启动此NodeJS容器并确认版本

    liumiaocn:nodejs liumiao$ docker run --rm -it nodejs sh
    / # node -v
    v10.16.3
    / # npm -v
    6.9.0
    / # 
    

    限制

    但是这种方式无法支持nodejs和npm的各种版本,如果开发者对版本没有特定的要求,可以使用这种方式,但是如果有需求,而这个版本又无法通过apk add来进行安装,由于官方的NodeJS并未提供相应的基于musl编译的二进制包,如果又不希望放弃Alpine,仅存的不多的选择就是通过源码进行编译来构建NodeJS镜像了。

    参考内容

    https://pkgs.alpinelinux.org

    展开全文
  • nodejs镜像配置

    2017-05-01 14:59:59
    1.通过config命令,永久配置 npm config set registry https://registry.npm.taobao.org 等同于 ~/.npmrc   registry = ... 2、 npm ...淘宝镜像地址http://npm.taobao.org/
  • 指定版本 查看Dockerfile cat Dockerfile FROM alpine:3.10.2 ENV NODE_VERSION 14.5.0 MAINTAINER heyuze ... curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_V
  • docker 部署 nodejs镜像 完整流程

    千次阅读 2020-07-17 18:35:03
    docker 就是一个本地的轻量型虚拟机, 镜像就相当与别人已经装好的系统,以及部分应用,你可以再往里边加,那么就是容器,你如果想吧你自己的分享给别人,那么就又是一个新的镜像。 2.了解基本的linux 命令 基本的...
  • 通过源码分析nodejs原理 官网 知乎:Node.js源码分析 为什么要读Node.js源码? Node.js的底层原理 《Node.js源码解析1.0.0带标签版》
  • SkyAPM Node.js SkyAPM Node.js is the Node.js instrumentation agent, which is compatible with Apache SkyWalking backend and others compatible agents/SDKs. Documents Document in English ...
  • nodejs项目添加Dockerfile文件 第1种 FROM node:alpine RUN mkdir -p /home/www/express WORKDIR /home/www/express COPY . /home/www/express RUN npm install EXPOSE 3000 ENTRYPOINT ["npm", "run"] CMD ["start...
  • 阿里云nodejs镜像---学习

    千次阅读 2019-07-31 09:25:46
    小白学习linux 参考 1. 前端全栈学习视频 2.csdn参考(1) 连接操作 基本可以跟着视频做,使用SSH连接阿里云时 1.要注意自己的SSH端口22是否开启, ...SSH输入的的ip是控制台显示的ip ...使用passwd root...
  • 测试脚本需要在nodejs环境中运行,脚本有server.js、package.json,主要依赖包为web3(当然还是其它的)。为方便测试,较好的解决方案是利用docker搭建环境。本文在ubuntu 16.04上进行实验。 二、尝试 docker上已经...
  • 实际示例: ...053bcb1a8595 nodejs02 "/bin/sh -c 'npm i..." 7 seconds ago Up 5 seconds 0.0.0.0:7000->7000/tcp keen_panini   转载于:https://www.cnblogs.com/weifeng1463/p/10104599.html
  • 我选择的是轻量服务器,然后应用镜像可以先随便选一个,反正可以重装。一开始选择了应用镜像为wordpress,window下远程登录服务器可以使用putty软件,阿里控制台也可以。(1)Linux小白的简单记录,如有错误,请多...
  • 下载 Xshell 6 和 Xftp 6 ... 登录成功 激活 nvm echo "....> /etc/profile source /etc/profile ...好的,下面就创建个nodejs服务试试: (1)创建一个文件夹: mkdir test mkdir(make directory)这个命令是用于...
  • 持续构建:NodeJS的Alpine镜像

    千次阅读 2019-10-17 22:07:53
    Alpine镜像目前并不能通过npm add来安装所有的npm和nodejs的版本,所以在easypack的Alping镜像中使用两种方式来进行NodeJS镜像的生成,Alpine中已经打包的直接使用,Alpine中没有的包,则通过源码编译的方式来予以...
  • nodejs中国镜像

    2019-10-02 02:52:30
    nodejs中国镜像 npm set registry https://registry.npm.taobao.org # 注册模块镜像 npm set disturl https://npm.taobao.org/dist # node-gyp 编译依赖的 nod...
  • nodejs设置镜像

    2021-01-31 16:42:02
    nodejs设置镜像源 进入用户目录,创建 .npmrc 文件 输入内容 prefix=D:\ProgramFiles\nodejs\node_global cache=D:\ProgramFiles\nodejs\node_cache registry=https://registry.npm.taobao.org 备注: 第一行表示...
  • nodejs项目镜像制作

    2019-09-05 22:27:26
    npm+pm2的基础镜像制作就不多说了。 主要是nodejs项目在启动的时候需要下载一些依赖包。所以需要执行 npm i ,...FROM 172.10.10.56/base/nodejs:v10.4.1 #此为已经制作好的nodejs基础镜像。 ADD ./dy_circle_page...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,254
精华内容 9,701
关键字:

nodejs镜像