Sobes.tech
Junior

Ի՞նչ տարբերություն կա վոլյումի (հավաքածու) և պարզ կապի (binding) միջև հոստի վրա գտնվող դիրեկտորիայի հետ։

sobes.tech AI

Պատասխան AI-ից

  • Տոմներ (Volumes): Տոմի կյանքի ցիկլը բաժանված է կոնտեյների կյանքի ցիկլից: Docker-ը կառավարում է տոմների պահեստավորումը հոստ-մեքենայում: Տոմները ստեղծվում, միացվում և ջնջվում են Docker-ի կողմից, և նրանց տվյալները պահվում են նույնիսկ կոնտեյներին կանգնեցնելու կամ ջնջելուց հետո: Նրանք հարմար են մշտական տվյալների պահեստավորման, տվյալների բազաների կամ կոնտեյների միջև ընդհանուր տվյալների համար:

  • Ուղիղ կապեր հոստի ուղղակի հետ (Bind Mounts): ուղղակի կապում են հոստի մեքենայի ուղղակի կամ ֆայլը կոնտեյների ներսում գտնվող ուղղակի կամ ֆայլի հետ: Docker-ը ուղղակի չի կառավարում տվյալների պահեստավորումը, այն միայն ստեղծում է միացման կետ: Կոնտեյների ֆայլային համակարգում փոփոխությունները այս կետում արտացոլվում են հոստի վրա և հակառակը: Դրանք հարմար են օգտագործելու համար՝

    • Զարգացման համար՝ հումքի կոդը կոնտեյնում մոնտաժելու համար փոփոխությունները անմիջապես արտացոլելու համար:
    • Կոնֆիգուրացիայի համար՝ կոնֆիգուրացիոն ֆայլերը հոստից կոնտեյնում փոխանցելու համար:
    • Հոստի ռեսուրսներին մուտք գործելու համար՝ կոնտեյներին հոստի որոշ ֆայլեր կամ ուղղություններ տրամադրելու համար:

Հիմնական տարբերությունները՝

Գծագրություն Տոմ (Volume) Հյուսվածքի վրա կապ (Bind Mount)
Կառավարում Docker-ը ամբողջությամբ կառավարում է պահեստավորումը Docker-ը միայն ստեղծում է միացման կետը
Կյանքի ցիկլ Բաժանված է կոնտեյներից Կապված է հոստի ուղղակի կամ ֆայլի գոյության հետ
Աշխատունակություն Սովորաբար օպտիմիզացված I/O-ի համար תלוי հոստի ֆայլային համակարգի կատարողականության վրա
Տրանսպորտայինություն Ավելի փոխանցելի է Dockerfile/Compose-ի միջոցով Ավելի քիչ փոխանցելի, կախված հոստի կառուցվածքից
Իզոլացիա Ավելի լավ է հոստից իզոլացիա ապահովում Ավելի քիչ է հոստի ֆայլային համակարգից իզոլացված

Օրինակ օգտագործման տոմը Dockerfile-ում:

# Օգտագործում տոմ
VOLUME /app/data

Օրինակ օգտագործման հյուսվածքի վրա կապը կոնտեյներ սկսելու ժամանակ:

# Կապում է ուղղությունը
docker run -v /path/on/host:/path/in/container my_image

Օրինակ օգտագործման տոմը կոնտեյներ սկսելու ժամանակ:

# Օգտագործում անունով տոմ
docker run -v myvolume:/path/in/container my_image