1、Docker 容器的数据卷
Docker 是将系统与运行的环境打包成容器来运行,当容器删除后,容器里的系统自然也就没有了。但是,在实际的项目中,希望 Docker 容器产生的数据能够持久化,同时容器之间也能够共享数据。Docker 提供了数据卷技术来实现这些需求。 数据卷就是目录或文件,存在于一个或多个容器中,由 Docker 挂载到容器上,完全独立于容器的生存周期,Docker 不会在容器删除时删除其挂载的数据卷。即容器删除了,数据卷仍然存在,从而实现了容器数据的持久化。 数据卷的特点: (1)数据卷是宿主机中的一个目录或文件 (2)当容器目录和数据卷目录绑定后,对方的修改会立即同步 (3)一个数据卷可以被多个容器同时挂载,可在容器之间共享或重用数据 (4)一个容器也可以被挂载多个数据卷 2、数据卷的实现 创建启动容器时,使用–v 参数来设置数据卷 语法:docker run -v /宿主机绝对路径目录:/容器内目录 镜像名..... 3、 Docker 容器下 Redis 的数据持久化 3.1 将容器内 Redis 的 RDB 持久化数据保存到容器外的某个路径下 (1)创建 redis 容器,并挂载数据卷 (2)在 cmd 中运行以下命令: docker run -d --name redis_1 -p 6379:6379 -v /d/redis/data:/data redis (3)命令解释:-v /d/redis/data:/data -v:实现宿主机的目录和容器内目录的映射; /d/dockerdata/redis/data 表示”D:\redis\data”路径,该路径如果不存在,Docker 会自动创建; /data 表示容器内的路径:该路径是容器内 redis 的自动创建的目录; 命令成功执行,会出现相关信息,表示容器正在运行。 注意:如果“D:\redis\data”事先没有创建,Docker 会自动创建该路径。 (4)使用 redis-cli.exe 连接 redis 容器,写入数据,执行 RDB 操作。 (5)查看实现宿主机的目录和容器内目录的映射 “D:\redis\data”路径下,出现了 dump.rdb 文件 执行命令,进入容器内,可以发现 data 路径下也有 dump.rdb 文件 (6)停止然后再次启动 redis_1 容器; (7)可以发现,可以直接查询到 k1 的值。这说明,虽然 redis_1 停止时,数据丢失了,但是当它重新启动时,读取了“D:\redis\data”里的 dump.rdb 文件,恢复了数据。 3.2 将容器内 Redis 的 AOF 持久化数据保存到容器外的某个路径下 (1)创建 redis 容器,并挂载数据卷 (2)在 cmd 中运行以下命令: docker run -d --name redis_2 -p 6379:6379 -v /d/redis/data:/data redis --appendonly yes (3)命令解释:--appendonly yes 该命令表示 redis_2 容器开启 AOF 持久化模式。但是,该参数只在当前命令中有效。 命令成功执行,会出现相关信息,表示容器正在运行。 (4)使用 redis-cli.exe 连接 redis 容器,写入数据 (5)查看实现宿主机的目录和容器内目录的映射 “D:\redis\data”路径下,出现了 appendonly.aof 文件,而且该文件中写入了操作命令。 (6)执行命令,进入容器内,可以发现 data 路径下也有 appendonly.aof 文件。 (7)同样,当 redis_2 重新启动时,可以读取“D:\redis\data”里的 appendonly.aof文件,恢复数据。 如果容器创建或运行时出错,可使用以下命令查询容器的日志信息: docker logs 容器名或 ID标签:容器,数据,Redis,数据库,redis,Docker,data,目录 From: https://www.cnblogs.com/qiqi-yi/p/17289279.html