ডকার রচনা সংস্করণ 2 "ভলিউম" সিনট্যাক্সটি কীভাবে দেখার কথা?


43

ডকার কমপোজ v1.6.0 + এর সাথে এখন ফাইলের জন্য একটি নতুন / সংস্করণ 2 ফাইল সিনট্যাক্স রয়েছে docker-compose.yml। পরিবর্তনগুলির মধ্যে একটি পৃথক শীর্ষ স্তরের কী অন্তর্ভুক্ত রয়েছে volumes। এটি এক জায়গায় ভলিউম সংজ্ঞা "কেন্দ্রীকরণ" করতে দেয়।

আমি যা করার চেষ্টা করছি তা হল সেখানে ভলিউমের নামকরণ এবং আমার স্থানীয় হোস্ট ডিস্কে একক ভলিউম রেফারেন্স একাধিক পাথ। নিম্নলিখিতটি একটি উদাহরণ দিয়ে Tracebackশেষ হয় যার সাথে ব্যতিক্রম ছোঁড়া

AttributeError: 'list' object has no attribute 'items'

উদাহরণ docker-compose.yml:

version: '2'

services:
  db:
    image: postgres
    volumes:
      - database:/var/lib/postgres/data

  php:
    image: php-fpm:5.6
    volumes:
      - phpconf:/etc/php/conf.d

  namedvolume:
    container_name: namedvolume
    build: ./Docker/Testvolume
    volumes: 
      - ./Docker/Testvolume/shareme

volumes:
  database:
    - ./Docker/Postgres/db:ro
    - ./Docker/Postgres/ini
  phpconf:
    - ./Docker/PHP-FPM/conf
  singledir: ./Docker/foo
  completemap: ./Docker/bar:/etc/service/conf.d
  - namedvolume:/etc/service/conf.d # < this was a separate attempt w/o the other keys
  … ?

এখন পর্যন্ত আমি সমস্ত ডকার masterকমপোজ ডক্স- ব্রাঞ্চ ভলিউম কনফিগারেশন রেফারেন্স, ডকার কমপোজ ডক্স ভলিউম / ভলিউম-ড্রাইভার রেফারেন্স পড়েছি এবং প্রত্যাশিত সঠিক সিনট্যাক্সটি খুঁজে পেতে গিটহাবের উদাহরণ দিয়ে দেখেছি । দেখে মনে হচ্ছে কেউ ইতিমধ্যে এটি (গিটহাব) ব্যবহার করছে না এবং ডকুমেন্টেশন সম্পূর্ণ হওয়া থেকে দূরে (ডকার ডটকম)। আমি serviceএটির মতো আলাদা ভলিউম তৈরি করার চেষ্টা করেছি এবং এতে উল্লেখ করেছি volumes, তবে এটি তেমন কার্যকর হয় না। এই সিনট্যাক্সটি কীভাবে দেখাবেন বলে কোনও ধারণা?

উত্তর:


40

volumesকীটির উদ্দেশ্য

এটি সেখানে নামযুক্ত ভলিউম তৈরি করতে পারে ।

যদি আপনি না না এটি ব্যবহার, তারপর কোনোভাবে আপনি আপনার ভলিউম জন্য কুচি-কুচি করিয়া কাটা বস্তু মান একটি গুচ্ছ সঙ্গে পাবেন। উদাহরণ:

$ docker volume ls 
DRIVER              VOLUME NAME
local               f004b95d8a3ae11e9b871074e9415e24d536742abfe86b32ffc867f7b7063e55
local               9a148e167e1c722cbdb67c8edc36f02f39caeb2d276e9316e64de36e7bc2c35d

নামযুক্ত খণ্ডগুলি সহ, আপনি নিম্নলিখিতগুলির মতো কিছু পাবেন:

$ docker volume ls
local               projectname_someconf
local               projectname_otherconf

নামযুক্ত ভলিউম কীভাবে তৈরি করবেন

docker-compose.ymlসিনট্যাক্স হল:

version: '2'

services:
    app:
        container_name: app
        volumes_from:
            - appconf
    appconf:
        container_name: appconf
        volumes:
            - ./Docker/AppConf:/var/www/conf

volumes:
    appconf:

networks:
    front:
        driver: bridge

উপরে দেখানো নামের খণ্ডগুলির মতো এটি something

কিভাবে বাল্ক মধ্যে ভলিউম অপসারণ

যখন আপনার কাছে একগুচ্ছ হ্যাশ রয়েছে, এটি পরিষ্কার করা বেশ কঠিন হতে পারে। এখানে একটি ওয়ান-লাইনার:

docker volume rm $(docker volume ls |awk '{print $2}')

সম্পাদনা: @ আর্থার ট্যাকা মন্তব্যগুলিতে যেমন উল্লেখ করেছেন, উপায়টি মনে রাখা আরও সহজ:

