Docker 卷与配置?

Mom*_*oke 7 docker docker-compose

我从 docker 开始,不明白卷和配置之间的区别。

https://docs.docker.com/compose/compose-file/#volumes-top-level-element

https://docs.docker.com/compose/compose-file/#configs-top-level-element(在 docker compose 3.3 版本中添加)

例如,如果配置文件用于不同的服务,是否应该定义配置属性?

什么情况下适用?

例如,与卷共享 Apache 根文档 (/usr/local/apache2/htdocs):

version: '3.8'

services:

  apache:
    image: httpd:2.4
    restart: always
    ports:
      - 8000:80
    volumes:
      - ./:/usr/local/apache2/htdocs
      - php-socket:/run/php
    depends_on:
      - php-fpm
    networks:
      - code

  php-fpm:
    image: php:7.4-fpm
    restart: always
    ports:
      - 9000:9000
    volumes:
      - ./:/usr/local/apache2/htdocs
      - ./.docker/php-fpm/zz-docker.conf:/usr/local/etc/php-fpm.d/zz-docker.conf
      - php-socket:/run/php
    networks:
      - code

volumes:
  php-socket:

networks:
  code:
Run Code Online (Sandbox Code Playgroud)

与 configs 属性有什么区别?:

version: '3.8'

services:

  apache:
    image: httpd:2.4
    restart: always
    ports:
      - 8000:80
    volumes:
      - php-socket:/run/php
    configs:
      - source: apache-www
        target: /usr/local/apache2/htdocs
    depends_on:
      - php-fpm
    networks:
      - code

  php-fpm:
    image: php:7.4-fpm
    restart: always
    ports:
      - 9000:9000
    volumes:
      - ./.docker/php-fpm/zz-docker.conf:/usr/local/etc/php-fpm.d/zz-docker.conf
      - php-socket:/run/php
    configs:
      - source: apache-www
        target: /usr/local/apache2/htdocs
    networks:
      - code

volumes:
  php-socket:

configs:
  apache-www:
    file: ./

networks:
  code:
Run Code Online (Sandbox Code Playgroud)

上面的两个例子有效,但我不明白卷和配置之间的区别?

谁能给我解释一下吗?谢谢 !

BMi*_*tch 5

添加了 Swarm 模式的配置。它们是添加到 swarm 中的不可变对象,在需要时被推送到工作节点,并作为文件安装在容器中。他们解决了您要挂载的文件可能不在集群中的工作节点上的问题。

如果您不使用 Swarm 模式,则可能不需要任何 v3 语法,并且可以坚持使用 v2 或 compose-spec 并将文件直接挂载为卷。您会发现较新版本的 compose 添加了兼容性功能,可以使用 compose 中的类似功能来处理为 Swarm 编写的 compose 文件,从而有效地将这些文件视为卷挂载。