Docker Build:基于alpine 3.7 编译Node 10.2.0最小镜像
发布于 6 年前 作者 hd19861028 3325 次浏览 来自 分享

动机

最近看到node.js已经发布到10.2,然而alpine中迟迟没有提供10.2版本的node.js,截止当前时间,alpine 3.7中最新node.js版本为8.11.2,索性花了点时间折腾一个。

最终上传到阿里容器云之后的效果 1.png

编译完成之后大约106m大小。

先启动一个alpine:3.7容器

docker run -dit --name alpine alpine:3.7

docker exec -it alpine sh

执行了上面2行shell脚本之后,就开启并进入了一个alpine 3.7容器环境,然后可以准备编译环境了

安装必备环境

apk --update add linux-headers
apk --update add python
apk --update add g++
apk --update add make

准备下载源代码

cd /root/
wget https://npm.taobao.org/mirrors/node/v10.2.0/node-v10.2.0.tar.gz
tar xvf node-v10.2.0.tar.gz
cd node-v10.2.0

开始编译

./configure && make

接下来是漫长的等待,当出现如下图的时候,编译成功

2.png

提取需要的文件

  1. node --> ./out/Release
  2. npm --> ./deps/npm

现在需要将容器中的文件拿出来,可以在容器外面使用docker cp来实现 docker cp <containerId>:/file/path/within/container /host/path/target

例如:

docker cp alpine:/root/node-v10.2.0/out/Release/node /home/xxxx/node

编译前的准备工作

将所有用到的文件跟Dockerfile文件放在同一个层级,如下图所示

3.png

接下来编写Dockerfile文件

Dockerfile

光有node执行程序其实还不够,还需要安装一些依赖库,具体的在dockerfile文件中体现,Dockerfile文件内容如下所示

FROM alpine:3.7

COPY ./node-10.2.0/node /usr/bin/
COPY ./node-10.2.0/npm /root/npm
COPY ./run /root/
COPY ./init /root/

RUN apk --update add git && \
    apk --update add curl && \
    apk --update add c-ares && \
    apk --update add ca-certificates && \
    apk --update add http-parser && \
    apk --update add libcrypto1.0 && \
    apk --update add libgcc && \
    apk --update add libssl1.0 && \
    apk --update add libstdc++ && \
    apk --update add libuv && \
    apk --update add musl && \
    apk --update add zlib 

RUN cd /root &&\
	mkdir /usr/lib/node_modules &&\
	mv npm /usr/lib/node_modules/ &&\
	ln -s /usr/lib/node_modules/npm/bin/npx-cli.js /usr/bin/npx &&\
	ln -s /usr/lib/node_modules/npm/bin/npm-cli.js /usr/bin/npm

RUN cd /root &&\
    chmod +x run &&\
    sh init

CMD /bin/sh

开始编译镜像

docker build -t node_alpine:10.2.0 -f Dockerfile-alpine-3.7 .

完成

回到顶部