docker存储卷
docker存储卷
Docker镜像由多个只读层叠加而成,而启动容器时,Docker会加载只读镜像层,并在镜像栈顶部添加一个读写层。如果运行的容器修改了一个现有已经存在的文件,那该文件将会从读写层下面的只读层复制到读写层,该文件的只读版本仍然存在,只是被读写层中该文件的副本所覆盖,此即写时复制
存储卷是宿主机上的某一目录与容器目录或文件建立绑定关系
应用的状态
有状态/无状态
image.png
有状态: 说明此时处理的连接与上一个连接是有关系的。大多数有状态应用,都要存储数据
无状态: 说明每一个连接都是无联系的
对于有状态应用,它的存储是必须的
volume Types
Docker 有两种类型的卷,每种类型都在容器中存在一个挂载点,但其在宿主机上的位置不同
1.bind mount volume 绑定挂载卷
在容器中指定目录挂载到宿主机的目录上
2.Docker-managed volume Dokcer管理卷
只需映射容器的某个路径,到宿主机的路径。经由docker daemon帮忙完成创建,卷名称为docker ID 号
docker container run [options]
-v: volumedir //docker管理卷
-v: hostdir:volumedir 绑定挂载卷
docker run --name b2 -it -v /data/web busybox:latest
ls /data/web 在容器中查看,已经存在
docker container inspect b2 查看存储卷
docker run --name b2 -it -v /data/volumes/b2:/data/ busybox:latest
宿主机: /data/volumes/b2 是系统自己创建的
docker container inspect -f {{.Mounts}} b2
-f 是以go模板来过滤
Mounts 容器inspect内容的最顶层内容
docker container inspect -f {{.NetworkSettings.IPAddress}} b2 //查看当前容器的IP
192.168.1.1
docker容器支持复制卷,把一个容器的卷完全复制到另一个容器
image.png
我们可以创建一个模板容器,其他容器从这个容器复制卷信息。
docker run -it --name b4 --volumes-from b3 busybox:latest //b4容器复制b3容器的存储卷
模板容器无需运行,联盟式网络和存储卷复制,都可以使用