Обучаване на Docker, част 6: Работа с данни

В днешната част от превода на поредица от материали за Docker ще говорим за работа с данни. По-специално относно обемите на Docker. В тези материали ние постоянно сравнявахме механизмите за програмиране на Docker с различни ядивни аналогии. Тук няма да се отклоняваме от тази традиция. Нека данните в Docker бъдат подправки. В света има много подправки и Docker има много начини за работа с данни.

Част 1: Основите
Част 2: термини и понятия
Част 3: Docker файлове
Част 4: Намаляване на размера на изображенията и ускоряване на тяхното сглобяване
Част 5: команди
Част 6: работа с данни

Обучаване на Docker, част 6: Работа с данни

Моля, имайте предвид, че този материал е подготвен с помощта на Docker engine версия 18.09.1 ​​​​и API версия 1.39.

Данните в Docker могат да се съхраняват временно или постоянно. Да започнем с временни данни.

Временно съхранение на данни

Има два начина за управление на временни данни в Docker контейнери.

По подразбиране файловете, създадени от приложение, работещо в контейнер, се съхраняват в контейнерен слой с възможност за запис. За да работи този механизъм, не е необходимо да се конфигурира нищо специално. Оказва се евтино и весело. Приложението просто трябва да запази данните и да продължи да прави своите неща. Въпреки това, след като контейнерът престане да съществува, данните, записани по такъв прост начин, също ще изчезнат.

Временното съхранение на файлове в Docker е друго решение, което е подходящо за случаи, когато се изисква по-високо ниво на производителност в сравнение с това, което е постижимо с помощта на стандартния механизъм за временно съхранение на данни. Ако не е необходимо вашите данни да се съхраняват по-дълго от съществуването на контейнера, можете да се свържете с контейнера tmpfs - временно хранилище за информация, което използва RAM на хоста. Това ще ускори изпълнението на операциите за писане и четене на данни.

Често се случва данните да се съхраняват дори след като контейнерът престане да съществува. За да направим това, се нуждаем от постоянни механизми за съхранение на данни.

Постоянно съхранение на данни

Има два начина да направите живота на данните по-дълъг от живота на контейнера. Един от начините е да използвате технологията за свързване. С този подход можете да монтирате например реална папка към контейнера. Процесите извън Docker също ще могат да работят с данни, съхранявани в такава папка. Ето как виж tmpfs монтиране и технология за монтиране на свързване.

Обучаване на Docker, част 6: Работа с данни
Монтиране на tmpfs и свързване на монтиране

Недостатъците на използването на технологията за свързване на монтиране са, че използването й усложнява архивирането на данни, миграцията на данни, споделянето на данни между няколко контейнера. Много по-добре е да използвате Docker томове за постоянно съхранение на данни.

Докер за томове

Томът е файлова система, която се намира на хост машината извън контейнерите. Томовете се създават и управляват от Docker. Ето основните свойства на томовете на Docker:

  • Те са средство за постоянно съхранение на информация.
  • Те са независими и отделени от контейнери.
  • Те могат да се споделят между различни контейнери.
  • Те ви позволяват да организирате ефективно четене и запис на данни.
  • Томовете могат да бъдат поставени на ресурсите на отдалечен доставчик на облак.
  • Те могат да бъдат криптирани.
  • Могат да им бъдат дадени имена.
  • Контейнерът може да организира предварително попълване на тома с данни.
  • Удобни са за тестване.

Както можете да видите, томовете на Docker имат невероятни свойства. Нека поговорим как да ги създадем.

Създаване на томове

Обемите могат да се създават с помощта на Docker или API заявки.

Ето една инструкция в Dockerfile, която ви позволява да създадете том при стартиране на контейнер.

VOLUME /my_volume

Когато използва подобна инструкция, Docker, след като създаде контейнера, ще създаде том, съдържащ данните, които вече съществуват на посоченото място. Имайте предвид, че ако създадете том с помощта на Dockerfile, това не ви освобождава от необходимостта да посочите точката на монтиране на тома.

Можете също да създавате томове в Dockerfile, като използвате JSON формата.

Освен това могат да се създават томове с помощта на инструменти на командния ред, докато контейнерът работи.

Работа с томове от командния ред

▍Създаване на обем

