Администрирование Windows Docker Desktop: сохранение данных контейнера Sat, December 21 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


Docker Desktop: сохранение данных контейнера Печать
Добавил(а) microsin   

Когда контейнер запускается, он использует файлы и конфигурацию, предоставляемые образом. Каждый контейнер может создавать, модифицировать и удалять свои файлы, и это никак не влияет на любые другие контейнеры. Когда контейнер удаляется, то эти изменения файлов также удаляются.

Хотя эта базовая особенность контейнеров очень полезна, она создает трудности, когда вы хотите сохранить измененные данные. Например, если вы перезапустите контейнер базы данных, то можете не захотеть, чтобы база данных осталась пустой. Итак, как можно сохранить файлы контейнера?

[Container volumes]

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

В качестве примера создадим volume с именем log-data:

$ docker volume create log-data

Когде следующая команда запускает контейнер, volume будет смонтирован (или присоединен) в контайнер в каталог /logs:

$ docker run -d -p 80:80 -v log-data:/logs docker/welcome-to-docker

Если volume с именем log-data не существует, то Docker автоматически его создаст.

Когда контейнер запускается, все файлы, которые он записывает в папку /logs, будут сохраняться в этот volume, находящийся вне контейнера. Если вы удалите контейнер, и запустите новый контейнер с тем же volume, то файлы все еще будут находиться в том же месте.

Обмен файлами с помощью volume. Вы можете присоединить один и тот же volume к нескольким контейнерам, чтобы сделать файлы общими для этих контейнеров. Это может оказаться полезным для таких сценариев, как аггрегация лога, организация конвейеров данных, или другие управляемые событиями приложения.

Управление Volume. У томов свой собственный жизненный цикл, независимый от контейнеров (в том смысле, что том и его содержимое может сохраняться при создании и удалении контейнеров, подключенным к тому). Если том сохраняется долго, то в течение его жизни его размер может значительно увеличиться, в зависимости от типа данных, хранящихся в томе, и от его приложения. Следующие команды помогают управлять томами:

Команда                                                        Описание
docker volume ls Выведет список всех томов.
docker volume rm < volume-name-or-id> Удалит том, указанный по имени или по ID (команда сработает только в том случае, если том не подсоединен к какому-либо контейнеру).
docker volume prune Удалит все не используемые (не подключенные) тома.

[Практический пример]

По следующему пошаговому руководству можно научиться создавать и использовать тома, чтобы сохранить в томе данные, созданными контейнером Postgres. Когда база данных запущена, она сохраняет файлы в директории /var/lib/postgresql/data. Путем подключения в неё тома, вы сможете перезапускать контейнер несколько раз, сохраняя накопленные в базе данные.

Использование томов

1. Загрузите и установите Docker Desktop [4].

2. Создайте и запустите контейнер с именем db, используя образ Postgres, следующей командой:

$ docker run --name=db -e POSTGRES_PASSWORD=secret -d -v postgres_data:/var/lib/postgresql/data postgres

Эта команда запустит в фоновом режиме сервер базы данных, сконфигурирует доступ к базе данных по паролю, и подсоединит том к директории PostgreSQL, где будут постоянно находиться файлы базы данных.

3. Подключитесь к базе данных следующей командой:

$ docker exec -ti db psql -U postgres

4. В командной строке PostgreSQL запустите следующее, чтобы создать таблицу в базе данных, и вставить в неё 2 записи:

CREATE TABLE tasks (
    id SERIAL PRIMARY KEY,
    description VARCHAR(100)
);
INSERT INTO tasks (description) VALUES ('Finish work'), ('Have fun');

5. Проверьте, что данные попали в базу, запустив следующее в командной строке PostgreSQL:

SELECT * FROM tasks;

Вы должны получить следующий вывод:

 id | description
----+-------------
  1 | Finish work
  2 | Have fun
(2 rows)

6. Выйдите из шелла PostgreSQL с помощью следующей команды:

\q

7. Остановите и удалите контейнер базы данных. Помните, что даже когда контейнер был удален, данные тома, с которыми он работал, остаются целыми на компьютере хоста в томе postgres_data.

$ docker stop db
$ docker rm db

8. Запустите новый контейнер new-db, присоединив к нему тот же самый том, где должны были сохраниться данные базы:

$ docker run --name=new-db -d -v postgres_data:/var/lib/postgresql/data postgres

Вы возможно заметили, что опущена переменная окружения POSTGRES_PASSWORD, которая указывалась на шаге 2 при создании и запуске контейнера db. Причина в том, что эта переменная используется только при загрузке новой базы данных.

9. Проверьте, что в базе данных все еще остаются записи, запуском следующей команды:

$ docker exec -ti new-db psql -U postgres -c "SELECT * FROM tasks"

Просмотр содержимого тома

Docker Desktop Dashboard предоставляет возможность как просмотреть содержимое любого тома, так и возможности экспортировать, импортировать и клонировать тома.

1. Откройте Docker Desktop Dashboard, и перейдите в раздел списка томов Volumes. Здесь вы должны увидеть ранее созданный том postgres_data.

2. Выберите имя тома postgres_data.

3. Закладка Data покажет содержимое выбранного тома, и предоставляет возможность навигации по его файлам. Двойным кликом на файле вы можете увидеть его содержимое, и можете внести изменения.

4. Правым кликом на любом файле вы можете сохранить его или удалить.

Удаление томов

Перед удалением тома необходимо убедиться, что он не присоединен ни к одному из контейнеров. Если вы не удалили предыдущий контейнер, то сделайте это следующей командой (флаг -f предварительно остановит контейнер перед его удалением):

$ docker rm -f new-db

Для удаления томов существует несколько методов, включая следующие:

• Выбор опции Delete Volume на томе в Docker Desktop Dashboard.

• Использование команды docker volume rm:

$ docker volume rm postgres_data

• Использование команды docker volume prune, которая удалит все не используемые тома:

$ docker volume prune

[Дополнительные ресурсы]

Следуюшие ресурсы помогут вам узнать больше про тома:

Manage data in Docker
Volumes
Volume mounts

[Ссылки]

1. Persisting container data site:docs.docker.com.
2. Docker Desktop: обмен файлами между Windows и контейнерами Linux.
3. Шаринг локальных файлов хоста для контейнеров.
4. Установка Docker Desktop на Windows.

 

Добавить комментарий


Защитный код
Обновить

Top of Page