Docker学习笔记#2

一、存储

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

docker inspect centos
Docker学习笔记#2_第1张图片
inspect

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

演示

先创建一个带交互的容器,管它名字叫test1。

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

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

Docker学习笔记#2_第2张图片
demo

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

Docker学习笔记#2_第3张图片
test2

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

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

二、数据卷:Data Volumes

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

指定数据盘的命令

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

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

创建容器,并在这容器的数据盘里创建一个文件。

volume

查看容器信息:

Docker学习笔记#2_第4张图片
db detail

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学习笔记#2_第5张图片
volume2

三、数据容器

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

先来创建一个数据容器

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

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

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

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


Docker学习笔记#2_第6张图片
Paste_Image.png

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

docker run --volumes-from dbcenter --name db2 -i -t centos bash
Docker学习笔记#2_第7张图片
db2

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

四、管理数据盘

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

docker volume ls
Docker学习笔记#2_第8张图片
volumels

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

docker volume ls -f dangling=true
Paste_Image.png

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

docker volume rm VOLUME NAME
Docker学习笔记#2_第9张图片
Paste_Image.png

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

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

docker rm -v dbcenter
Docker学习笔记#2_第10张图片
rm-v

因为删除容器也把数据盘给删了,所以执行docker volume ls,数据盘为空。

你可能感兴趣的:(Docker学习笔记#2)