docker volume rm $(docker volume ls -q)

নামযুক্ত ভলিউম সম্পর্কে কীভাবে বিশদ পাবেন

এখন যেহেতু আপনাকে আর হ্যাশ সন্ধান করতে হবে না, আপনি এটি চালিয়ে যেতে পারেন এবং তাদের… নাম দ্বারা কল করতে পারেন  :

docker volume inspect <volume_name>

# Example:
$ docker volume inspect projectname_appconf

[
    {
        "Name": "projectname_appconf",
        "Driver": "local",
        "Mountpoint": "/mnt/sda1/var/lib/docker/volumes/projectname_appconf/_data"
    }
]

সিডিনোট: আপনি docker-compose downভলিউম তৈরির আগে আপনার পরিষেবাগুলিতে নতুন করে শুরু করতে চাইতে পারেন ।

আপনি যদি বুট 2 ডকার / ডকার মেশিন ব্যবহার করছেন তবে আপনাকে সেই পরিমাণটি করতে হবে docker-machine sshএবং তার sudo -iআগে ls -la /mnt/…- আপনার হোস্ট মেশিনটি ডকার মেশিন দ্বারা সরবরাহ করা ভিএম ।


1
খুব ভাল উত্তর। চিয়ার্স। নতুন ডকার-রচনা ভলিউমগুলি সন্ধান করতে অনেক ফিরে এসেছিল।
ডেরেক অ্যাডায়ার

এগুলি কোথায় পেলেন? ডকার ডক্সের চেয়ে অনেক বেশি থ্রোফ লাগছে?
ডেরেক অ্যাডায়ার

1
@ ডেরেকএডায়ার ধন্যবাদ, তবে আপনি উপরের বাম দিকের পরিসংখ্যানগুলিতে যেমন পড়তে পারেন, এই উত্তরটি এই বিষয়ে গুগল অনুসন্ধান ইঞ্জিনের ফলাফল পৃষ্ঠাগুলিতে ভালভাবে উল্লেখ করা হয়েছে।
কায়সার

1
আপনি পরিবর্তে এটি $(docker volume ls |awk '{print $2}')ব্যবহার করতে পারেন $(docker volume ls -q)কেবল এটিই সহজ নয়, এটি প্রথম লাইনে "ভলিউম" প্রিন্ট করে না।
আর্থার তাকা

2
এটি সঠিক নয়; এটি এমনটি করে না যা এটি দেখে মনে হয় যা এটি করে। volumes_fromহয় উত্তরাধিকারী অন্য ধারক থেকে ভলিউম তালিকা। একটি নামযুক্ত ভলিউম ব্যবহার করতে, আপনি পরিষেবা-স্তরের সিনট্যাক্স ব্যবহার করেন - NAME:DESTএবং শীর্ষ স্তরের volumesকীতে পথ নির্ধারণ করেন । এই উদাহরণটি যা করে (এটি লেখার সময়) একটি নামক ভলিউম ছাড়াও একটি মান ভলিউম তৈরি করে , এবং নামকৃত ভলিউমটি সহজেই ব্যবহৃত হয় না।
ট্রেভরজ

13

আমি এটি যেভাবে বুঝতে পারি, আপনি এটিতে গ্লোবাল volumes:বিভাগটি ব্যবহার করতে পারেন

  • একটি ভলিউমের নাম নির্ধারণ করুন
  • একটি ভিন্ন ভলিউম নামের অধীনে একটি নামযুক্ত ভলিউম উপলব্ধ
  • নামযুক্ত ভলিউমের জন্য ড্রাইভার এবং ড্রাইভারের বিকল্প উল্লেখ করুন

গ্লোবাল বিভাগে ভলিউম স্বয়ংক্রিয়ভাবে তৈরি করা হবে যদি না আপনি নির্দিষ্ট না করেন external: true। আপনাকে এখনও তার volumes:বিভাগের প্রতিটি পরিষেবাটি জানাতে হবে যেখানে সেই ভলিউমটি মাউন্ট করা যায়।

এখানে একটি খুব সাধারণ উদাহরণ:

version: '2'
volumes:
  project:
services:
  one:
    volumes:
      - project:/bar
  two:
    volumes:
      - project:/foo

এর জন্য বিশ্বব্যাপী volumes:এন্ট্রি projectএকটি নামযুক্ত ভলিউম projectতৈরি করার কারণ ঘটবে । এটি তখন /barপরিষেবা হিসাবে এক হিসাবে /fooএবং দুটি পরিষেবা হিসাবে মাউন্ট করা হয় । উভয় পরিষেবাই ভলিউমের ডেটা ভাগ করে এবং এটি পড়তে / লিখতে পারে।

