如何在Dockerfile中将COPY从一个图像加速到另一个图像

问题描述 投票:3回答:1

我正在创建我的应用程序的图像,其中涉及不同应用程序的打包。

在进行测试/ 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"]

或者,如果有人可以帮我清理第一阶段(减少图像大小),那么它也不需要使用下一个有用的图像。

docker dockerfile
1个回答
3
投票

这需要时间,因为文件数量很大。如果您可以将数据文件夹压缩为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个以上容器的卷。

© www.soinside.com 2019 - 2024. All rights reserved.