Использование Docker -объема с монтированием на символическую ссылку, но это тоже сохранение данных на хосте. Почему? - PullRequest
1 голос
/ 18 марта 2020

Я создал том Docker следующим образом:

sudo docker volume create --driver=local --name=es-data1 --opt type=none --opt o=bind --opt device=/usr/local/contoso/data1/elasticsearch/data1
  • /usr/local/contoso/data1/elasticsearch/data1 - это символическая ссылка.

И я создаю три экземпляра Elasticsearch Docker контейнеры в моем docker-compose.yml файле как таковые:

version: '3.7'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.6.0
    logging:
      driver: none
    container_name: elasticsearch1
    environment:
      - node.name=elasticsearch1
      - cluster.name=docker-cluster
      - cluster.initial_master_nodes=elasticsearch1
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms1G -Xmx1G"
      - http.cors.enabled=true
      - http.cors.allow-origin=*
      - network.host=_eth0_          
    ulimits:
      nproc: 65535
      memlock:
        soft: -1
        hard: -1
    cap_add:
      - ALL
    # privileged: true
    deploy:
      replicas: 1
      update_config:
        parallelism: 1
        delay: 10s
      resources:
        limits:
          cpus: '1'
          memory: 1G
        reservations:
          cpus: '1'
          memory: 1G
      restart_policy:
        condition: unless-stopped
        delay: 5s
        max_attempts: 3
        window: 10s
    volumes:
      - es-logs:/var/log
      - es-data1:/usr/share/elasticsearch/data
    networks:
      - elastic
      - ingress
    ports:
      - 9200:9200
      - 9300:9300
    healthcheck:
      test: wget -q -O - http://127.0.0.1:9200/_cat/health
  elasticsearch2:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.6.0
    logging:
      driver: none
    container_name: elasticsearch2
    environment:
      - node.name=elasticsearch2
      - cluster.name=docker-cluster
      - cluster.initial_master_nodes=elasticsearch1
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms1G -Xmx1G"
      - "discovery.zen.ping.unicast.hosts=elasticsearch1"
      - http.cors.enabled=true
      - http.cors.allow-origin=*
      - network.host=_eth0_          
    ulimits:
      nproc: 65535
      memlock:
        soft: -1
        hard: -1
    cap_add:
      - ALL
    # privileged: true
    deploy:
      replicas: 1
      update_config:
        parallelism: 1
        delay: 10s
      resources:
        limits:
          cpus: '1'
          memory: 1G
        reservations:
          cpus: '1'
          memory: 1G
      restart_policy:
        condition: unless-stopped
        delay: 5s
        max_attempts: 3
        window: 10s
    volumes:
      - es-logs:/var/log
      - es-data2:/usr/share/elasticsearch/data
    networks:
      - elastic
      - ingress
    ports:
      - 9201:9200
    healthcheck:
      test: wget -q -O - http://127.0.0.1:9200/_cat/health
  elasticsearch3:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.6.0
    logging:
      driver: none
    container_name: elasticsearch3
    environment:
      - node.name=elasticsearch3
      - cluster.name=docker-cluster
      - cluster.initial_master_nodes=elasticsearch1
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms1G -Xmx1G"
      - "discovery.zen.ping.unicast.hosts=elasticsearch1"
      - http.cors.enabled=true
      - http.cors.allow-origin=*
      - network.host=_eth0_          
    ulimits:
      nproc: 65535
      memlock:
        soft: -1
        hard: -1
    cap_add:
      - ALL
    # privileged: true
    deploy:
      replicas: 1
      update_config:
        parallelism: 1
        delay: 10s
      resources:
        limits:
          cpus: '1'
          memory: 1G
        reservations:
          cpus: '1'
          memory: 1G
      restart_policy:
        condition: unless-stopped
        delay: 5s
        max_attempts: 3
        window: 10s
    volumes:
      - es-logs:/var/log
      - es-data3:/usr/share/elasticsearch/data
    networks:
      - elastic
      - ingress
    ports:
      - 9202:9200
    healthcheck:
      test: wget -q -O - http://127.0.0.1:9200/_cat/health
volumes:
  es-data1:
    driver: local
    external: true
  es-data2:
    driver: local
    external: true
  es-data3:
    driver: local
    external: true
  es-logs:
    driver: local
    external: true     
networks:
  elastic:
    external: true
  ingress:
    external: true

Моя проблема:

  • Контейнеры Elasticsearch сохраняют данные индекса в оба файловая система хоста и смонтированная символическая ссылка.

Мой вопрос:

  • Как изменить мою конфигурацию так, чтобы контейнеры Elasticsearch были только постоянный индекс данные на смонтированную символическую ссылку?

1 Ответ

2 голосов
/ 21 марта 2020

Поведение драйвера тома local по умолчанию выглядит так, что файлы дополнительно хранятся на хост-компьютере. Вы можете изменить настройки громкости в docker-compose.yml, чтобы docker не сохранял (не копировал) файлы в файловой системе хоста (см. nocopy: true), например:

version: '3.7'
services:
  elasticsearch:
    ....
    volumes:
      - type: volume
        source: es-data1
        target: /usr/share/elasticsearch/data
        volume:
          nocopy: true
    ....
volumes:
  es-data1:
    driver: local
    external: true

Вы также можете хочу проверить этот вопрос здесь: Docker -compose - локальное значение драйвера томов . Так что, похоже, есть некоторые docker плагины тома, которые сделаны специально по причинам переносимости; такие как flocker или hedvig . Но я не использовал плагин для этой цели, поэтому пока не могу его порекомендовать.

...