আমি মনে করি না যে আপনি যা করার চেষ্টা করছেন তা সম্ভব (একাধিক পাথকে একক ভলিউমে রূপান্তর করা এবং বিভিন্ন আর / ডাব্লু পতাকা সহ)। যদি এটি সম্ভব হয় তবে সম্ভবত এই বৈশিষ্ট্যগুলির সাথে অন্য কোনও মাধ্যমে নামযুক্ত ভলিউম তৈরির উপায় খুঁজে বের করে এবং পরে এটি বাহ্যিক ভলিউম হিসাবে যুক্ত করে:

volumes:
  mymagicvolume:
    external: true

1
ইতিমধ্যে upvated, কিন্তু ঠিক আজই এটির কাছাকাছি যাওয়ার সময় খুঁজে পেয়েছে এবং একটি বর্ধিত ডেটা যুক্ত করেছে। সব আপনার সাহায্যের জন্য ধন্যবাদ! প্রশ্ন: আপনি যেমন ভলিউমের নাম রেখেছেন projectএবং তারপরে এটি উল্লেখ করেছেন project:/bar, projectপাথগুলি আসলে কোথায় সংজ্ঞায়িত করা হয়েছে?
কায়সার

ডকার-কমপোজগুলি স্বয়ংক্রিয়ভাবে এগুলিকে নামকরণ ভলিউম হিসাবে / var / lib / ডকার / ভলিউম / ভলিউমনেমে তৈরি করবে
JamesCW

দুঃখিত, এখনও বুঝতে পারছি না যে ডকারের project:ওরফে পথ পাবে ? যদি আমি শেয়ার করতে চাই কিভাবে Docker কি জানে, বলে ./some_folder/some_subfolder/yet_another_subfolderযাও one:এবং two:পাত্রে?
আলেকজান্ডার লোমিয়া

সেক্ষেত্রে এটি শীর্ষ-স্তরের ভলিউমের আওতায় "প্রকল্প: <
Wwpp>>"

5

উদাহরণস্বরূপ সংস্করণ 2 দেখুন , এছাড়াও ভলিউম কনফিগারেশন রেফারেন্স :

আমার উদাহরণ: (সংস্করণ 1)

$ tail -4 docker-compose.yml 
  volumes:
    - ./etc/nginx/conf.d:/etc/nginx/conf.d:ro
    - ./var/log/nginx:/var/log/nginx:rw
    - ./var/www/html:/var/www/html:rw
$ 

1
এটি আমি প্রশ্নের সাথে সংযুক্ত করেছি এবং তাই আমার প্রশ্নের উত্তর দেয় না। আপনি কীভাবে হোস্ট থেকে একাধিক পরিষেবাতে নাম ভলিউম হিসাবে বিভিন্ন ডিরেক্টরি মানচিত্র করবেন তার একটি উদাহরণ পোস্ট করতে আপত্তি করবেন?
কায়সার

আমার লিংক IS ভিন্ন, এটি পয়েন্ট Version 2নথির অধ্যায়)
alexus

আমার খারাপ। আমি কেবল সেই সাথে লিঙ্ক করতে ভুলে গেছি। আপনি যখন প্রশ্নের ওয়াইএমএল স্টাফটি দেখেন, আপনি দেখতে পাবেন যে আমি স্পষ্টতই পৃথক শীর্ষ স্তরের volumesকীটি ব্যবহার করার চেষ্টা করেছি - যা আমি করি নি, তাই প্রশ্ন। আমি যা পাই না তা হ'ল docker-compose.ymlসংস্করণ 1 সিনট্যাক্সের অংশটি আমাকে বোঝানোর জন্য।
কায়সার

5

আমি মনে করি আপনি যা করতে চেষ্টা করছেন তা এখানে দেখা প্রায় একই রকম । সংক্ষেপে: বর্তমানে একটি নামযুক্ত ভলিউম তৈরি করা সম্ভব নয় যা হোস্টের মাউন্ট পয়েন্টকে বোঝায়। আপনি ধারকগুলির মধ্যে ডেটা ভাগ করার জন্য একটি নামযুক্ত ভলিউম তৈরি করতে পারেন তবে ডেটা কেবলমাত্র ভলিউমে উপস্থিত থাকবে এবং আপনি ভলিউম মুছলে অদৃশ্য হয়ে যাবে।

নামযুক্ত ভলিউম মাউন্ট করার প্রস্তাব দেওয়া হয়েছে , তবে দুর্ভাগ্যক্রমে নিকট ভবিষ্যতে এটি মূলটিতে যুক্ত হবে না। তবে স্থানীয়- কাস্টিস্ট নামের একটি ডকার প্লাগইন ব্যবহার করে এটি সম্ভব ।


3
1.11 বা 1.12 সাল থেকে এখন নামকরণের খণ্ডগুলি মাউন্ট করা একটি জিনিস is
কায়সার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.