Docker数据管理
容器的数据分层目录
-
LowerDir: image 镜像层,即镜像本身,只读
-
UpperDir: 容器的上层,可读写 ,容器变化的数据存放在此处
-
MergedDir: 容器的文件系统,使用Union FS(联合文件系统)将lowerdir 和 upperdir 合并完成后给容器使用,最终呈现给用户的统一视图
-
WorkDir: 容器在宿主机的工作目录,挂载后内容会被清空,且在使用过程中其内容用户不可见
范例: 查看指定容器数据分层
docker inspect
有状态的协议
有状态协议就是就通信双方要记住双方,并且共享一些信息。而无状态协议的通信每次都是独立的,与上一次的通信没什么关系。
"状态”可以理解为“记忆”,有状态对应有记忆,无状态对应无记忆
如果要将写入到容器的数据永久保存,则需要将容器中的数据保存到宿主机的指定目录
Docker的数据类型分为两种:
-
数据卷(Data Volume): 直接将宿主机目录挂载至容器的指定的目录 ,推荐使用此种方式,此方式较常用
-
数据卷容器(Data Volume Container): 间接使用宿主机空间,数据卷容器是将宿主机的目录挂载至一个专门的数据卷容器,然后让其他容器通过数据卷容器读写宿主机的数据 ,此方式不常用
-
-
日志输出
-
静态web页面
-
应用配置文件
-
-
-
数据卷的数据可以持久保存,即使删除使用使用该容器卷的容器也不影响。
-
在容器里面的写入数据不会影响到镜像本身,即数据卷的变化不会影响镜像的更新
-
依赖于宿主机目录,宿主机出问题,上面容器会受影响,当宿主机较多时,不方便统一管理
-
启动容器时,可以指定使用数据卷实现容器数据的持久化,数据卷有三种
-
指定宿主机目录或文件: 指定宿主机的具体路径和容器路径的挂载关系
-
容器和真机共用空间, 把容器的文件挂载到 真机的文件夹
-
-
匿名卷: 不指定数据名称,只指定容器内目录路径充当挂载点,docker自动指定宿主机的路径进行挂载
-
命名卷: 指定数据卷的名称和容器路径的挂载关系 和匿名卷在一个目录 , 只是取了一个自定义的名字
docker run 命令的以下格式可以实现数据卷
-v, --volume=[host-src:]container-dest[:<options>] <options> ro 从容器内对此数据卷是只读,不写此项默认为可读可写 rw 从容器内对此数据卷可读可写,此为默认值
方式1
#指定宿主机目录或文件格式: -v <宿主机绝对路径的目录或文件>:<容器目录或文件>[:ro] #将宿主机目录挂载容器目录,两个目录 都可自动创建
例子:
docker run -it --name c1 -v /data:/opt centos:7
方式2
#匿名卷,只指定容器内路径,没有指定宿主机路径信息,宿主机自动生成/var/lib/docker/volumes/<卷ID>/_data目录,并挂载至容器指定路径
-v <容器内路径
例子:
docker run -it --name c2 -v /data centos:7
docker inspect 76d714e6fa84
#查看宿主机路径
方式3
#命名卷将固定的存放在/var/lib/docker/volumes/<卷名>/_data -v <卷名>:<容器目录路径> #可以通过以下命令事先创建,如可没有事先创建卷名,docker run时也会自动创建卷 docker volume create <卷名>
例子:
docker run -d -p 80:80 --name nginx01 -v vol1:/usr/share/nginx/html nginx
-v, --volumes Remove the volumes associated with the container
docker volume COMMAND Commands: create Create a volume inspect Display detailed information on one or more volumes ls List volumes prune Remove all unused local volumes rm Remove one or more volumes