CvR*_*eon 1 docker dockerfile docker-compose
Docker 官方文档通常不是很有用,很多时候即使读完其中的章节,事情仍然不清楚。
有很多事情不清楚,但这个问题我只想针对这些:
运行时docker volume create:
--driver --opt 设备 --opt 类型
当我跑步时,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"
}
Run Code Online (Sandbox Code Playgroud)
]
尝试安装这个新卷:
docker run --name test-with-volume \
--mount source=customvolume,target=/var/www/html/app77' \
my-app-only:latest
Run Code Online (Sandbox Code Playgroud)
错误:
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.
Run Code Online (Sandbox Code Playgroud)
显然,这些选项允许您做一些意想不到的事情,我能够volume在自定义位置创建一个卷,但它不可安装。
有哪些选项type(每个解释都有差异):使用时docker volume create,我不清楚它们。
docker run --mount文档讨论了volume, bind, tmp,但仅docker volume create显示了示例,即 tmpfs、btrfs、nfs。
什么时候可以用device?
我认为这可以用于在源主机上为卷类型(也称为命名卷)创建自定义位置(类似于如何安装绑定安装)
我假设我可以使用“推荐的命名卷方式,包括自定义文件夹” location' 而不是主机挂载(绑定挂载)。
最后,如何正确设置 docker-compose.yml 卷自定义驱动程序。
我认为混乱在于docker run --mountvsdocker volume create似乎不一致,因为 Docker 文档质量不明确
数据 \xe2\x80\x94 主要有两类:持久数据和非持久数据。
\n持久性是您需要保留的数据。像; 客户记录、财务数据、研究结果、审计日志,甚至某些类型的应用程序日志数据。非持久性是您不需要保留的数据。
\n两者都很重要,并且 Docker 都有针对两者的解决方案。\n为了处理非持久性数据,每个 Docker 容器都有自己的非持久性存储。这是为每个容器自动创建的,并且与容器的生命周期紧密耦合。因此,删除容器将删除存储及其上的所有数据。\n为了处理持久数据,容器需要将其存储在卷中。卷是独立的对象,其生命周期与容器分离。这意味着您可以独立创建和管理卷,并且它们\xe2\x80\x99不依赖于任何容器的生命周期。最终结果是,您可以删除使用卷的容器,并且该卷不会被删除。
\n这个可写的本地存储层由存储驱动程序在每个 Docker 主机上进行管理(不要与卷驱动程序混淆)。如果您\xe2\x80\x99在Linux上的生产中运行Docker,则\xe2\x80\x99需要确保将正确的存储驱动程序与Docker主机上的Linux发行版相匹配。使用以下列表作为指导:
\nRed Hat Enterprise Linux:将overlay2 驱动程序与运行 Docker 17.06 或更高版本的现代 RHEL 版本结合使用。将 devicemapper\n驱动程序与旧版本一起使用。这适用于 Oracle Linux 和其他\nRed Hat 相关的上游和下游发行版。
\nUbuntu:使用overlay2 或aufs 驱动程序。如果您\xe2\x80\x99 使用的是 Linux 4.x\n内核或更高版本,则应该使用overlay2。
\nSUSE Linux Enterprise Server:使用 btrfs 存储驱动程序。
\nWindows Windows 只有一个驱动程序,并且是默认配置的。
\n默认情况下,Docker 使用内置本地驱动程序创建新卷。顾名思义,使用本地驱动程序创建的卷仅可用于与该卷位于同一节点上的容器。您可以使用 -d 标志来指定不同的驱动程序。第三方卷驱动程序可作为插件使用。这些为 Docker 提供了无缝访问外部存储系统的能力,例如云存储服务和本地存储系统(包括 SAN 或 NAS)。
\n$ docker volume inspect myvol\n[\n{\n"CreatedAt": "2020-05-02T17:44:34Z",\n"Driver": "local",\n"Labels": {},\n"Mountpoint": "/var/lib/docker/volumes/myvol/_data",\n"Name": "myvol",\n"Options": {},\n"Scope": "local"\n}\n]\nRun Code Online (Sandbox Code Playgroud)\n请注意,驱动程序和范围都是本地的。这意味着该卷是使用本地驱动程序创建的,并且仅可供该 Docker 主机上的容器使用。Mountpoint 属性告诉我们卷存在于 Docker host\xe2\x80\x99s 文件系统中的哪个位置。
\n带绑定安装座
\nversion: '3.7'\nservices:\n maria_db:\n image: mariadb:10.4.13\n environment:\n MYSQL_ROOT_PASSWORD: Test123@123\n MYSQL_DATABASE: database\n ports:\n - 3306:3306\n volumes:\n - /etc/localtime:/etc/localtime:ro\n - ./data_mariadb/:/var/lib/mysql/ \n\nRun Code Online (Sandbox Code Playgroud)\n带卷安装
\nversion: "3.8"\nservices:\n web:\n image: mariadb:10.4.13\n volumes:\n - type: volume\n source: dbdata\n target: /var/lib/mysql/ \n\nvolumes:\n dbdata: \nRun Code Online (Sandbox Code Playgroud)\n绑定挂载说明
\n自 Docker 早期以来,绑定挂载就已经存在。与卷相比,绑定安装的功能有限。使用绑定挂载时,主机上的文件或目录将挂载到容器中。文件或目录由其在主机上的完整或相对路径引用。相比之下,当您使用卷时,会在主机上的 Docker\xe2\x80\x99s 存储目录中创建一个新目录,并且 Docker 管理该目录\xe2\x80\x99s 的内容。
\ntmpfs挂载说明
\n卷和绑定安装允许您在主机和容器之间共享文件,以便即使在容器停止后也可以保留数据。如果您\xe2\x80\x99在Linux上运行Docker,则有第三个选项:tmpfs挂载。当您创建带有 tmpfs 挂载的容器时,该容器可以在 container\xe2\x80\x99s 可写层之外创建文件。与卷和绑定挂载相反,tmpfs 挂载是临时的,仅保留在主机内存中。当容器停止时,tmpfs 挂载将被删除,写入其中的文件将不会被持久化。
\n卷解说
\n卷是持久保存 Docker 容器生成和使用的数据的首选机制。虽然绑定挂载依赖于主机的目录结构,但卷完全由 Docker 管理。
\n| 归档时间: |
|
| 查看次数: |
13197 次 |
| 最近记录: |