Docker
Datavolymer och databehållare
Sök…
Data-endast behållare
Behållare med endast data är föråldrade och betraktas nu som ett antimönster!
I forna dagar, innan Docker s volume
och innan det var möjligt att skapa namngivna volymer Docker raderade volymer när det inte fanns några fler referenser till dem i alla behållare. Behållare med endast data är föråldrade eftersom Docker nu ger möjlighet att skapa namngivna volymer, såväl som mycket mer användbarhet via de olika docker volume
dockningsvolym. Data-endast behållare anses nu vara ett antimönster av detta skäl.
Många resurser på webben under de senaste åren nämner att använda ett mönster som kallas en "data-endast behållare", som helt enkelt är en Docker-behållare som bara finns för att hålla en referens till en datavolym runt.
Kom ihåg att i detta sammanhang är en "datavolym" en Docker-volym som inte är monterad från värden. För att klargöra är en "datavolym" en volym som skapas antingen med VOLUME
Dockerfile-direktivet eller med -v
omkopplaren på kommandoraden i ett docker run
, specifikt med formatet -v /path/on/container
. Därför är en "data-endast behållare" en behållare vars enda syfte är att ha en datavolym bifogad, som används av - --volumes-from
flaggan i ett docker run
. Till exempel:
docker run -d --name "mysql-data" -v "/var/lib/mysql" alpine /bin/true
När kommandot ovan körs skapas en "data-endast behållare". Det är helt enkelt en tom behållare som har en datavolym bifogad. Det var då möjligt att använda denna volym i en annan behållare så:
docker run -d --name="mysql" --volumes-from="mysql-data" mysql
mysql
behållaren har nu samma volym i den som också finns i mysql-data
.
Eftersom Docker ger nu volume
och namngivna volymer är detta mönster nu föråldrade och rekommenderas inte.
För att komma igång med volume
och namngivna volymer se Skapa en namngiven volym
Skapa en datavolym
docker run -d --name "mysql-1" -v "/var/lib/mysql" mysql
Detta kommando skapar en ny behållare från mysql
bilden. Det skapar också en ny datavolym som den sedan monteras i behållaren på /var/lib/mysql
. Denna volym hjälper all data inuti den att kvarstå utöver behållarens livslängd. Det vill säga när en behållare tas bort tas dess filsystemändringar också bort. Om en databas lagrade data i behållaren och behållaren tas bort tas alla dessa uppgifter också. Volymerna kommer att kvarstå en viss plats även bortom när behållaren tas bort.
Det är möjligt att använda samma volym i flera containrar med --volumes-from
:
docker run -d --name="mysql-2" --volumes-from="mysql-1" mysql
mysql-2
behållaren har nu datavolymen från mysql-1
ansluten till den, även med sökvägen /var/lib/mysql
.