有两种略有不同的配置。Dockerfile 中的第一个具有 COPY 复制整个项目文件夹,然后在 docker-compose 中执行以下操作:
services:
app:
build:
context: .
dockerfile: Dockerfile
volumes:
- /etc/passwd:/etc/passwd:ro
- /etc/group:/etc/group:ro
- .:/app:cached
- home-dir:/home/user:cached
ports:
- '4001:8080'
depends_on:
- postgres
networks:
- app-network
也就是说,您可以看到 :ro 和 :cached。这与我们不复制 dockerfile 并且只在 docker-compose 中写入路径(例如 - home-dir:/home/user)有什么不同?
图层
当您将 COPY 写入 DockerFile 时,您假设正在创建一个包含文件的层,该层已经属于您将“上升”容器的映像。那些。如果你启动容器,在那里进行更改(顺便说一下,更改是在最后一层,称为容器层),然后当你
docker-compose down
再次启动它时,更改自然会消失,因为 容器层与容器一起被移除。您开处方时的方法
volumes
是完全不同的故事。您将文件和文件夹“绑定”到容器层,并且您可以对它们进行双向更改。那些。你在外面改变的东西 - 在容器内改变了同样的东西。更改了容器内的一些文件夹 - 更改了外部。好吧,当然,在重新创建容器后,所有更改都会保存。实际上,我故意犯了一些错误,因为既有bind又有volumes ,但是,我试图简单地传达这个想法。我相信从文档中它会变得更清楚。