docker中容器有必要挂载到主机上吗存储

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker中容器有必要挂载到主机上吗存储相关的知识,希望对你有一定的参考价值。

例如docker run -it -v /data --name container1 busybox ); 和挂载到主机(例如docker run -it --name container1 -v /path/on/host:/datavol busybox )但是为了使容量在容器重启甚至容器交换(旧容器被删除,创build/启动新容器)中保持不变,这两种方法都不会将卷挂载到主机上吗? 换句话说,如果我没有通过“简单安装方法”明确地挂载到主机,那么卷的实际安装位​​置在哪里? 而且这个位置如何在容器交换中生存呢?而且,在这两种情况下,我都假定卷只是给定主机的本地卷,并且如果有一个Swarm或群集运行在多个主机上,则无法使用这些命令,以便在不同主机上运行的容器可以访问这些卷,是吗? (而且我猜这是Data Volume Containers发挥的作用,对吧?)提前致谢!这两种方法都不能将卷挂载到主机上?是的,这两种方法都基于容器生命周期中保存的主机目录。使用这些命令获取更多信息:docker volume ls docker volume inspect <volume-id> # and docker inspect <container-id>(方法1)实际安装量在哪里?做这个:docker inspect <container-id>你的答案在“来源”中:"Mounts": [ "Type": "volume", "Name": "96f5e6531480cc716cd030f3f60f8927a55728a52d55ad55589752c2b89f2001", "Source": "/var/lib/docker/volumes/96f5e6531480cc716cd030f3f60f8927a55728a52d55ad55589752c2b89f2001/_data", "Destination": "/data", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" ],请注意,如果您在OSX或Windows中,则该Source指的是运行docker的VM内部的本地目录。而且这个位置如何在容器交换中生存呢?他们生存,因为他们是基于主机的本地目录(他们是卷,因此它们存在)。如果在多个主机上运行Swarm或群集,则无法使用这些命令,以便运行在不同主机上的容器可以访问这些卷,是的?您对简单的卷configuration是正确的。 这是docker变得棘手,持久的地方。 您可以在主机文件系统级别实现共享目录,然后将其作为卷装载到容器中,以便跨群集主机获取共享卷。https://docs.docker.com/engine/tutorials/dockervolumes/#mount-a-shared-storage-volume-as-a-data-volume使用php在shell中运行docker运行或重新启动PostgreSQL映像后,Docker容器立即退出在CentOS7上暴露Docker Remote API v1.22在Docker上的terminal上安装Gambit绑定的文件夹的内容不可用Docker nginx错误在安assembly置文件Docker(带有SYSTEMCTL的CentOS 7):无法安装tmpfs&cgroup如何使用rabbitmq docker撰写yml文件来构builddocker镜像?Docker-Compose找不到新的节点模块MongoDB使用具有持久存储问题的docker分片群集在Docker中将“named volume”挂载为非root用户 参考技术A 例如docker run -it -v /data --name container1 busybox ); 和
挂载到主机(例如docker run -it --name container1 -v /path/on/host:/datavol busybox )
但是为了使容量在容器重启甚至容器交换(旧容器被删除,创build/启动新容器)中保持不变,这两种方法都不会将卷挂载到主机上吗? 换句话说,如果我没有通过“简单安装方法”明确地挂载到主机,那么卷的实际安装位​​置在哪里? 而且这个位置如何在容器交换中生存呢?
而且,在这两种情况下,我都假定卷只是给定主机的本地卷,并且如果有一个Swarm或群集运行在多个主机上,则无法使用这些命令,以便在不同主机上运行的容器可以访问这些卷,是吗? (而且我猜这是Data Volume Containers发挥的作用,对吧?)提前致谢!
这两种方法都不能将卷挂载到主机上?
是的,这两种方法都基于容器生命周期中保存的主机目录。
使用这些命令获取更多信息:
docker volume ls docker volume inspect <volume-id> # and docker inspect <container-id>
(方法1)实际安装量在哪里?
做这个:
docker inspect <container-id>
你的答案在“来源”中:
"Mounts": [ "Type": "volume", "Name": "96f5e6531480cc716cd030f3f60f8927a55728a52d55ad55589752c2b89f2001", "Source": "/var/lib/docker/volumes/96f5e6531480cc716cd030f3f60f8927a55728a52d55ad55589752c2b89f2001/_data", "Destination": "/data", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" ],
请注意,如果您在OSX或Windows中,则该Source指的是运行docker的VM内部的本地目录。
而且这个位置如何在容器交换中生存呢?
他们生存,因为他们是基于主机的本地目录(他们是卷,因此它们存在)。
如果在多个主机上运行Swarm或群集,则无法使用这些命令,以便运行在不同主机上的容器可以访问这些卷,是的?
您对简单的卷configuration是正确的。 这是docker变得棘手,持久的地方。 您可以在主机文件系统级别实现共享目录,然后将其作为卷装载到容器中,以便跨群集主机获取共享卷。
https://docs.docker.com/engine/tutorials/dockervolumes/#mount-a-shared-storage-volume-as-a-data-volume
使用PHP在shell中运行docker运行或重新启动PostgreSQL映像后,Docker容器立即退出
在CentOS7上暴露Docker Remote API v1.22
在Docker上的terminal上安装Gambit
绑定的文件夹的内容不可用
Docker nginx错误在安assembly置文件
Docker(带有SYSTEMCTL的CentOS 7):无法安装tmpfs&cgroup
如何使用rabbitmq docker撰写yml文件来构builddocker镜像?
Docker-Compose找不到新的节点模块
MongoDB使用具有持久存储问题的docker分片群集
在Docker中将“named volume”挂载为非root用户
参考技术B 例如docker run -it -v /data --name container1 busybox ); 和
挂载到主机(例如docker run -it --name container1 -v /path/on/host:/datavol busybox )
但是为了使容量在容器重启甚至容器交换(旧容器被删除,创build/启动新容器)中保持不变,这两种方法都不会将卷挂载到主机上吗? 换句话说,如果我没有通过“简单安装方法”明确地挂载到主机,那么卷的实际安装位​​置在哪里? 而且这个位置如何在容器交换中生存呢?

