Вывучаем Docker, частка 6: праца з дадзенымі

У сённяшняй частцы перакладу серыі матэрыялаў аб Docker мы пагаворым аб працы з дадзенымі. У прыватнасці - аб тамах Docker. У гэтых матэрыялах мы ўвесь час параўноўвалі праграмныя механізмы Docker з рознымі ядомымі аналогіямі. Не будзем адыходзіць ад гэтай традыцыі і тут. Дадзеныя ў Docker няхай будуць спецыямі. У свеце існуе мноства выглядаў спецый, а ў Docker - мноства спосабаў працы з дадзенымі.

Частка 1: асновы
Частка 2: тэрміны і канцэпцыі
Частка 3: файлы Dockerfile
Частка 4: памяншэнне памераў выяў і паскарэнне іх зборкі
Частка 5: каманды
Частка 6: праца з дадзенымі

Вывучаем Docker, частка 6: праца з дадзенымі

Звернеце ўвагу на тое, што гэты матэрыял падрыхтаваны з выкарыстаннем рухавічка Docker версіі 18.09.1 ​​і API версіі. 1.39.

Дадзеныя ў Docker могуць захоўвацца альбо часова, альбо ўвесь час. Пачнём з часовых дадзеных.

Часовае захоўванне дадзеныя

У кантэйнерах Docker арганізаваць працу з часавымі дадзенымі можна двума спосабамі.

Па змаўчанні файлы, якiя ствараюцца дадаткам, якія працуюць у кантэйнеры, захоўваюцца ў пласце кантэйнера, які падтрымлівае запіс. Для таго каб гэты механізм працаваў, нічога спецыяльна настройваць не трэба. Атрымліваецца танна і злосна. Дадаткам дастаткова проста захаваць дадзеныя і працягнуць займацца сваімі справамі. Аднак пасля таго як кантэйнер перастане існаваць, знікнуць і дадзеныя, захаваныя такім вось няхітрым спосабам.

Для захоўвання часавых файлаў у Docker можна скарыстацца яшчэ адным рашэннем, прыдатным для тых выпадкаў, калі патрабуецца больш высокі ўзровень прадукцыйнасці, у параўнанні з тым, які дасягальны пры выкарыстанні стандартнага механізму часавага захоўвання дадзеных. Калі вам не трэба, каб вашыя дадзеныя захоўваліся б даўжэй, чым існуе кантэйнер, вы можаце падлучыць да кантэйнера tmpfs - часовае сховішча інфармацыі, якое выкарыстоўвае аператыўную памяць хаста. Гэта дазволіць паскорыць выкананне аперацый па запісе і чытанні звестак.

Часта бывае так, што дадзеныя трэба захоўваць і пасля таго, як кантэйнер перастане існаваць. Для гэтага нам спатрэбяцца механізмы сталага захоўвання дадзеных.

Пастаяннае захоўванне дадзеных

Існуюць два спосабу, якія дазваляюць зрабіць тэрмін жыцця дадзеных вялікім тэрміна жыцця кантэйнера. Адзін са спосабаў заключаецца ў выкарыстанні тэхналогіі bind mount. Пры такім падыходзе да кантэйнера можна прымантаваць, напрыклад, рэальна існую тэчку. Працаваць з дадзенымі, якія захоўваюцца ў такой тэчцы, змогуць і працэсы, якія знаходзяцца за межамі Docker. Вось так выглядаюць мантаванне tmpfs і тэхналогія bind mount.

Вывучаем Docker, частка 6: праца з дадзенымі
Мантаванне tmpfs і bind mount

Мінусы выкарыстання тэхналогіі bind mount складаюцца ў тым, што яе выкарыстанне ўскладняе рэзервовае капіраванне дадзеных, міграцыю дадзеных, сумеснае выкарыстанне дадзеных некалькімі кантэйнерамі. Значна лепш для пастаяннага захоўвання дадзеных выкарыстоўваць тамы Docker.

Тома 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: праца з дадзенымі

Крыніца: habr.com

Дадаць каментар