Docker卷-创建选项(驱动程序) 描述
正式的Docker文档通常不是很有用,很多时候,即使在阅读了它们的部分之后,事情仍然不清楚 有很多事情还不清楚,但这个问题我只想针对这些: 运行Docker卷-创建选项(驱动程序) 描述,docker,docker-compose,dockerfile,Docker,Docker Compose,Dockerfile,正式的Docker文档通常不是很有用,很多时候,即使在阅读了它们的部分之后,事情仍然不清楚 有很多事情还不清楚,但这个问题我只想针对这些: 运行docker卷创建时: --司机 --光学器件 --选择类型 当我运行docker volume create--driver local--opt device=:/var/www/html/app--opt type=volume volumename时,我实际上得到了一个卷: $docker volume inspect customvolum
docker卷创建时
:
--司机
--光学器件
--选择类型
当我运行docker volume create--driver local--opt device=:/var/www/html/app--opt type=volume volumename
时,我实际上得到了一个卷:
$docker volume inspect customvolume`
[
{
"CreatedAt": "2020-08-03T09:28:10Z",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/customvolume/_data",
"Name": "customvolume",
"Options": {
"device": ":/var/www/html/customfolder",
"type": "volume"
},
"Scope": "local"
}
]
正在尝试装载此新卷:
docker run --name test-with-volume \
--mount source=customvolume,target=/var/www/html/app77' \
my-app-only:latest
错误:
Error response from daemon: error while mounting
volume '/var/lib/docker/volumes/customvolume/_data': failed to
mount local volume: mount :/var/www/html/customfolder:/var/lib/docker/volumes/customvolume/_data: no such device.
问题
显然,这些选项允许您做一些意想不到的事情,我可以在自定义位置创建卷
卷,但它不可装载
有哪些选项(解释了每个选项的不同):使用类型
时,我不清楚这些选项。docker volume create
文档讨论了docker run--mount
,但在volume、bind、tmp
中,它们只显示了示例,即tmpfs、btrfs、nfsdocker volume create
- 什么时候可以使用
设备
?
我认为这可以用于在源主机上为卷类型(也称为命名卷)创建一个自定义位置(类似于如何装载绑定装载) 我假设我可以使用“包含自定义文件夹位置的命名卷的推荐方式”而不是主机装载(绑定装载) - 最后,如何正确设置docker-compose.yml卷自定义驱动程序
我认为混淆在于这样一个事实,即
docker run--mount
vsdocker volume create
似乎是不一致的,因为docker文档质量是多么的不清楚,有两大类数据-持久性和非持久性
持久性是您需要保留的数据。比如,;客户记录、财务数据、研究结果、审计日志,甚至某些类型的应用程序日志数据。非持久性是您不需要保留的数据
这两者都很重要,Docker对这两者都有解决方案。
为了处理非持久性数据,每个Docker容器都有自己的非持久性存储。这是为每个容器自动创建的,并且与容器的生命周期紧密耦合。因此,删除容器将删除存储器及其上的任何数据。
要处理持久数据,容器需要将其存储在卷中。卷是独立的对象,其生命周期与容器解耦。这意味着您可以独立创建和管理卷,并且卷不受任何容器生命周期的限制。Net结果,您可以删除正在使用卷的容器,并且该卷不会被删除
本地存储的可写层由存储驱动程序(不要与卷驱动程序混淆)在每个Docker主机上管理。如果您在Linux上的生产环境中运行Docker,则需要确保将正确的存储驱动程序与Docker主机上的Linux发行版相匹配。使用以下列表作为指南:
- Red Hat Enterprise Linux:将Overly2驱动程序与modern一起使用 运行Docker 17.06或更高版本的RHEL。使用devicemapper 使用旧版本的驱动程序。这适用于Oracle Linux和其他应用程序 与Red Hat相关的上游和下游发行版
- Ubuntu:使用overlay2或aufs驱动程序。如果您使用的是Linux 4.x 内核或更高版本,您应该使用Overly2
- SUSE Linux企业服务器:使用btrfs存储驱动程序
- Windows只有一个驱动程序,默认情况下会对其进行配置
$ docker volume inspect myvol
[
{
"CreatedAt": "2020-05-02T17:44:34Z",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/myvol/_data",
"Name": "myvol",
"Options": {},
"Scope": "local"
}
]
请注意,驱动程序和作用域都是本地的。这意味着该卷是使用本地驱动程序创建的,仅可用于此Docker主机上的容器。Mountpoint属性告诉我们卷在Docker主机的文件系统中的位置
带绑定挂载的
version: '3.7'
services:
maria_db:
image: mariadb:10.4.13
environment:
MYSQL_ROOT_PASSWORD: Test123@123
MYSQL_DATABASE: database
ports:
- 3306:3306
volumes:
- /etc/localtime:/etc/localtime:ro
- ./data_mariadb/:/var/lib/mysql/
使用卷装载
version: "3.8"
services:
web:
image: mariadb:10.4.13
volumes:
- type: volume
source: dbdata
target: /var/lib/mysql/
volumes:
dbdata:
绑定安装说明
绑定坐骑在Docker早期就已经存在了。与卷相比,绑定装载的功能有限。使用绑定装载时,主机上的文件或目录将装载到容器中。文件或目录由其在主机上的完整或相对路径引用。相反,使用卷时,会在主机上Docker的存储目录中创建一个新目录,Docker管理该目录的内容
tmpfs安装说明
卷和绑定装载允许您在主机和容器之间共享文件,以便即使在容器停止后也可以保留数据。如果您在Linux上运行Docker,则有第三个选项:tmpfs挂载。当您使用tmpfs挂载创建容器时,该容器可以在容器的可写层之外创建文件。与卷和绑定装载不同,tmpfs装载是临时的,仅在主机内存中持久化。当容器停止时,tmpfs挂载将被删除,并且在那里写入的文件将不会被持久化
音量说明
卷是保存Docker容器生成和使用的数据的首选机制。虽然绑定装载依赖于主机的目录结构,但卷完全由Docker管理。有两个主要的c
curl -fsSL https://raw.githubusercontent.com/MatchbookLab/local-persist/master/scripts/install.sh | sudo bash
docker volume create -d local-persist --opt mountpoint=/custom/path/on/host --name new-volume-name
docker run --name container-name --mount 'source=new-volume-name,target=/path/inside/container'
docker run -d -v images:/path/inside/container/ imagename:version
version: '2'
services:
one:
image: alpine
working_dir: /one/
command: sleep 600
volumes:
- data:/one/
two:
image: alpine
working_dir: /two/
command: sleep 600
volumes:
- data:/two/
volumes:
data:
driver: local-persist
driver_opts:
mountpoint: /data/local-persist/data