Docker数据管理(五)

一、什么是数据卷

  生成环境中使用docker的过程中,往往需要对数据进行持久化,或者需要多个容器之间进行数据共享,这个就涉及到了容器数据管理

  容器中管理数据主要有两种方式:

  1. 数据卷:容器内数据之间映射到本地主机环境
  2. 数据卷容器:使用特定的容器来维护数据卷

  数据卷是一个可供容器使用的特殊目录,它将主机操作系统目录直接映射进容器,类似Linux 的mount挂载

  数据卷的特性

  1. 数据卷可以在容器之间共享和重用,容器间传递数据将变得高效方便
  2. 对数据卷内数据的修改立马生效,无论是容器内还是本地操作
  3. 对数据卷的更新不会影响镜像,解耦了应用和数据
  4. 卷会一直存在,直到没有容器使用,可以安全的卸载它

二、创建数据卷

  在用docker run 命令的时候,使用 -v 标记可以在容器内创建一个数据卷。多次重复使用 -v 标记可以创建多个数据卷

[[email protected] ~]# docker run -it -P -d --name web -v /opt/web/ centos
b0772ffc49ea226536a23ca5d73f1a69c4212407ad54ab406b1b098138e64a65

  PS:-P参数是将容器服务暴露的端口,是自动映射到本地主机的临时端口

  也可以挂载主机目录做我数据卷(经常使用的方式)

[[email protected] ~]# docker run -it -P -d --name web1 -v /opt/web:/opt/ centos
acb1b0f0c804ca2b9bbe8c1fe0373c6025c51342e138204e40e74ac9123c8854

  上面的命令是将主机的/opt/web 目录挂载到容器的/opt/下,这样是很方便的在你进行数据修改的是,直接修改本地文件就行了,容器直接就会同步了

  docker 挂载数据卷的默认权限是读写(rw) ,我们也可以改权限

[[email protected] ~]# docker run -it -P -d --name web2 -v /opt/web:/opt/:ro centos
8400a6999dbafe14dd6cb28796dc84595282361e619a8d183db405106e07d85d

  加了:ro 容器内对所挂载的数据卷内的数据就不能修改了

  也可以只挂载本地主机的单个文件到容器中作为数据卷(强烈不推荐,生产也很少用,可忽略)

[[email protected] ~]# docker run -it -P -d --name web4 -v /root/.bash_history:/.bash_history  centos
b5a45865eca2ad16cde207c9a35702667f3bd9b947383a33451b67098548331e

  

三、数据卷容器

  如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器,数据卷容器也是个容器,但是它的目的是专门用来提供数据卷供其他容器挂载的

  首先创建一个数据卷容器

[[email protected] /]# docker run -it -d -v /dbdata --name dbdata centos
ea8c0b5014166f57afc5d7cf52b1ca532e0e0a259f414d2891d0ebf9dc397624
[[email protected] /]# docker exec -it ea8c0b5014166f57afc5d7cf52b1ca532e0e0a259f414d2891d0ebf9dc397624 bash
[[email protected] /]# ls
anaconda-post.log  bin  dbdata  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

  挂载

[[email protected] /]# docker run -it -d --volumes-from dbdata --name db1 centos
ad8b9458a39c85516f2dc88645af8f3725418d5f4bf058566b0cbc977352490c
[[email protected] /]# docker run -it -d --volumes-from dbdata --name db2 centos
b07899fb1a46aa5538fc82dceebc4e53d7abf74ab870e14f916a59a03d1fab45

  此时,容器db1和db2都挂载同一个数据卷到相同的/dbdata 目录,三个容器任何一方在该目录下进行操作,其他的容器都能看见

  测试

# db1 容器
[[email protected] /]# docker exec -it db1 bash
[[email protected] /]# cd /
[[email protected] /]# ls
anaconda-post.log  bin  dbdata  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[[email protected] /]# cd dbdata/
[[email protected] dbdata]# ls
[[email protected] dbdata]# touch  a.txt
[[email protected] dbdata]# ls
a.txt
[[email protected] dbdata]# exit
exit

