I dagens del av oversettelsen av serien om Docker skal vi snakke om håndtering av data. Spesielt om Docker-volumer. I disse materialene har vi kontinuerlig sammenlignet programvaremekanismene i Docker med forskjellige spiselige analogier. La oss ikke avvike fra denne tradisjonen her. Data i Docker kan tenkes på som krydder. Det finnes mange typer krydder i verden, og i Docker er det mange måter å håndtere data på.
→
→
→
→
→
→
Vær oppmerksom på at dette materialet er forberedt med Docker-motoren versjon 18.09.1 og API-versjon .
Data i Docker kan lagres enten midlertidig eller permanent. La oss begynne med midlertidige data.
Midlertidig lagring av data
I Docker-containere kan håndtering av midlertidige data organiseres på to måter.
Som standard lagres filene som opprettes av en applikasjon som kjører i en container i det skrivbare laget av containeren. For at denne mekanismen skal fungere, må det ikke settes opp noe spesielt. Det blir både rimelig og effektivt. Applikasjonen trenger bare å lagre dataene og fortsette med sitt arbeid. Men etter at containeren har opphørt å eksistere, vil også dataene lagret på denne enkle måten forsvinne.
For lagring av midlertidige filer i Docker kan man bruke en annen løsning, passende for tilfeller der det kreves høyere ytelse sammenlignet med det som kan oppnås med standard mekanisme for midlertidig datalagring. Hvis du ikke trenger at dataene dine lagres lenger enn containerens eksistens, kan du koble til tmpfs til containeren — et midlertidig datalager som bruker vertens RAM. Dette vil akselerere skrive- og leseoperasjoner.
Det skjer ofte at data må lagres selv etter at containeren har opphørt å eksistere. For dette trenger vi mekanismer for permanent datalagring.
Permanent datalagring
Det finnes to måter å forlenge levetiden til dataene på, utover containerens levetid. En av metodene innebærer bruk av bind mount-teknologi. Med denne tilnærmingen kan en ekte eksisterende mappe bli montert til containeren. Prosesser utenfor Docker vil kunne arbeide med dataene som er lagret i denne mappen. Slik å montere tmpfs og bind mount-teknologi.

