docker (五)-docker存储-数据持久化

将数据存储在容器中,一旦容器被删除,数据也会被删除。同时也会使容器变得越来越大,不方便恢复和迁移。
将数据存储到容器之外,这样删除容器也不会丢失数据。一旦容器故障,我们可以重新创建一个容器,将数据挂载到容器里,就可以快速的恢复。

存储方式

image.png

  • volume 卷
    卷存储在主机文件系统分配一块专有存储区域,由 Docker(在 Linux 上)管理,并且与主机的核心功能隔离。非 Docker 进程不能修改文件系统的这一部分。卷是在 Docker 中持久保存数据的最佳方式。
  • bind mount 绑定挂载
    绑定挂载可以将主机文件系统上目录或文件装载到容器中,但是主机上的非 Docker 进程可以修改它们,同时在容器中也可以更改主机文件系统,包括创建、修改或删除文件或目录,使用不当,可能会带来安全隐患。
  • tmpfs 临时挂载
    tmpfs挂载仅存储在主机系统的内存中,从不写入主机系统的文件系统。当容器停止时,数据将被删除。

 绑定挂载(bind mount)

绑定挂载适用以下场景:

  • 将配置文件从主机共享到容器。
  • 在 Docker 主机上的开发环境和容器之间共享源代码或编译目录。
    例如,可以将 Maven 的target/目录挂载到容器中,每次在主机上用 Maven打包项目时,容器内都可以使用新编译的程序包。

-V

绑定挂载将主机上的目录或者文件装载到容器中。绑定挂载会覆盖容器中的目录或文件。

如果宿主机目录不存在,docker会自动创建这个目录。但是docker只自动创建文件夹,不会创建文件。

例如,mysql的配置文件和数据存储目录使用主机的目录。可以将配置文件设置为只读(read-only)防止容器更改主机中的文件。

docker run -e MYSQL_ROOT_PASSWORD=123456 \
           -v /home/mysql/mysql.cnf:/etc/mysql/conf.d/mysql.cnf:ro  \
           -v /home/mysql/data:/var/lib/mysql  \
           -d mysql:5.7 

--tmpfs 临时挂载 

docker run -d -it --tmpfs /tmp nginx:1.22-alpine

volume 卷 

卷是docker 容器存储数据的首选方式,卷有以下优势:

  • 卷可以在多个正在运行的容器之间共享数据。仅当显式删除卷时,才会删除卷。
  • 当你想要将容器数据存储在外部网络存储上或云提供商上,而不是本地时。
  • 卷更容易备份或迁移,当您需要备份、还原数据或将数据从一个 Docker 主机迁移到另一个 Docker 主机时,卷是更好的选择。

创建和挂载卷

docker volume create my-data

docker run -e MYSQL_ROOT_PASSWORD=123456 \
           -v /home/mysql/conf.d/my.cnf:/etc/mysql/conf.d/my.cnf:ro  \
           -v my-data:/var/lib/mysql  \
           -d mysql:5.7 

创建nfs卷

docker volume create --driver local \
    --opt type=nfs \
    --opt o=addr=192.168.10.1,rw \
    --opt device=:/path/to/dir \
    vol-nfs

 

相关推荐

  1. 如何实现Docker容器数据持久存储

    2024-02-17 09:22:01       30 阅读
  2. 11Docker数据持久

    2024-02-17 09:22:01       52 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-17 09:22:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-17 09:22:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-02-17 09:22:01       87 阅读
  4. Python语言-面向对象

    2024-02-17 09:22:01       96 阅读

热门阅读

  1. 深度学习基础之《TensorFlow框架(2)—图》

    2024-02-17 09:22:01       67 阅读
  2. asp.net web api 用户身份验证

    2024-02-17 09:22:01       49 阅读
  3. MVC 和DDD

    2024-02-17 09:22:01       55 阅读
  4. SpringBoot 整合 Redis 全面教程:从配置到使用

    2024-02-17 09:22:01       51 阅读
  5. C语言——oj刷题——杨氏矩阵

    2024-02-17 09:22:01       54 阅读
  6. Vue2源码梳理:update的整体实现流程

    2024-02-17 09:22:01       42 阅读
  7. 01_02_mysql04_数据类型

    2024-02-17 09:22:01       55 阅读
  8. Linux无交互自动安装miniconda3

    2024-02-17 09:22:01       50 阅读
  9. npm install 一直卡着不动如何解决

    2024-02-17 09:22:01       48 阅读
  10. C++面经

    2024-02-17 09:22:01       63 阅读
  11. 【微服安全】API密钥和令牌与微服务安全的关系

    2024-02-17 09:22:01       55 阅读