# db2 容器
[[email protected] /]# docker exec -it db2 bash
[[email protected]46 /]# cd /d
dbdata/ dev/
[[email protected] /]# cd /dbdata/
[[email protected] dbdata]# ls
a.txt

  其实在有容器也可以对db1或者db2进行挂载

[[email protected] /]# docker run -it -d --volumes-from db1 --name db3 centos
95547b8422226a2f18dd71db4e8c551fd8df72771cf6001cfdfb963899b71477
[[email protected] /]# docker exec -it db3 bash
[[email protected] /]# ls /dbdata/
a.txt

  --volumes-from 参数所挂载数据卷的容器自身并不需要保持正在运行

  如果删除了挂载的容器(包括dbdata、db1和db2),数据卷并不会被自动的删除,如果要删除一个数据卷,必须在删除最后一个还挂载着它的容器时使用docker rm -v命令来指定同时删除关联的容器

四、利用数据卷容器来迁移数据

4.1. 备份

  使用下面的命令来备份dbdata数据卷容器内的数据卷

[[email protected] ~]# docker run --volumes-from dbdata -v $(pwd):/backup --name backup1 centos tar zcvf /backup/backup.tar.gz /dbdata
/dbdata/
/dbdata/a.txt
[[email protected] ~]# ll
总用量 273540
-rw-------. 1 root root      1513 8月  20 20:25 anaconda-ks.cfg
-rw-r--r--  1 root root       142 9月  23 14:13 backup.tar.gz

# 具体的意思是:利用centos镜像创建一个容器,使用--volumes-from dbdata参数来让容器挂载dbdata容器的数据卷,使用-v 参数来挂载本地当前目录到容器的/backup目录,容器启动后使用tar打包备份到本地目录

4.2. 恢复

  为了恢复我们创建一个容器

[[email protected] ~]# docker run -it -d -v /dbdata --name db8 centos
042d3c9567154d047977e8097939215bef441d3206c81c6bca99b6d227501169
[[email protected] ~]# docker run --volumes-from db8 -v $(pwd):/backup centos tar zxvf /backup/backup.tar.gz
dbdata/
dbdata/a.txt
[[email protected] ~]# docker exec -it db8 bash
[[email protected] /]# ls
anaconda-post.log  bin  dbdata  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[[email protected] /]# cd dbdata/
[[email protected] dbdata]# ls
a.txt

  

原文地址:https://www.cnblogs.com/zhujingzhi/p/9656362.html

时间: 2024-10-07 15:49:09

Docker数据管理(五)的相关文章

Docker数据管理(四)

Docker数据管理 Docker数据分为两种: 数据卷 -v /data -v src:dst 数据卷容器 --volumes-from 数据卷 案例1:我们创建一个容器,起名叫nginx-volume-demo1挂载到容器中的/data目录下 [[email protected] ~]# docker run -d --name nginx-volume-demo1 -v /data nginx 96892a7bb67e9c687f29d07ea674ca527ab09dee6b0ec121

Docker 数据管理

Docker 数据管理 数据卷 数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性: 1.  数据卷可以在容器之间共享和重用 2.  对数据卷的修改会立马生效 3.  对数据卷的更新,不会影响镜像 4.  卷会一直存在,直到没有容器使用 挂载本地目录到容器 创建一个数据卷 在用 docker run 命令的时候,使用 -v 标记来创建一个数据卷并挂载到容器里.在一次 run 中多次使用可以挂载多个数据卷. #sudo docker run -it -v ~/da

Docker数据管理及网络通信

