草庐IT

Dokcer14_5:Docker Compose volumes解析、Docker Compose volumes目录路径生成规则

郝开 2023-08-15 原文

Dokcer14_5:Docker Compose volumes解析、Docker Compose volumes目录路径生成规则

docker-compose volumes语法

在docker-compose.yml中,volumes键可以出现在两个不同的位置。

version: "3.9"

services:
  database:
    # ...
    volumes: # Nested key. Configures volumes for a particular service.【嵌套的key。为特定服务配置卷】

volumes: # Top-level key. Declares volumes which can be referenced from multiple services.【顶级的key。声明可以从多个服务引用的卷】

语法格式及其三种变体

volumes卷配置有一个简短的语法格式,定义为:

[SOURCE:]TARGET[:MODE]
  • SOURCE 可以是主机系统上的命名卷或(相对或绝对)路径。
  • TARGET 是容器中的绝对路径。
  • MODE 是一个挂载选项,可以是只读或读写。这个参数是可选的。ro(readonly 只读) 或 rw(默认:readwrite 可读可写) 改变读写权限

这种可选性导致您可以使用三种独特的变体来配置容器的卷。 Docker Compose 会识别出使用了哪种类型以及是使用卷还是绑定挂载。

1.无来源 :匿名挂载

例如:-v 容器内路径

# compose版本,向下兼容,我选的最高版本
version: "3.9"

# 定义服务
  service_A:
    # ...
    volumes: # 为特定服务配置卷
    - /var/www/html

当只指定一个目标而没有源时,Docker Compose 将创建一个 anonymous(匿名) 目录并将其作为卷挂载到容器内的目标路径。

主机系统上的目录路径

默认为/var/lib/docker/volumes/<uuid>/_data,其中<uuid>是分配给卷作为其名称的随机 ID。

2.非路径源:具名挂载(常用)

例如:-v 卷名:容器内路径

# compose版本,向下兼容,我选的最高版本
version: "3.9"

# 定义服务
  service_A:
    # ...
    volumes: # 为特定服务配置卷
    - service_A_html:/var/www/html

volumes: # 声明可以从多个服务引用的卷
  # 如果有service_A_html这个卷就会直接使用它,否则会创建一个新的卷并使用
  service_A_html: {}

如果存在源并且它不是路径,则 Docker Compose 假定您指的是命名卷。此卷需要在顶级volumes密钥声明的同一文件中声明。

顶级volumes键始终声明卷,从不绑定挂载。绑定坐骑没有名称,也无法命名。

主机系统上的目录路径

默认为/var/lib/docker/volumes/生成路径名/_data,其中生成路径名 = docker-compose.yml文件所在目录名_docker-compose.yml中volumes中具名挂载指定的命名卷名。
如果是在根目录执行,则生成文件夹名称为default。

使用docker-compose up -d运行docker-compose.yml时,docker-compose.yml所在的目录会加在这个命名中。

在nacos222中建立docker-compose.yml文件并执行
docker-compose.yml中volumes如下

数据卷如下

/var/lib/docker/volumes/nacos22_mysql_conf/_data
/var/lib/docker/volumes/nacos22_mysql_data/_data
/var/lib/docker/volumes/nacos22_mysql_init/_data

在根目录执行,生成文件夹名称为default

[root@VM-0-3-centos /]# docker volume ls
DRIVER    VOLUME NAME
local     default_mysql_conf
local     default_mysql_data
local     default_mysql_init
local     default_nacos_conf
local     default_nacos_log

3.路径源:指定路径挂载

例如:-v /容器外路径:/容器内路径

# compose版本,向下兼容,我选的最高版本
version: "3.9"

# 定义服务
  service_A:
    # ...
    volumes: # 为特定服务配置卷
    - /usr/local/service_A/html:/var/www/html

如果 source 是绝对或相对路径,Docker Compose 会将文件夹绑定到容器中。以.或…开头的相对路径相对于docker-compose.yml的位置。

不鼓励对数据库容器进行绑定挂载,因为这会降低它们的可移植性。绑定挂载特定于主机系统,Docker 不管理它们。官方文档有一个关于卷与绑定安装的部分,更详细地解释了两者之间的差异。

总结一下

Docker Compose 允许您使用简短的语法字符串来配置卷。无论您最终使用的是卷还是绑定挂载,都取决于您使用哪种简短的语法变体。

