为什么不在 docker-compose 中使用卷而不是复制?

wat*_*902 12 docker reactjs docker-compose

我经常将 React 应用程序制作为 SSR。这时候我用的是docker容器。

\n

我写了以下内容Dockerfile

\n
# pull base image\n\xe3\x83\xbb\n\xe3\x83\xbb\n\xe3\x83\xbb\nCOPY package.json ./\nCOPY package-lock.json ./\n\nRUN npm install\n\nCOPY . ./\nCMD ["npm", "start"]\n
Run Code Online (Sandbox Code Playgroud)\n

但是,我突然想到我可以使用volumes prop而不是copy propdocker-compose中。如下docker-compose.yml文件:

\n
volumes:\n- ./:/usr/src/app\n
Run Code Online (Sandbox Code Playgroud)\n

copy props使用而不是有什么优点volumes props

\n

小智 15

Dockerfile 中的 COPY 实际上将文件复制到给定路径。想象一下这是在冰上雕刻的。就像复制所有内容一样,除非重新构建映像,否则无法从外部修改文件。卷实际上是为主机创建一个安装点。因此,如果您正在进行需要更改代码的开发,并且使用 COPY,则每次您希望将更改放入容器中时都必须重新构建映像,而使用卷时,您不必重建镜像图像更改将被传输到容器。

在开发过程中或者如果您有任何想要持久化的东西(例如数据库等),请使用卷。如果您没有对数据库进行卷挂载,则每当您重新启动容器时,数据都会丢失。

当您准备好发布应用程序并且确定不再修改源代码时,请使用 COPY。

如需进一步阅读,请查看: Docker ADD vs COPY vs VOLUME

我希望这回答了你的问题。