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: |