当您不指定源时,Docker Compose 将创建一个匿名卷。如果 source 不是路径,Docker Compose 将假定 source 是一个命名卷。相对或绝对路径的源被绑定安装到容器中。

有关Dokcer14_5:Docker Compose volumes解析、Docker Compose volumes目录路径生成规则的更多相关文章

  1. Ruby 解析字符串 - 2

    我有一个字符串input="maybe(thisis|thatwas)some((nice|ugly)(day|night)|(strange(weather|time)))"Ruby中解析该字符串的最佳方法是什么?我的意思是脚本应该能够像这样构建句子:maybethisissomeuglynightmaybethatwassomenicenightmaybethiswassomestrangetime等等,你明白了......我应该一个字符一个字符地读取字符串并构建一个带有堆栈的状态机来存储括号值以供以后计算,还是有更好的方法?也许为此目的准备了一个开箱即用的库?

  2. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  3. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  4. ruby - 用逗号、双引号和编码解析 csv - 2

    我正在使用ruby​​1.9解析以下带有MacRoman字符的csv文件#encoding:ISO-8859-1#csv_parse.csvName,main-dialogue"Marceu","Giveittohimóhe,hiswife."我做了以下解析。require'csv'input_string=File.read("../csv_parse.rb").force_encoding("ISO-8859-1").encode("UTF-8")#=>"Name,main-dialogue\r\n\"Marceu\",\"Giveittohim\x97he,hiswife.\"\

  5. ruby - 在 jRuby 中使用 'fork' 生成进程的替代方案? - 2

    在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',

  6. ruby - 如何使用 Ruby aws/s3 Gem 生成安全 URL 以从 s3 下载文件 - 2

    我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A

  7. ruby-on-rails - active_admin 目录中的常量警告重新声明 - 2

    我正在使用active_admin,我在Rails3应用程序的应用程序中有一个目录管理,其中包含模型和页面的声明。时不时地我也有一个类,当那个类有一个常量时,就像这样:classFooBAR="bar"end然后,我在每个必须在我的Rails应用程序中重新加载一些代码的请求中收到此警告:/Users/pupeno/helloworld/app/admin/billing.rb:12:warning:alreadyinitializedconstantBAR知道发生了什么以及如何避免这些警告吗? 最佳答案 在纯Ruby中:classA

  8. ruby-on-rails - Ruby on Rails - 为文本区域和图片生成列 - 2

    我是Rails的新手,所以请原谅简单的问题。我正在为一家公司创建一个网站。那家公司想在网站上展示它的客户。我想让客户自己管理这个。我正在为“客户”生成一个表格,我想要的三列是:公司名称、公司描述和Logo。对于名称,我使用的是name:string但不确定如何在脚本/生成脚手架终端命令中最好地创建描述列(因为我打算将其设置为文本区域)和图片。我怀疑描述(我想成为一个文本区域)应该仍然是描述:字符串,然后以实际形式进行调整。不确定如何处理图片字段。那么……说来话长:我在脚手架命令中输入什么来生成描述和图片列? 最佳答案 对于“文本”数

  9. ruby-on-rails - 我更新了 ruby​​ gems,现在到处都收到解析树错误和弃用警告! - 2

    简而言之错误:NOTE:Gem::SourceIndex#add_specisdeprecated,useSpecification.add_spec.Itwillberemovedonorafter2011-11-01.Gem::SourceIndex#add_speccalledfrom/opt/local/lib/ruby/site_ruby/1.8/rubygems/source_index.rb:91./opt/local/lib/ruby/gems/1.8/gems/rails-2.3.8/lib/rails/gem_dependency.rb:275:in`==':und

  10. ruby-on-rails - 如何生成传递一些自定义参数的 `link_to` URL? - 2

    我正在使用RubyonRails3.0.9,我想生成一个传递一些自定义参数的link_toURL。也就是说,有一个articles_path(www.my_web_site_name.com/articles)我想生成如下内容:link_to'Samplelinktitle',...#HereIshouldimplementthecode#=>'http://www.my_web_site_name.com/articles?param1=value1¶m2=value2&...我如何编写link_to语句“alàRubyonRailsWay”以实现该目的?如果我想通过传递一些

随机推荐