当前位置:   article > 正文

CentOS Docker 容器数据管理,链接容器,构建私有库_根据centos镜像生成一个容器centos test 1同时该容器包含两个数据卷

根据centos镜像生成一个容器centos test 1同时该容器包含两个数据卷

1 容器数据管理

管理方式:

数据卷
数据卷容器

1.1 数据卷

一个或多个容器专门指定绕过Union File System的目录,为持续性或共享数据提供一些有用的功能:

数据卷可以在容器间共享和重用
数据卷数据改变是直接修改的
数据卷数据改变不会被包括在容器中
数据卷是持续性的,直到没有容器使用它们
  • 1
  • 2
  • 3
  • 4

新建数据卷 /data

[root@controller ~]# docker run --name testdocker2 -v /data -it centos /bin/bash

[root@353023e9517c /]# ls -ld /data/
drwxr-xr-x 2 root root 6 Apr  1 03:24 /data/
[root@353023e9517c /]# df -TH
Filesystem     Type     Size  Used Avail Use% Mounted on
overlay        overlay  108G  8.0G  100G   8% /
tmpfs          tmpfs     68M     0   68M   0% /dev
tmpfs          tmpfs    4.1G     0  4.1G   0% /sys/fs/cgroup
shm            tmpfs     68M     0   68M   0% /dev/shm
/dev/vda1      xfs      108G  8.0G  100G   8% /data
tmpfs          tmpfs    4.1G     0  4.1G   0% /proc/asound
tmpfs          tmpfs    4.1G     0  4.1G   0% /proc/acpi
tmpfs          tmpfs    4.1G     0  4.1G   0% /proc/scsi
tmpfs          tmpfs    4.1G     0  4.1G   0% /sys/firmware
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

查看数据卷目录

docker inspect testdocker2 |grep /var/lib/docker/volumes

"Source": "/var/lib/docker/volumes/249223bc043ad59ec60cfc069d69ec99e9b0106f366a7f8389c50496d40ea0fb/_data",
  • 1
  • 2
  • 3

1.2 挂载

可以直接挂载宿主机文件或目录到容器里,可以理解为目录映射,这样就可以让所有的容器共享宿主机数据,从而只需要改变宿主机的数据源就能够影响到所有的容器数据

参数:
-v后面的映射关系是"宿主机文件/目录:容器里对应的文件/目录",其中,宿主机上的文件/目录是要提前存在的,容器里对应的文件/目录会自动创建。

1)挂载宿主机文件到容器上

[root@controller ~]# cat /etc/testnode
This is a test data file

[root@controller ~]# docker run -it --name testdocker3 -v /etc/testnode:/etc/testnode docker.io/centos /bin/bash
[root@10e59ae7c8aa /]# cat /etc/testnode
This is a test data file

[root@10e59ae7c8aa /]# echo "This is added content in container" >> /etc/testnode

[root@10e59ae7c8aa /]# cat /etc/testnode
This is a test data file
This is added content in container

[root@controller ~]# cat /etc/testnode
This is a test data file
This is added content in container
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

2) 挂载宿主机目录到容器上

root@controller ~]# mkdir /var/xugcom
[root@controller ~]# echo "testdocker2" > /var/xugcom/testdocker2
[root@controller ~]# echo "testdocker3" > /var/xugcom/tsetdocker3
[root@controller ~]# docker run -it --name xug -v /var/xugcom:/opt/xugtime centos /bin/bash
[root@ece9f309f7ab /]# cd /opt/xugtime/
[root@ece9f309f7ab xugtime]# ls
testdocker2  tsetdocker3
[root@ece9f309f7ab xugtime]# cat testdocker2
testdocker2
[root@ece9f309f7ab xugtime]# echo "20220401" >> testdocker2
[root@ece9f309f7ab xugtime]# exit
exit
[root@controller ~]# cat /var/xugcom/testdocker2
testdocker2
20220401

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

挂载多个目录

[root@controller ~]# mkdir /opt/data1 /opt/data2
[root@controller ~]# echo "123456" > /opt/data1/test1
[root@controller ~]# echo "098765" > /opt/data2/test2
[root@controller ~]# docker run --name data -v /opt/data1:/var/www/data1 -v /opt/data2:/var/www/data2:ro -it centos /bin/bash
[root@27e7f0c0477b /]# ls /var/www/data1
test1
[root@27e7f0c0477b /]# ls /var/www/data2
test2
[root@27e7f0c0477b /]# cat /var/www/data1/test1
123456
[root@27e7f0c0477b /]# cat /var/www/data2/test2
098765
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

1.3 创建数据卷容器

启动一个名为testvolume容器,此容器包含两个数据卷/var/volume1和/var/volume2(这两个数据卷目录是在容器里的,容器创建的时候会自动生成这两目录)

# 此行命令未加 -it 参数,所以这个容器创建好之后是登陆不了的。要想创建容器后能正常登陆,就需要添加上面两个参数
[root@controller ~]# docker run -v /var/volume1 -v /var/volume2 --name testvolume centos /bin/bash

#查看宿主机上与数据卷对应的目录路径:
[root@controller ~]# docker inspect testvolume |grep /var/lib/docker/volumes/
                "Source": "/var/lib/docker/volumes/5dc2ab11abc737577df00757391493c83dfac441a51fcd2c38f079ce754abb1d/_data",
                "Source": "/var/lib/docker/volumes/d896cfc0e49397e6dcb996306054bbe9f45729fd0b783d588efa993519868bce/_data",

#创建AppContainer容器,挂载testvolume容器中的数据卷
[root@controller ~]# docker run -it --rm --volumes-from testvolume --name AppContainer centos /bin/bash
[root@6f46b9402c8e /]# ls /var/volume1
[root@6f46b9402c8e /]# ls /var/volume2
[root@6f46b9402c8e /]# echo "Content of volume1" > /var/volume1/test1
[root@6f46b9402c8e /]# echo "Content of volume2" > /var/volume2/test2

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