Docker数据管理及网络通信 在Docker中,为了方便查看容器中产生的数据或者将多个容器中的数据共享,就涉及到容器的数据管理操作.管理Docker容器中的数据主要有两种方式:数据卷(Date Volumes)和数据卷容器(Data Volumes Containers). 数据卷 数据卷是一个供容器使用的特殊目录,位于容器中,可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立刻可见,并且更新数据不会影响镜像,从而实现数据在宿主机和容器之间迁移.数据卷的使用类似于Linux下对目录进行的mo

Docker数据管理、网络通信以及资源控制

Docker的安装及镜像.容器的基本操作详见博客http://blog.51cto.com/11134648/2160257下面介绍Docker数据管理.网络通信以及资源控制的方法,详细如下: Doker数据管理 容器的数据管理操作可以方便查看容器内产生的数据或者将多个容器中的数据实现共享.管理Docker容器中数据主要有两种方式:数据卷(Data Volumes)和数据卷容器(Data Volumes Containers). 一.数据卷 数据卷是一个供容器使用的特殊目录,位于容器中,可将宿主

(九)Docker数据管理

Docker数据管理,即Docker内部以及容器之间管理数据,主要有两种方式:数据卷和挂载. 1. 数据卷(Volume) volume,可供一个或多个容器使用的特殊目录. 数据卷可在容器之间共享和重用: 对数据卷的修改会立马生效: 对数据卷的更新,不会影响镜像: 数据卷默认会一直存在,即使容器被删除:(可通过 docker volume prune命令删除无效的volume) 数据卷的使用,类似于 2. 挂载主机目录(Bind mounts) 原文地址:https://www.cnblogs.

Docker 数据管理和网络通信

Docker 数据管理 在Docker中,为了方便查看容器内产生的数据或者将多个容器中的数据实现共享,就涉及到容器的数据管理操作.管理Docker容器中数据只要有两种方式:数据卷(Data Volumes)和数据卷容器(Data Volumes Containers) 数据卷 数据卷是一个供容器使用的特殊目录,位于容器中,可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立刻可见,并且更新数据不会影响镜像,从而实现数据在宿主机与容器之间的迁移. 1.创建数据卷 在docker run命令中使用-

【Docker】第五篇 Docker 数据管理

一.基本介绍 数据管理的原因:Docker中的容器一旦删除,容器本身的rootfs文件系统就会被删除,容器中的所有数据就会被删除.为了对一些需要持久化的数据,不随容器删除而删除,所以我们可以通过多个容器中共享数据. 容器管理数据的主要方式: 数据卷(Date Volumes):容器内数据直接映射到本地主机环境 数据卷容器(Data Volumes Containers):使用特定容器维护数据卷 二.数据卷 1.创建数据卷 2.挂载Host的目录作为数据卷 三.数据卷容器 四.备份.恢复和迁移数据

深入浅出Docker(五):基于Fig搭建开发环境

概述 在搭建开发环境时,我们都希望搭建过程能够简单,并且一劳永逸,其他的同事可以复用已经搭建好的开发环境以节省开发时间.而在搭建开发环境时,我们经常会被复杂的配置以及重复的下载安装所困扰.在Docker技术未出现之前,我们可以使用Pupet.Chef.Ansible等配置管理工具把复杂的配置管理起来,这样的管理配置技术仍然是目前比较流行的方式之一.配置管理工具使用的都是自己的DSL语法定义,考虑到环境的复杂性,配置一套通用的开发环境需要针对各个系统定制,对于大部分开发环境这种维护成本仍然是很高的

3 docker数据管理

数据管理 关于容器中的数据 1.容器关闭,然后再启动容器,数据是存在的. 2.创建容器,然后把容器删除,数据随着容器的删除也被删除 3.如何删除容器不删除数据,在创建容器的时候可以采用以下做法 1 在创建容器时,挂载宿主机目录到容器 # docker run -itd -v /data/:/database centos 0ccaba523bc559b311b2b093b3b8617a9ddb2b4ac55124dd458dd991a240ae55 # docker exec -it 0cc /