了解Docker Compose中的卷

时间:2019-02-04 15:02:35

标签: docker

以下是https://docker-curriculum.com/

中给出的示例
version: "3"
services:
  es:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.3.2
    container_name: es
    environment:
      - discovery.type=single-node
    ports:
      - 9200:9200
    volumes:
      - esdata1:/usr/share/elasticsearch/data
  web:
    image: prakhar1989/foodtrucks-web
    command: python app.py
    depends_on:
      - es
    ports:
      - 5000:5000
    volumes:
      - ./flask-app:/opt/flask-app
volumes:
    esdata1:
      driver: local

它说The volumes parameter specifies a mount point in our web container where the code will reside关于/opt/flask-app

我认为这意味着/opt/flask-app是一个安装点,它指向主机./flask-app

但是它没有对esdata1进行任何说明,并且由于主机中没有/opt/flask-app目录/文件,因此我无法应用与esdata1相同的解释。< / p>

esdata1发生了什么? 我的猜测是,这意味着创建一个卷(我能想到的最接近的是磁盘分区)并将其命名为esdata1并将其安装在/usr/share/elasticsearch/data上,我是否正确?

1 个答案:

答案 0 :(得分:0)

这些有点不同:volumesbind mounts。绑定挂载使您可以指定主机计算机上的文件夹,该文件夹将用作存储。卷(local驱动程序的租用)在主机上也有文件夹,但是它们的位置由Docker管理,有时很难找到。

docker-compose.yml中指定音量时,如果路径以/.开头,则它将变为bind mount,就像web服务中一样。否则,如果它是单个动词,则它是volume,就像es服务一样。

您可以通过运行docker volume ls来检查主机上的所有卷。

  

esdata1发生了什么?我的猜测是,这意味着创造   一个卷(我能想到的最接近的是磁盘分区)和   将其命名为esdata1并将其安装在/ usr / share / elasticsearch / data上,是吗?   对这个猜测正确吗?

完全正确。

我不假装设置规则,但总的来说,volumes更适合在多个容器之间共享公共数据,例如docker-compose,而bind mounts套件更适合从主机到容器共享数据,例如一些服务的初始配置。