一、存储

docker的镜像使用一层一层文件组成的,docker的一些存储引擎可以处理怎么样存储这些文件。使用docker inspect这个命令可以查询镜像或者容器的详细信息,比如要查看centos这个镜像:



docker inspect centos



docker inspect读取的配置文件 docker inspect 内容详解_数据

展示信息下方的Layers,就是centos的文件,这些东西都是只读的不能去修改,我们基于这个镜像去创建的镜像和容器也会共享这些文件层,而docker会在这些层上面去添加一个可读写的文件层。如果需要修改一些文件层里面的东西的话,docker会复制一份到这个可读写的文件层里面,如果删除容器的话,那么也会删除它对应的可读写的文件层的文件。

演示
1、先创建一个带交互的容器,管它名字叫test1



docker run -i -t --name test1 centos /bin/bash



2、然后在里面新建一个文件,hello.txt

docker inspect读取的配置文件 docker inspect 内容详解_数据库_02

3、接着退出容器,使用centos创建第二个容器叫test2,试着输出根目录下的hello.txt文件的内容。

docker inspect读取的配置文件 docker inspect 内容详解_docker_03

发现没有找到此文件,虽然test1,test2都是基于centos镜像创建的,但他们都拥有各自的可读写的文件层,新创建的文件或者修改的已有的文件都会放到这个文件层,不会影响到镜像本身和使用这个镜像创建的容器。

删除容器的时候,这些容器层上面的文件也会被删除掉。

二、数据卷:Data Volumes

如果有些数据你想一直保存的话,比如:web服务器上面的日志,数据库管理系统里面的数据,那么我们可以把这些数据放到data volumes数据盘里面。它上面的数据,即使把容器删掉,也还是会永久保留。创建容器的时候,我们可以去指定数据盘。其实就是去指定一个特定的目录,剩下的docker会帮你做。

指定数据盘的命令



docker run --volume /mnt -i -t --name db centos /bin/bash



说明:—volume简写形式 -v,指定数据盘的目录,注意目录是要绝对路径。

docker inspect读取的配置文件 docker inspect 内容详解_docker_04

查看容器信息:

docker inspect读取的配置文件 docker inspect 内容详解_数据库_05

Mounts下Source表示数据存在宿主机上的真实位置,Destination表示数据盘在docker中对应的位置。及时删除容器,Source下的数据也还会存在。

指定主机目录作为数据盘

我们还可以手工指定主机上的目录作为数据盘,比如,新建一个文件夹叫data,让它作为数据盘,然后使用centos镜像创建容器,命名为db,指定数据盘位置:



docker run -v /Users/beckjiang/Desktop/data:/mnt --name db -i -t centos /bin/bash



进入容器后,在/mnt/ 目录下创建文件data1,然后删除容器,查看主机上/Users/beckjiang/Desktop/data 里面,仍然会保留容器里面创建的数据。

docker inspect读取的配置文件 docker inspect 内容详解_运维_06

三、数据容器

我们可以创建一个数据容器,也就是再创建容器是指定这个容器的数据盘,然后让其他容器可以使用这个容器作为他们的数据盘,有点像继承了这个数据容器指定的数据盘作为数据盘。

先来创建一个数据容器:



docker create -v /mnt -i -t --name dbcenter centos /bin/bash



docker inspect读取的配置文件 docker inspect 内容详解_数据库_07

接着使用这个数据容器,去创建一个容器 db1:



docker run --volumes-from dbcenter --name db1 -i -t centos bash



在/mnt/目录下创建data1文件:

docker inspect读取的配置文件 docker inspect 内容详解_数据盘_08

完成以后退出容器,基于dbcenter这个数据容器去创建第二个容器 db2:



docker run --volumes-from dbcenter --name db2 -i -t centos bash



docker inspect读取的配置文件 docker inspect 内容详解_数据_09

查看/mnt/目录下的文件,会看到在db1容器中创建的data1文件。同样的,你在db2中的/mnt/目录创建的数据文件,也会被其他使用了dbcenter作为数据容器的容器所看到。

四、管理数据盘

查看主机上面创建的数据盘



docker volume ls



docker inspect读取的配置文件 docker inspect 内容详解_数据_10

在删除容器时,docker默认不会删除其数据盘。这里可以 查看没有容器在使用的数据盘:



docker volume ls -f dangling=true



docker inspect读取的配置文件 docker inspect 内容详解_数据_11

出现的就是没有容器在使用的数据盘,想要 删除数据盘 可以使用:



docker volume rm VOLUME NAME



docker inspect读取的配置文件 docker inspect 内容详解_数据_12

把没有容器使用的数据盘都删除掉以后,还剩下1个正在被使用的数据盘,就是上面创建的数据容器。

如果想要删除容器时,同时删除掉其数据盘,那么可以使用-v参数。(db1,db2使用dbcenter作为数据盘,先将其删掉)



docker rm -v dbcenter



docker inspect读取的配置文件 docker inspect 内容详解_数据_13



转载于:https://blog.51cto.com/dengaosky/1854568