docker数据持久化

官网:https://docs.docker.com/storage/volumes/

docker中的容器是可以随时销毁的,容器中的数据会随着容器的消亡而消亡。然而很多容器都有持久化数据的需求(比方说redis,mysql),为了能够保存数据以及共享容器间的数据,Docker提出了几种方式。

Volumes are the preferred mechanism for persisting data generated by and used by Docker containers.

While bind mounts are dependent on the directory structure of the host machine, volumes are completely managed by Docker.

In addition, volumes are often a better choice than persisting data in a container’s writable layer, because a volume does not increase the size of the containers using it, and the volume’s contents exist outside the lifecycle of a given container.

简单来说,bind mount和volume其实都是利用的宿主机的文件系统来解决数据的持久化问题,区别在于volume是受docker管理,故而就不需要担心权限引发的挂载问题,并且目录路径是docker自身管理(dockerfile里定义)的,在不同的服务器上会保持目录的一致性,更方便做迁移等,这也是volume优于bind mount的地方。

volume

-v命令:

-v < unique volume name >:<container directory>: [rw|ro]

第一个参数表示volume name,宿主机上唯一;第二个是container保存数据的目录,第三个是可选参数

In the case of named volumes, the first field is the name of the volume, and is unique on a given host machine. For anonymous volumes, the first field is omitted.
The second field is the path where the file or directory are mounted in the container.
The third field is optional, and is a comma-separated list of options, such as ro. These options are discussed below.

mysql的数据是挂载在容器内部的/var/lib/mysql目录下

(1)创建mysql数据库的container
  docker run -d --name mysql01 -e MYSQL_ROOT_PASSWORD=123456  mysql

(2)查看容器的volume
  docker volume ls

(3)创建一个mysql并为挂载的目录取一个别名(方便记忆)
docker run -d --name mysql02 -v mysql02_volume:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql

(4)查看容器的volume和mysql02的volume docker volume inspect  volume_name

从这里我们可以看到docker的目录和容器内的数据存储目录的对应关系

在MySQL中创建数据库,删除容器后以volume创建一个同样数据的新容器

删除容器后,原来的volume仍旧存在(如果想将volume一起删除,可以使用 docker rm -v container)

通过旧容器的volume创建一个新的容器,也会有和之前的容器一样的数据

docker run -d --name mysql03  -v mysql02_volume:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql

bind mounts

Bind mounts have limited functionality compared to volumes. When you use a bind mount, a file or directory on the host machine is mounted into a container. The file or directory is referenced by its full or relative path on the host machine.

-v <host directory>: <container directory> :[rw|wo]

bind mounts就是将容器内的某个自定义目录挂载到宿主机下的某个目录里,使得用户可以在宿主机里修改文件,而容器下的文件内容也会随之发生变化

docker run -d --name mysql04 -v /tmp/test:/usr/local/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql

在宿主机的目录下新增文件aa.txt,可以在容器内发现挂载的目录里也多了对应的文件

docker学习笔记(四)docker数据持久化volume相关推荐

  1. Docker学习笔记2 -- Docker的基本命令和使用

    目录 Docker学习笔记1 Docker帮助命令 Docker镜像命令 Docker容器命令 Docker commit操作 Docker学习笔记1 Docker学习笔记1 – Docker基本原理 ...

  2. Docker学习笔记 之 Docker安装配置使用

    简介 Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器.开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机).bare met ...

  3. docker学习笔记18:Dockerfile 指令 VOLUME 介绍

    在介绍VOLUME指令之前,我们来看下如下场景需求: 1)容器是基于镜像创建的,最后的容器文件系统包括镜像的只读层+可写层,容器中的进程操作的数据持久化都是保存在容器的可写层上.一旦容器删除后,这些数 ...

  4. docker学习笔记(五)docker实战

    目录 一.搭建MySQL高可用集群(pxc+HA-Proxy) 二.Nginx+Spring Boot+MySQL 一.搭建MySQL高可用集群(pxc+HA-Proxy) 参考链接:https:// ...

  5. Docker 学习笔记(Docker 架构 / 镜像 / 容器 / 常用命令 / Dockerfile / 镜像仓库)

    Docker 1. Docker 入门 1.1 Docker 是什么 1.2 Docker 和 虚拟机 1.3 镜像 容器 仓库 1.4 Docker 架构 1.5 Docker 安装 1.6 doc ...

  6. Docker学习笔记--1.Docker原理、容器

    Docker的安装 Docker的基本构成 Docker架构图 镜像(image): 1 Docker 镜像(Image)就是一个只读的模板.镜像可以用来创建 Docker 容器,一个镜像可以创建很 ...

  7. docker学习笔记(一)docker入门

    目录 基本概念 docker引擎 docker架构 安装docker docker常用命令 Docker 是一个开源的应用容器引擎,它基于 Go 语言 并遵从 Apache2.0 协议开源. Dock ...

  8. Docker学习笔记(2)--Docker常用命令

    1. 查看docker信息(version.info) # 查看docker版本 $docker version# 显示docker系统的信息 $docker info 2. 对image的操作(se ...

  9. Docker学习笔记3——Docker命令(幕布笔记)

    命令文档: https://docs.docker.com/engine/reference/run/ 整体图解: Docker命令(镜像): Docker命令(容器): Docker命令(其他): ...

最新文章

  1. 基于 Android NDK 的学习之旅-----资源释放
  2. 小白成长之路_LeetCode刷题记录
  3. urllib post请求 cookie
  4. android基础(基本框架的构成)
  5. C++使用二个栈实现queue(附完整源码)
  6. 注释嵌套注释_注释梦Night
  7. inline内联函数的优缺点
  8. java反射机制详解_JAVA反射机制详解_JSP/Java编程_互联网开发技术网_传播最新的编程技术_php361.com...
  9. 探索HTTP传输中gzip压缩的秘密
  10. php 常用正则表达 邮箱 手机号啥的
  11. 框架之---Flask
  12. 790. 数的三次方根 Java题解 (二分)
  13. 史上最全各种简历模板,自荐信模板和面试技巧
  14. 360 2019校招笔试题第一题 表面积
  15. 这才是2019年最新资料!
  16. 红色石头-通过Sina SAE中级开发者审核
  17. 并行程序设计方法实验(包括openmp、向量化实现pi计算、SPECOMP2012测试、矩阵乘法优化)
  18. 移动端测试——adb命令
  19. Linux下使用hiredis库与libevent实现异步接口的I/O复用
  20. “CL.exe”已退出,代码为 -1073741515。

热门文章

  1. linux ctime 时间戳,关于LINUX三种时间戳的详细说明(带实验)
  2. android 等待动画 库,android--AnimationDrawable实现等待动画效果
  3. open-falcon的邮件报警
  4. Activiti第二篇【管理流程定义、执行任务和流程实例、流程变量】
  5. 彻底理解ThreadLocal
  6. 第16章 C预处理器和C库 16.3 在#define中使用参数
  7. [Bootstrap]全局样式(四)
  8. Java 调用Dll
  9. phpvirtualbox+Virtualbox完整虚拟化环境部署
  10. RHEL/CENTOS 性能优化