ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

docker数据管理

2020-09-13 12:02:25  阅读:200  来源: 互联网

标签:Sep -- 数据管理 web01 xr docker root


一、使用容器的数据管理原因

1. 对数据进行持久化

2. 在多个容器之间进行数据共享

容器中的管理数据的两种方式:数据卷—容器内的数据直接映射到本地主机环境;数据卷容器—使用特定容器维护数据卷

二、数据卷

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

1.创建数据卷

[root@web01 ~]# docker volume create -d local test
test
[root@web01 ~]# ll /var/lib/docker/volumes/
total 24
-rw------- 1 root root 32768 Sep 12 18:09 metadata.db
drwxr-xr-x 3 root root 19 Sep 12 18:09 test

其他命令

查看数据卷列表: docker volume ls

删除一个数据卷: docker volume rm

查看一个数据卷的属性: docker volume inspect

清理无用的卷:docker volume prune

[root@web01 ~]# docker volume ls
DRIVER VOLUME NAME
local test
[root@web01 ~]# docker volume inspect test
[
{
"CreatedAt": "2020-09-12T18:09:45+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/test/_data",
"Name": "test",
"Options": {},
"Scope": "local"
}
]

#将test卷挂载在容器上

[root@web01 ~]# docker run -d -p 8080:80 -v test:/usr/share/nginx/html nginx:latest
bf31b432b674c736c7998023f65b208a2070d59301c2b9d03a5bb4ab01f248fa
[root@web01 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bf31b432b674 nginx:latest "/docker-entrypoint.…" 11 seconds ago Up 8 seconds 0.0.0.0:8080->80/tcp reverent_bardeen

[root@web01 ~]# cd /var/lib/docker/volumes/test/_data
[root@web01 _data]# ll
total 8
-rw-r--r-- 1 root root 494 Aug 11 22:50 50x.html
-rw-r--r-- 1 root root 612 Aug 11 22:50 index.html

#删除原有的文件,重新编写自己的文件

[root@web01 _data]# rm -rf *
[root@web01 _data]# vim index.html
[root@web01 _data]# cat index.html
hello world!

#刷新页面,查看结果

#删除容器,重新启动新容器查看数据是否还在

[root@web01 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bf31b432b674 nginx:latest "/docker-entrypoint.…" 12 minutes ago Up 12 minutes 0.0.0.0:8080->80/tcp reverent_bardeen

[root@web01 ~]# docker stop bf31b432b674
bf31b432b674

[root@web01 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bf31b432b674 nginx:latest "/docker-entrypoint.…" 13 minutes ago Exited (0) 2 seconds ago reverent_bardeen

[root@web01 ~]# docker rm `docker ps -a -q`
bf31b432b674

[root@web01 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

[root@web01 ~]# docker run -d -p 8081:80 -v test:/usr/share/nginx/html nginx:latest
af36acedd25c29bd96479c60022a9784b7497bff199af8141b524850da969d5e
[root@web01 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
af36acedd25c nginx:latest "/docker-entrypoint.…" 3 seconds ago Up 2 seconds 0.0.0.0:8081->80/tcp ecstatic_tu

数据没有丢失!!!

2. 绑定数据卷

在创建容器时将主机本地的任意路径挂载到容器内作为数据卷,这种形式创建的数据卷称为绑定数据卷。

在使用docker run 命令的时候,可以使用-mount 选项来使用数据卷。

-mount选项支持三种类型的数据卷,包括:volume(普通数据卷,映射到主机/var/lib/docker/volumes路径下),bind(绑定数据卷,映射到主机指定的路径),tmpfs(临时数据卷,只存在于内存中)。

#本地创建目录

[root@web01 ~]# cd /opt

[root@web01 opt]# mkdir test01

[root@web01 opt]# cd test01

[root@web01 test01]# vim index.html

[root@web01 test01]# cat index.html
<h1>
welcome to learn Linux!
</h1>

#启动容器

[root@web01 test01]# docker run -d -p 8082:80 -v /opt/test01:/usr/share/nginx/html nginx:latest
48bda97cd0cfafa3072bbc685722ae230840e42dd073fa15f91157d63b6341df

[root@web01 test01]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
48bda97cd0cf nginx:latest "/docker-entrypoint.…" 4 seconds ago Up 3 seconds 0.0.0.0:8082->80/tcp brave_kalam
af36acedd25c nginx:latest "/docker-entrypoint.…" 5 minutes ago Up 5 minutes 0.0.0.0:8081->80/tcp ecstatic_tu

 

三、数据卷容器

数据卷容器也是一个容器,它的目的是专门提供数据卷给其他容器挂载

1. 创建一个数据卷容器,并且在其中创建一个数据卷挂载到/dbdata

[root@web01 ~]# docker run -it -v /dbdata --name dbdata centos:6.8

[root@fbf8fd9bedb0 /]# ll
total 20
dr-xr-xr-x 2 root root 4096 Jun 2 2016 bin
drwxr-xr-x 2 root root 6 Sep 12 10:49 dbdata
drwxr-xr-x 5 root root 360 Sep 12 10:49 dev
drwxr-xr-x 1 root root 66 Sep 12 10:49 etc
drwxr-xr-x 2 root root 6 Sep 23 2011 home
dr-xr-xr-x 7 root root 81 Jun 2 2016 lib
dr-xr-xr-x 5 root root 8192 Jun 2 2016 lib64
drwx------ 2 root root 6 Jun 2 2016 lost+found
drwxr-xr-x 2 root root 6 Sep 23 2011 media
drwxr-xr-x 2 root root 6 Sep 23 2011 mnt
drwxr-xr-x 2 root root 6 Sep 23 2011 opt
dr-xr-xr-x 121 root root 0 Sep 12 10:49 proc
dr-xr-x--- 2 root root 159 Jun 2 2016 root
dr-xr-xr-x 2 root root 4096 Jun 2 2016 sbin
drwxr-xr-x 2 root root 6 Jun 2 2016 selinux
drwxr-xr-x 2 root root 6 Sep 23 2011 srv
dr-xr-xr-x 13 root root 0 Sep 12 10:49 sys
drwxrwxrwt 2 root root 46 Jun 2 2016 tmp
drwxr-xr-x 13 root root 155 Jun 2 2016 usr
drwxr-xr-x 17 root root 197 Jun 2 2016 var

[root@fbf8fd9bedb0 /]# ll /dbdata/
total 0

2. 在其他容器上挂载dbdata容器中的数据卷

[root@web01 ~]# docker run -it --volumes-from dbdata --name db1 centos:6.8

[root@ecfc16b3a8ff /]# 

[root@web01 ~]# docker run -it --volumes-from dbdata --name db2 centos:6.8

[root@da4b3349e959 /]#

3. 在dbdata容器上创建一个test01文件

[root@fbf8fd9bedb0 /]# cd dbdata/
[root@fbf8fd9bedb0 dbdata]# touch test01
[root@fbf8fd9bedb0 dbdata]# ll
total 0
-rw-r--r-- 1 root root 0 Sep 12 10:52 test01

在db1和db2容器内查看

[root@ecfc16b3a8ff /]# ll /dbdata/
total 0
-rw-r--r-- 1 root root 0 Sep 12 10:52 test01

[root@da4b3349e959 /]# ll dbdata/
total 0
-rw-r--r-- 1 root root 0 Sep 12 10:52 test01

注:使用--volume-from 参数所挂载数据卷的容器自身并不需要保持在运行状态

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

#删除dbdata数据卷容器

[root@web01 ~]# docker rm dbdata
dbdata
[root@web01 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
da4b3349e959 centos:6.8 "/bin/bash" 16 hours ago Exited (0) 16 hours ago db2
ecfc16b3a8ff centos:6.8 "/bin/bash" 16 hours ago Up About a minute db1
48bda97cd0cf nginx:latest "/docker-entrypoint.…" 17 hours ago Exited (0) 5 minutes ago brave_kalam
af36acedd25c nginx:latest "/docker-entrypoint.…" 17 hours ago Exited (0) 5 minutes ago ecstatic_tu

#查看db1容器数据卷是否还在

[root@web01 ~]# docker exec -it db1 /bin/bash
[root@ecfc16b3a8ff /]# ll
total 20
dr-xr-xr-x 2 root root 4096 Jun 2 2016 bin
drwxr-xr-x 2 root root 20 Sep 12 10:52 dbdata
drwxr-xr-x 5 root root 360 Sep 13 03:17 dev
drwxr-xr-x 1 root root 66 Sep 12 10:51 etc
drwxr-xr-x 2 root root 6 Sep 23 2011 home
dr-xr-xr-x 7 root root 81 Jun 2 2016 lib
dr-xr-xr-x 5 root root 8192 Jun 2 2016 lib64
drwx------ 2 root root 6 Jun 2 2016 lost+found
drwxr-xr-x 2 root root 6 Sep 23 2011 media
drwxr-xr-x 2 root root 6 Sep 23 2011 mnt
drwxr-xr-x 2 root root 6 Sep 23 2011 opt
dr-xr-xr-x 115 root root 0 Sep 13 03:17 proc
dr-xr-x--- 1 root root 27 Sep 12 10:58 root
dr-xr-xr-x 2 root root 4096 Jun 2 2016 sbin
drwxr-xr-x 2 root root 6 Jun 2 2016 selinux
drwxr-xr-x 2 root root 6 Sep 23 2011 srv
dr-xr-xr-x 13 root root 0 Sep 12 10:49 sys
drwxrwxrwt 2 root root 46 Jun 2 2016 tmp
drwxr-xr-x 13 root root 155 Jun 2 2016 usr
drwxr-xr-x 17 root root 197 Jun 2 2016 var
[root@ecfc16b3a8ff /]# ll dbdata/
total 0
-rw-r--r-- 1 root root 0 Sep 12 10:52 test01

三、利用数据卷容器迁移数据

可以利用数据卷容器对其中的数据卷进行备份、恢复以及实现数据的迁移

1.创建数据卷容器

[root@web01 ~]# docker run -it -v /dbdata --name dbdata centos:6.8
[root@ba74939c6679 /]# ll dbdata/
total 0
[root@ba74939c6679 /]# echo "hello world" >dbdata/test01.txt
[root@ba74939c6679 /]# ll dbdata/
total 4
-rw-r--r-- 1 root root 12 Sep 13 03:30 test01.txt

[root@ba74939c6679 /]# touch dbdata/test0{2..5}.log
[root@ba74939c6679 /]# ll dbdata/
total 4
-rw-r--r-- 1 root root 12 Sep 13 03:30 test01.txt
-rw-r--r-- 1 root root 0 Sep 13 03:31 test02.log
-rw-r--r-- 1 root root 0 Sep 13 03:31 test03.log
-rw-r--r-- 1 root root 0 Sep 13 03:31 test04.log
-rw-r--r-- 1 root root 0 Sep 13 03:31 test05.log

2. 备份数据

备份/dbdata数据卷容器内的数据

[root@web01 ~]# docker run --volumes-from dbdata -v $(pwd):/backup --name backup centos:6.8 tar cvf /backup/backup.tar /dbdata
tar: Removing leading `/' from member names
/dbdata/
/dbdata/test01.txt
/dbdata/test02.log
/dbdata/test03.log
/dbdata/test04.log
/dbdata/test05.log
[root@web01 ~]# ll
total 16
-rw-------. 1 root root 1604 May 24 17:40 anaconda-ks.cfg
-rw-r--r-- 1 root root 10240 Sep 13 11:38 backup.tar

3.恢复

恢复数据到一个容器

a. 创建一个带有数据卷的容器dbdata1

[root@web01 ~]# docker run -it -v /dbdata --name dbdata1 centos:6.8 /bin/bash

[root@4e9f0d6f04d6 /]# ll dbdata/
total 0

b.创建一个新的容器,挂载dbdata1的容器,并使用untar解压备份文件到所挂载的容器卷内

[root@web01 ~]# docker run --volumes-from dbdata1 -v $(pwd):/backup busybox tar xvf /backup/backup.tar
dbdata/
dbdata/test01.txt
dbdata/test02.log
dbdata/test03.log
dbdata/test04.log
dbdata/test05.log

#在dbdata1上查看恢复的数据

[root@4e9f0d6f04d6 /]# ll dbdata/
total 4
-rw-r--r-- 1 root root 12 Sep 13 03:30 test01.txt
-rw-r--r-- 1 root root 0 Sep 13 03:31 test02.log
-rw-r--r-- 1 root root 0 Sep 13 03:31 test03.log
-rw-r--r-- 1 root root 0 Sep 13 03:31 test04.log
-rw-r--r-- 1 root root 0 Sep 13 03:31 test05.log

标签:Sep,--,数据管理,web01,xr,docker,root
来源: https://www.cnblogs.com/jiawei2527/p/13657165.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有