Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何使用NodeJs缩小Docker图像的大小_Node.js_Angular_Docker_Dockerfile - Fatal编程技术网

Node.js 如何使用NodeJs缩小Docker图像的大小

Node.js 如何使用NodeJs缩小Docker图像的大小,node.js,angular,docker,dockerfile,Node.js,Angular,Docker,Dockerfile,我通过AngularCLI创建了新的Angular2应用程序,并在Docker中运行它 首先,我在本地计算机上初始化应用程序: ng new project && cd project && "put my Dockerfile there" && docker build -t my-ui && docker run. 我的Dockerfile FROM node RUN npm install -g angular-cli

我通过AngularCLI创建了新的Angular2应用程序,并在Docker中运行它

首先,我在本地计算机上初始化应用程序:

ng new project && cd project &&  "put my Dockerfile there" && docker build -t my-ui && docker run.
我的Dockerfile

FROM node

RUN npm install -g angular-cli@v1.0.0-beta.24 && npm cache clean && rm -rf ~/.npm

RUN mkdir -p /opt/client-ui/src
WORKDIR /opt/client-ui  

COPY package.json /opt/client-ui/
COPY angular-cli.json /opt/client-ui/
COPY tslint.json /opt/client-ui/

ADD src/ /opt/client-ui/src

RUN npm install
RUN ng build --prod --aot

EXPOSE 4200

ENV PATH="$PATH:/usr/local/bin/"    
CMD ["npm", "start"]
一切正常,问题是图像大小:939MB!!!我试图使用FROM:ubuntu:16.04并在其上安装NodeJs(它可以工作),但我的图像仍然有大约450mb。我知道node:alpine存在,但我无法在其中安装angular cli


如何缩小图像大小?是否需要在Dockerfile中运行“npm安装”和“ng构建”?我希望在本地主机上构建应用程序并将其复制到映像。我试图复制dist dir和package.json等文件,但没有成功(app start失败)。谢谢。

对于生产,您不需要分发带有Node.js、NPM依赖项等的映像。您只需要一个映像,该映像可用于启动数据卷容器,该容器提供已编译的源代码、发布的源代码映射和其他资产,实际上不超过通过NPM使用包重新分发的内容,可以附加到Web服务器的

因此,对于您的CI主机,您可以选择一个
节点:alpine
发行版并复制源并在其中安装依赖项,然后您可以重新使用映像来运行测试生成的容器,直到您最终运行执行生产编译的容器,您可以命名该容器

docker run --name=compile-${RELEASE} ci-${RELEASE} npm run production
在容器内完成源的编译后,运行一个容器,该容器已连接编译容器中的卷,并将源复制到容器上的卷,然后将其推送到上游的Docker:

docker run --name=release-${RELEASE} --volumes-from=compile-${RELEASE} -v /srv/public busybox cp -R /myapp/dist /srv/public
docker commit release-${RELEASE} release-${RELEASE} myapp:${RELEASE}


我很遗憾地通知你,即使基于阿尔卑斯山,它仍然是610MB。可以肯定,这是一个改进,但不能回避angular编译器非常庞大的事实。

从mhart/alpine node:base-6尝试
,它可能会工作。

空间使用从何而来
du-h
使用
docker history
显示图像的所有层,以查找空间的使用位置。