对docker数据持久化的理解

背景

项目需要读取本地的一个文件,采用的方式是挂载本地目录作为volume。但是在将这个项目部署到远端服务器时,项目image可以直接拉取,而项目所需文件的迁移就成了问题

解决方案

  1. 创建一个专门用于COPY数据的image,起名为data-image:1.0
  2. 接着就可以远程访问服务器,创建docker-compose.yml文件,通过挂载volume的方式实现数据共享
  3. 到此为止就可以拉取镜像、启动服务了
1
2
3
4
# Dockerfile
FROM alpine

COPY ./data /usr/src/data
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# docker-compose.yml
version: '3'

services:
project:
image: project-image
volumes:
- project-data:/usr/src/data

data-container:
image: data-image:1.0
volumes:
- project-data:/usr/src/data

volumes:
project-data:

总结

  • 只有volume可以做到数据持久化,image内的数据是无法被更改的
  • 当项目启动后对依赖文件的改动会被记录在project-data中,而两个image/usr/src/data目录下的内容会一直保持它们最开始的状态
  • 启动服务后,project-data会被挂载到两个container上,实现数据的共享,这个时候两个container/usr/src/data目录下的内容与project-data同步
  • 如果删除了project-data,则对依赖文件的改动会丢失


感谢您的阅读,如果发现文章中有错误或漏洞,请批评指正。
邮箱:aadonkeyz@gmail.com

0%