而且,在这两种情况下,我都假定卷只是给定主机的本地卷,并且如果有一个Swarm或群集运行在多个主机上,则无法使用这些命令,以便在不同主机上运行的容器可以访问这些卷,是吗? (而且我猜这是Data Volume Containers发挥的作用,对吧?)提前致谢!

这两种方法都不能将卷挂载到主机上?

是的,这两种方法都基于容器生命周期中保存的主机目录。

使用这些命令获取更多信息:

docker volume ls docker volume inspect <volume-id> # and docker inspect <container-id>
(方法1)实际安装量在哪里?

做这个:

docker inspect <container-id>
你的答案在“来源”中:

"Mounts": [ "Type": "volume", "Name": "96f5e6531480cc716cd030f3f60f8927a55728a52d55ad55589752c2b89f2001", "Source": "/var/lib/docker/volumes/96f5e6531480cc716cd030f3f60f8927a55728a52d55ad55589752c2b89f2001/_data", "Destination": "/data", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" ],
请注意,如果您在OSX或Windows中,则该Source指的是运行docker的VM内部的本地目录。

而且这个位置如何在容器交换中生存呢?

他们生存,因为他们是基于主机的本地目录(他们是卷,因此它们存在)。

如果在多个主机上运行Swarm或群集,则无法使用这些命令,以便运行在不同主机上的容器可以访问这些卷,是的?

您对简单的卷configuration是正确的。 这是docker变得棘手,持久的地方。 您可以在主机文件系统级别实现共享目录,然后将其作为卷装载到容器中,以便跨群集主机获取共享卷。

https://docs.docker.com/engine/tutorials/dockervolumes/#mount-a-shared-storage-volume-as-a-data-volume

使用PHP在shell中运行docker运行或重新启动PostgreSQL映像后,Docker容器立即退出
在CentOS7上暴露Docker Remote API v1.22
在Docker上的terminal上安装Gambit
绑定的文件夹的内容不可用
Docker nginx错误在安assembly置文件
Docker(带有SYSTEMCTL的CentOS 7):无法安装tmpfs&cgroup
如何使用rabbitmq docker撰写yml文件来构builddocker镜像?
Docker-Compose找不到新的节点模块
MongoDB使用具有持久存储问题的docker分片群集
在Docker中将“named volume”挂载为非root用户
参考技术C 如果你怕数据丢失的话,那么还是有必要挂载到主机上面储存的。 参考技术D 如果你怕数据丢失的话,那么还是有必要挂载到主机上面储存的

将Docker主机数据挂在到容器中

dcoker 提供三种不同的方式将数据从宿主机挂载到容器中:volumes,bind mounts, tmpfs。
volumes: Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)
bind mounts: 存储在宿主机系统的任意位置,主要是将宿主机上的某个文件目录挂在到docker下供数据存储。
tmpfs:挂载存储在宿主机系统的内存中,不会写入宿主机的文件系统。

技术图片

管理卷:
docker volume create tomcat8081
docker volume inspect tomcat8081

用卷创建一个容器:
docker run -itd --name=ng01 -p 91:80 --mount src=ng01,dst=/usr/share/nginx/html nginx

或者:

docker run -itd --name=ng01 -p 89:80 -v ng01:/usr/share/nginx/html nginx

#不指定卷会自动创建
docker run -itd --name=ng01 -p 90:80 --mount src=,dst=/usr/share/nginx/html nginx

创建的卷所在位置:

/var/lib/docker/volumes/

删除卷:
docker volume rm ng01

删除容器:
docker container stop ng01
docker container rm ng01

bind形式绑定
docker run -itd --name=ng01 --mount type=bind,src=/root/app,dst=/usr/share/nginx/html nginx

或者

docker run -itd --name=ng -p 88:80 -v /root/app:/usr/share/nginx/html nginx

查看容器详情

docker inspect ng01

#如果源文件、源目录不存在,不会自动创建,会报错。
#挂载目标在容器中非空目录,则该目录现有内容将被隐藏
 

 

 

volume特点:

1、多个运行容器之间的共享数据,多个容器可以同时挂载相同的卷。

2、当容器停止或被移除时,该卷依然存在

3、当明确删除卷时,卷才会被删除

4、将容器的数据存储在远程主机或其他存储

5、将数据从一台docker主机迁移到另一台时,先停止容器,然后备份卷的目录(/var/lib/docker/volumes

)

 

bind mount 特点:

1、从主机共享配置文件到容器,默认情况下,挂载主机/etc/resolv.conf到每个容器,提供dns解析

2、在docker主机上的开发环境和容器之间共享源代码。 例如,将maven target目录挂载到容器中, 每次在docker主机上构建maven项目时,容器都可以访问构建的项目包。

3、当docker主机的文件或目录结构保证与容器所需的绑定挂载一致时

 

以上是关于docker中容器有必要挂载到主机上吗存储的主要内容,如果未能解决你的问题,请参考以下文章

将Docker主机数据挂在到容器中

docker管理应用程序数据容器网络

docker入门之镜像管理基础

docker的复制和挂载

docker-管理应用程序数据

修改Docker本地镜像与容器的存储位置的方法