我正在创建我的应用程序的图像,其中涉及不同应用程序的打包。
在进行测试/ npm / bower install等之后,我试图将上一张图像中的内容复制到一个新的图像。但是COPY似乎非常慢,需要3-4分钟。
COPY --from=0 /data /data
(/ data文件夹的大小约为800MB,数千个文件)
任何人都可以建议一个更好的替代或一些想法来优化这个:
这是我的dockerfile:
FROM node:10-alpine
RUN apk add python git \
&& npm install -g bower
ENV CLIENT_DIR /data/current/client
ENV SERVER_DIR /data/current/server
ENV EXTRA_DIR /data/current/extra
ADD src/client $CLIENT_DIR
ADD src/server $SERVER_DIR
WORKDIR $SERVER_DIR
RUN npm install
RUN npm install --only=dev
RUN npm run build
WORKDIR $CLIENT_DIR
RUN bower --allow-root install
FROM node:10-alpine
COPY --from=0 /data /data # This step is very very slow.
EXPOSE 80
WORKDIR /data/current/server/src
CMD ["npm","run","start:staging"]
或者,如果有人可以帮我清理第一阶段(减少图像大小),那么它也不需要使用下一个有用的图像。
这需要时间,因为文件数量很大。如果您可以将数据文件夹压缩为tar,那么复制和提取将对您的情况有所帮助。
否则,如果你可以采取这一步骤来运行容器,它将非常快。根据您的要求,您需要复制已在另一个图像中创建的应用程序的图像。您可以使用将在2个或更多docker容器之间共享卷的卷共享功能。
创建第一个容器:
docker run -ti --name=Container -v datavolume:/datavolume ubuntu
第二个容器:
docker run -ti --name=Container2 --volumes-from Container ubuntu
或者您可以使用-v选项,因此使用v选项创建第1和第2个容器:
docker run -v docker-volume:/data-volume --name centos-latest -it centos
docker run -v docker-volume:/data-volume --name centos-latest1 -it centos
这将在两个容器中创建和共享相同的卷文件夹,即数据卷。 docker-volume是卷名称,data-volume是该容器中将指向docker-volume卷的文件夹名称。您可以共享具有2个以上容器的卷。