我正在创建我的应用程序的图像,其中涉及不同应用程序的打包。
在完成测试/ npm/ bower install 等之后,我试图将内容从上一个图像复制到一个新图像。但是那个 COPY 看起来非常非常慢,需要超过 3-4 分钟。
COPY --from=0 /data /data
Run Code Online (Sandbox Code Playgroud)
(/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"]
Run Code Online (Sandbox Code Playgroud)
或者,如果有人可以帮助我清理第一阶段(以减小图像大小),以便它不需要使用下一个也很有用的图像。
由于文件数量很大,因此需要时间。如果您可以将数据文件夹压缩为 tar,然后复制并解压,将对您的情况有所帮助。
否则, 如果你可以采取这一步来运行容器,那将会非常快。根据您的要求,您需要复制已在另一个映像中创建的应用程序映像。您可以使用卷共享功能,在 2 个或更多 Docker 容器之间共享卷。
创建第一个容器:
docker run -ti --name=Container -v datavolume:/datavolume ubuntu
Run Code Online (Sandbox Code Playgroud)
第二个容器:
docker run -ti --name=Container2 --volumes-from Container ubuntu
Run Code Online (Sandbox Code Playgroud)
或者您可以使用 -v 选项,因此使用 v 选项创建您的第一个和第二个容器:
docker run -v docker-volume:/data-volume --name centos-latest -it centos
docker run -v docker-volume:/data-volume --name centos-latest1 -it centos
Run Code Online (Sandbox Code Playgroud)
这将创建并共享两个容器中的数据卷相同的卷文件夹。docker-volume是卷名称,data-volume是该容器中将指向docker-volume卷的文件夹名称。同样,您可以与 2 个以上容器共享一个卷。
| 归档时间: |
|
| 查看次数: |
3378 次 |
| 最近记录: |