1.4 备份数据卷

#创建一个容器xu,包含两个数据卷/var/volume1和/var/volume2(这两个目录是在容器里的数据卷路径)
[root@controller ~]# docker run -it -v /var/volume1 -v /var/volume2 --name xu centos /bin/bash
#add test data
[root@9f10977912dd volume1]# echo "test1"  > test1
[root@9f10977912dd volume1]# echo "test2" > test2
[root@9f10977912dd volume1]# echo "test3" > test3
[root@9f10977912dd volume1]# ls
test1  test2  test3
[root@9f10977912dd volume1]# cd ../volume2
[root@9f10977912dd volume2]# echo "test4" > test4
[root@9f10977912dd volume2]# echo "test5" > test5
[root@9f10977912dd volume2]# echo "test6" > test6
[root@9f10977912dd volume2]# ls
test4  test5  test6

#启动容器
[root@controller ~]# docker start xu
xu
[root@controller ~]# docker ps
CONTAINER ID   IMAGE           COMMAND             CREATED         STATUS         PORTS                                       NAMES
9f10977912dd   centos          "/bin/bash"         3 minutes ago   Up 4 seconds                                               xu

#为了利用数据卷容器备份,使用--volumes-from标记来创建一个加载xu容器卷的容器,并从主机挂载当前目录到容器的/backup目录。并备份xu卷中的数据,执行完成之后删除容器--rm,此时备份就在当前的目录下了。

#备份xu容器中的/var/volume1数据卷数据
#命令中的-i和-t这两个参数加不加都可以;--rm加上,备份后就会自动删除这个容器,如果不加这个--rm参数,那么备份后的容器就会保留,docker ps -a就会查看到
[root@controller ~]# docker run -it --rm --volumes-from xu -v $(pwd):/backup centos tar cvf /backup/backup1.tar /var/volume1
tar: Removing leading `/' from member names
/var/volume1/
/var/volume1/test1
/var/volume1/test2
/var/volume1/test3

#备份xu容器中的/var/volume2数据卷数据
[root@controller ~]# docker run -it --rm --volumes-from xu -v $(pwd):/backup centos tar cvf /backup/backup2.tar /var/volume2
tar: Removing leading `/' from member names
/var/volume2/
/var/volume2/test4
/var/volume2/test5
/var/volume2/test6

#备份xu容器中的/var/volume1 /var/volume2数据卷数据
[root@localhost ~]# docker run -i -t --rm --volumes-from xu -v $(pwd):/backup docker.io/centos tar cvf /backup/backup.tar /var/volume1 /var/volume2
tar: Removing leading `/' from member names
/var/volume1/
/var/volume1/test1
/var/volume1/test11
/var/volume1/test111
/var/volume2/
/var/volume2/test2
/var/volume2/test22
/var/volume2/test222

[root@controller ~]# ls
192.168.143.192  admin-openrc  anaconda-ks.cfg  backup1.tar  backup2.tar  cirros-0.4.0-x86_64-disk.img  original-ks.cfg
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55

先创建一个容器,并挂载要备份的容器数据卷,再挂载数据卷(pwd):/backup目录到容器/backup,在容器中执行备份/data目录到/backup,也就是备份到宿主机$(pwd):/backup目录。

1.5 恢复/迁移数据卷

恢复给同一个容器或者另外的容器,新建容器并解压备份文件到新的容器数据卷

语法

docker run -t -i -d -v /test --name test4 ubuntu:14.04  /bin/bash
docker run --rm --volumes-from test4 -v $(pwd):/backup ubuntu:14.04 tar xvf /backup/test.tar -C /
  • 1
  • 2

1)恢复数据给同一个容器

#先删除数据卷
[root@controller ~]# docker attach xu
[root@9f10977912dd /]# ls /var/volume1
test1  test2  test3
[root@9f10977912dd /]# ls /var/volume2
test4  test5  test6
[root@9f10977912dd /]# rm -rf /var/volume1 /var/volume2
rm: cannot remove '/var/volume1': Device or resource busy
rm: cannot remove '/var/volume2': Device or resource busy
[root@9f10977912dd /]# ls /var/volume1
[root@9f10977912dd /]# ls /var/volume2

# 恢复
[root@controller ~]# docker run --rm --volumes-from xu -v $(pwd):/backup centos tar xvf /backup/backup2.tar -C /
var/volume1/
var/volume1/test1
var/volume1/test2
var/volume1/test3
var/volume2/
var/volume2/test4
var/volume2/test5
var/volume2/test6

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

2)恢复数据给另外的容器,新建容器并解压备份文件到新的容器数据卷

#新建一个容器backuptest,将上面备份的数据卷数据恢复到这个新容器里。
docker run -it -v /var/volume1 -v /var/volume2 --name backuptest centos /bin/bash


[root@controller ~]# docker run --rm --volumes-from backuptest -v $(pwd):/backup centos tar xvf /backup/backup2.tar -C /
var/volume1/
var/volume1/test1
var/volume1/test2
var/volume1/test3
var/volume2/
var/volume2/test4
var/volume2/test5
var/volume2/test6

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

1.6 删除数据卷

Volume 只有在下列情况下才能被删除:
1)docker rm -v删除容器时添加了-v选项
2)docker run --rm运行容器时添加了–rm选项

2 容器连接

docker 允许把多个容器连接在一起,相互交互信息。docker 链接会创建一种容器父子级别的关系,其中父容器可以看到其子容器提供的信息。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/724558
推荐阅读
相关标签
  

闽ICP备14008679号