COPY 的使用
首先 COPY 只在 Dockerfile 中存在, 意为将 主机的文件 拷贝到镜像中, 组成镜像的一部分.
区别于
RUN cp是将镜像内文件从一个位置拷贝到镜像内的另一个位置.
这两种使用方法区别在于一个是 主机 vs 镜像, 一个是 镜像 vs 镜像.
VOLUME 的使用
一般情况, 个人经验, 在使用 Dockerfile 的时候是不使用 VOLUME 的, 因为这是将本地的路径映射到镜像中, 一但镜像脱离主机, 则镜像会出现无法引用的问题.
VOLUME 会在容器与主机建立一个映射关系, 使容器消失之后, 这些文件仍然在主机的文件系统中得以保留.
用途比如: 数据库落地数据, 日志文件, 配置文件等等.
什么时候使用 COPY 什么时候使用 VOLUME
前面说到 COPY 会将主机的文件系统复制到 镜像中, 成为镜像的一部分, 并且占用新的内存大小. 而 VOLUME 则是在主机与 容器中建立一个映射关系.
那么, 在 Dockerfile 构建基础镜像的时候, 可以使用 COPY 对文件进行拷贝. 在需要对容器内外文件互通的时候, 可以使用 VOLUME 进行映射.
但是有个需要注意的问题, 一般 VOLUME 映射一般以 volumes 的形式放在 docker-compose.yml 中, 而不是放在 Dockerfile 中.
例如:
项目目录结构
1 | ./Dockerfile |
一般情况, 一个服务由 docker-compose 通过构建 Dockerfile 来创建:
1 | FROM: xxx |
1 | xxx: |