Montering av tmpfs og bind mount
Ulempene med å bruke bind mount-teknologi er at det kompliserer sikkerhetskopiering av data, migrering av data og felles bruk av data mellom flere containere. Det er mye bedre å bruke Docker-volumer for permanent lagring av data.
Docker-volumer
Et volum er et filsystem som ligger på vertsmaskinen utenfor containerne. Oppretting og administrasjon av volumer håndteres av Docker. Her er de viktigste egenskapene til Docker-volumer:
- De representerer midler for permanent lagring av informasjon.
- De er selvstendige og adskilt fra containerne.
- De kan deles mellom forskjellige containere.
- De gjør det mulig å organisere effektiv lesing og skriving av data.
- Volumer kan plasseres på ressurser fra en ekstern skyleverandør.
- De kan krypteres.
- De kan få navn.
- Containeren kan organisere forhånds-fylling av volumet med data.
- De er praktiske for testing.
Som du ser, har Docker-volumer fantastiske egenskaper. La oss snakke om hvordan man kan opprette dem.
Oppretting av volumer
Volumer kan opprettes ved hjelp av Docker eller gjennom API-forespørsel.
Her er instruksjonen i Dockerfile som lar deg opprette et volum når containeren startes.
VOLUME /my_volumeVed å bruke en slik instruksjon i Docker, vil det etter opprettelsen av containeren bli opprettet et volum som inneholder dataene som allerede finnes på det spesifiserte stedet. Legg merke til at hvis du oppretter et volum ved hjelp av Dockerfile, fritar det deg ikke fra å spesifisere monteringspunktet for volumet.
Det er også mulig å opprette volumer i Dockerfile ved å bruke JSON-format.
I tillegg kan volumer opprettes ved hjelp av kommandolinjeverktøy under kjøring av containeren.
Arbeide med volumer fra kommandolinjen
▍Oppretting av volum
Et selvstendig volum kan opprettes med følgende kommando:
docker volume create --name my_volume▍Finne informasjon om volumer
For å se listen over Docker-volumer, bruk følgende kommando:
docker volume lsDu kan undersøke et spesifikt volum slik:
docker volume inspect my_volume▍Fjerning av volum
Du kan fjerne et volum slik:
docker volume rm my_volumeFor å fjerne alle volumer som ikke brukes av containere, kan du bruke følgende kommando:
docker volume pruneFør fjerning av Docker-volumer vil du bli bedt om å bekrefte utføringen av denne operasjonen.
Hvis volumet er knyttet til en hvilken som helst container, kan ikke dette volumet fjernes før den tilhørende containeren er fjernet. Selv om containeren er slettet, forstår ikke alltid Docker dette. Hvis dette skjer, kan du bruke følgende kommando:
docker system pruneDen er ment for å rydde opp i Docker-ressurser. Etter at du har kjørt denne kommandoen, skal du ha muligheten til å slette volumer hvis status tidligere var feil.
Flaggene —mount og —volume
For å arbeide med volumer, må du ofte bruke flaggene ved kjøring av kommandoen. docker, for eksempel, for å opprette et volum under opprettelse av en container, kan du bruke følgende konstruksjon:
docker container run --mount source=my_volume, target=\/container\/path\/for\/volume my_image I gamle dager (før 2017) var flagget --volume. Opprinnelig ble dette flagget (du kan fortsatt bruke det i forkortet form, da ser det ut som -v) brukt for selvstendige containere, mens flagget --mount — ble brukt i Docker Swarm-miljøet. Men siden Docker 17.06 kan flagget --mount brukes i alle scenarier.
Det er viktig å merke seg at bruken av flagget --mount øker volumet av ekstra data som må spesifiseres i kommandoen, men av flere grunner er det bedre å bruke dette flagget og ikke --volume. Flagget --mount er den eneste mekanismen som gjør det mulig å arbeide med tjenester eller angi parametere for volumdriveren. I tillegg er det enklere å jobbe med dette flagget.
I eksisterende eksempler på kommandoer som er rettet mot databehandling i Docker, kan du se mange eksempler på bruken av flagget -v. Når du prøver å tilpasse disse kommandoene til deg selv, må du ta hensyn til at flaggene --mount og --volume bruker forskjellige formater for parametere. Det vil si at du ikke bare kan bytte ut -v En funksjon har blitt --mount og få en arbeidende kommando.
Hovedforskjellen mellom --mount og --volume er at når flagget --volume brukes, samles alle parametrene sammen i ett felt, mens når det brukes. --mount parametere er adskilt.
Når du arbeider med --mount parametere presenteres som par med nøkkel-verdi, som ser slik ut key=value. Disse parene skilles med komma. Her er ofte brukte parametere --mount:
type— monteringstype. Verdien for nøkkelen kan være , eller . Vi snakker her om volumer, altså – vi er interessert i verdienvolumen.kilde— monteringskilde. For navngitte volumer er dette navnet på volumet. For unavngitte volumer oppgis ikke denne nøkkelen. Den kan forkortes tilsrc.destination— stien hvor filen eller mappen monteres i containeren. Denne nøkkelen kan forkortes tildstellermål.readonly— monterer volumet som er ment . Det er valgfritt å bruke denne nøkkelen, og den tildeles ikke en verdi.
Her er et eksempel på bruk --mount med mange parametere:
docker run --mount type=volume,source=volume_name,destination=\/path\/in\/container,readonly my_imageResultater
Her er nyttige kommandoer som kan brukes når man arbeider med Docker-volumer:
docker volume createdocker volume lsdocker volume inspectdocker volume rmdocker volume prune
Her er en liste over ofte brukte parametere for --mount, anvendelig i en kommando som ser slik ut docker run --mount my_options my_image:
type=volumesource=volume_namedestination=\/path\/in\/containerreadonly
Nå som vi har fullført denne serien med materialer om Docker, er det på tide å si et par ord om hvor de som studerer Docker kan gå videre. en god artikkel om Docker. en bok om Docker (når du kjøper denne boken, prøv å få tak i den nyeste utgaven). en annen bok som vil passe for de som mener at praksis er den beste måten å lære teknologier på.
Kjære lesere! Hvilke materialer om Docker ville du anbefale nybegynnere å studere?
Kilde: habr.com