Можете да създадете самостоятелен том със следната команда:

docker volume create —-name my_volume

▍Намерете информация за обемите

За да видите списък с Docker томове, използвайте следната команда:

docker volume ls

Можете да изследвате конкретен том по следния начин:

docker volume inspect my_volume

▍Изтриване на том

Можете да изтриете том като този:

docker volume rm my_volume

За да премахнете всички томове, които не се използват от контейнери, можете да прибегнете до следната команда:

docker volume prune

Преди да изтриете томове, Docker ще ви помоли да потвърдите тази операция.

Ако том е свързан с контейнер, този том не може да бъде изтрит, докато съответният контейнер не бъде изтрит. В същото време, дори ако контейнерът е премахнат, Docker не винаги разбира това. Ако това се случи, можете да използвате следната команда:

docker system prune

Той е предназначен да почиства ресурсите на Docker. След като изпълните тази команда, трябва да можете да изтриете томове, чието състояние преди това е било неправилно.

Флаговете --mount и --volume

За да работите с обеми, когато извикате командата docker, често ще трябва да използвате флагове. Например, за да създадете обем по време на създаване на контейнер, можете да използвате тази конструкция:

docker container run --mount source=my_volume, target=/container/path/for/volume my_image

В древни времена (до 2017 г.) знамето беше популярно --volume. Първоначално този флаг (може да се използва и в съкратена форма, след това изглежда -v) се използва за самостоятелни контейнери, а флагът --mount - в среда на Docker Swarm. Въпреки това, считано от Docker 17.06, флагът --mount може да се използва във всеки сценарий.

Трябва да се отбележи, че при използване на знамето --mount количеството допълнителни данни, които трябва да бъдат посочени в командата, се увеличава, но поради няколко причини е по-добре да използвате този конкретен флаг, а не --volume. Флаг --mount е единственият механизъм, който ви позволява да работите с услуги или да задавате опции на драйвера за обем. Освен това с този флаг се работи по-лесно.

В съществуващите примери за команди за манипулиране на данни на Docker можете да видите много примери за използване на флага -v. Когато се опитвате да адаптирате тези команди за себе си, имайте предвид, че флаговете --mount и --volume използвайте различни формати на параметри. Тоест не можете просто да замените -v на --mount и да получите работещ екип.

Основната разлика между --mount и --volume е, че при използване на знамето --volume всички параметри се събират заедно в едно поле и при използване --mount параметрите са разделени.

При работа с --mount параметрите са представени като двойки ключ-стойност, а именно изглежда така key=value. Тези двойки са разделени със запетаи. Ето често използваните опции --mount:

  • type — тип монтиране. Стойността за съответния ключ може да бъде обвърже, сила на звука или tmpfs. Тук говорим за обеми, тоест стойността ни интересува volume.
  • source - източник на монтиране. За именувани томове това е името на тома. За неименувани томове този ключ не е посочен. Може да се съкрати до src.
  • destination - пътя, към който е монтиран файлът или папката в контейнера. Този ключ може да бъде съкратен до dst или target.
  • readonly - монтира обема, който е предназначен само за четене. Използването на този ключ не е задължително и не му се присвоява стойност.

Ето пример за употреба --mount с много опции:

docker run --mount type=volume,source=volume_name,destination=/path/in/container,readonly my_image

Резултати от

Ето някои полезни команди, които можете да използвате, когато работите с Docker томове:

  • docker volume create
  • docker volume ls
  • docker volume inspect
  • docker volume rm
  • docker volume prune

Ето списък с често използвани опции за --mount, приложим в команда на формата docker run --mount my_options my_image:

  • type=volume
  • source=volume_name
  • destination=/path/in/container
  • readonly

Сега, след като завършихме тази поредица от Docker, време е да кажем няколко думи за това къде могат да отидат обучаемите в Docker. тук е страхотна добра статия за Docker. тук е книга за Docker (когато купувате тази книга, опитайте се да вземете най-новото й издание). тук е още една книга за тези, които смятат, че практиката е най-добрият начин за изучаване на технологии.

Уважаеми читатели! Какви Docker материали бихте препоръчали на начинаещите да научат?

Обучаване на Docker, част 6: Работа с данни

Източник: www.habr.com

Добавяне на нов коментар