Postgres Исследование Dockerfile - использование оператора VOLUME - PullRequest
0 голосов
/ 02 мая 2020

Я просматриваю пример файла Dockerfile, чтобы увидеть, как используется VOLUME, я сталкиваюсь со следующими строками: - https://github.com/docker-library/postgres/blob/master/Dockerfile-alpine.template

ENV PGDATA /var/lib/postgresql/data
# this 777 will be replaced by 700 at runtime (allows semi-arbitrary "--user" values)
RUN mkdir -p "$PGDATA" && chown -R postgres:postgres "$PGDATA" && chmod 777 "$PGDATA"
VOLUME /var/lib/postgresql/data

Какова цель использования тома здесь мое понимание - пожалуйста подтвердите

  1. Создайте каталог, на который указывает $ PGDATA, в файловой системе изображения.
  2. Сопоставьте его с ОБЪЕМОМ, чтобы любой контент, созданный позже как часть заполнения полное содержание docker -entrypont. sh, предоставляя предопределенный каталог, который может использоваться контейнером.

Что если VOLUME instr не определен? Для кого-то может быть труднее выяснить, где хранить пользовательские изменения, если VOLUME не определен

1 Ответ

1 голос
/ 02 мая 2020

Объем определяется здесь, поэтому, когда вы запускаете контейнер (из этого изображения), создается новый анонимный том.

Том будет содержать разумные данные в этом отношении, так что это все, что вам нужно "сохраняться" в целом из этого образа базы данных.

Обычно, когда сопровождающие docker изображений уже знают, где находятся данные, которые будет целесообразно сохранить (как здесь), они будут украшать папка, использующая VOLUME в Dockerfile. Это, как уже упоминалось, создаст анонимный том во время выполнения, но также заставит вас знать (используя docker inspect или читая Dockerfile), где находятся тома для сохранения.

В работе вы обычно будете использовать именованный том / путь монтирования в вашем docker -компонентном файле, подключенном к этой самой папке

docker-compose.yml как именованный том

volumes:
  mydbdata:/var/lib/postgresql/data

docker-compose.yml как путь

volumes:
  ./local/path/data:/var/lib/postgresql/data

Есть на самом деле недостатки в определении таких VOLUME определений в Dockerfile, которые я не буду здесь подробно описывать, но основная причина - «время жизни».

Отсутствие VOLUME в Dockerfile и выполнение

docker-compose up -d
# do something, manipulate the data
docker-compose down

# all your data would be lost when starting again
docker-compose up -d

Удалит не только работающий контейнер, но и все данные вашей БД, которые могут не соответствовать вашим ожиданиям (вы просто хотели воссоздать контейнеры).

С VOLUME in Dockerfile, anon-том будет сохраняться даже в течение docker-compose down

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...