ডকার কম্পোজ - স্মৃতি সীমা

Docker Compose Memory Limits



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

আমরা একটি অ্যাপ্লিকেশনের বিভিন্ন কাজের চাপ সামলানোর জন্য বিভিন্ন পাত্রে স্পিন করি এবং আমরা সহজেই এটি করার জন্য ডকার কম্পোজ ব্যবহার করি। প্রতিটি যৌক্তিকভাবে ভিন্ন কাজের চাপ ভিন্ন হিসাবে তালিকাভুক্ত করা হয় সেবা । উদাহরণস্বরূপ, আপনার ফ্রন্টএন্ড http সার্ভার একটি ফ্রন্টএন্ড পরিষেবা হিসাবে তালিকাভুক্ত করা হবে যা একটি অ্যাপাচি বা একটি Nginx ইমেজকে একটি ধারক হিসাবে চালাচ্ছে।







সমস্ত পরিষেবা, তাদের নেটওয়ার্কিং চাহিদা, স্টোরেজ প্রয়োজনীয়তা, ইত্যাদি একটি ডকার- compose.yml ফাইলে নির্দিষ্ট করা যেতে পারে। আমরা এখানে মেমরির ব্যবহার নির্দিষ্ট করার দিকে মনোনিবেশ করব।



আপনার অস্ত্রাগারে নিম্নলিখিত সরঞ্জামগুলির প্রয়োজন হবে:



  1. ডকারের প্রাথমিক ধারণা
  2. উইন্ডোজ বা ম্যাকের জন্য ডকার অথবা যদি আপনি লিনাক্স চালাচ্ছেন, লিনাক্সের জন্য ডকারসি
  3. ডকার কম্পোজ বাইনার y (উইন্ডোজ এবং ম্যাক ব্যবহারকারীরা ইতিমধ্যেই এটি ইনস্টল করা আছে)

আমরা আমাদের docker-compose.yml ফাইলের জন্য 2.4 সংস্করণে লেগে থাকব কারণ এটি 17.12 সংস্করণ এবং ডকার ইঞ্জিন এবং উচ্চতর সংস্করণ সমর্থন করে। আমরা সংস্করণ 3 নিয়ে যেতে পারতাম যা অতি সাম্প্রতিক কিন্তু এটি পুরনো স্মৃতি সীমাবদ্ধতা বাক্য গঠন সমর্থন করে না। আপনি যদি নতুন সিনট্যাক্স ব্যবহার করার চেষ্টা করেন তবে এটি পরিবর্তে সোকার মোডে ডকার ব্যবহারের উপর জোর দেয়। তাই নিয়মিত ডকার ব্যবহারকারীদের জন্য বিষয়টি সহজ রাখতে আমি 2.4 সংস্করণে থাকব





বেশিরভাগ কোড 3 সংস্করণের জন্য একই রকম কাজ করবে, এবং যেখানে একটি পার্থক্য থাকবে, আমি ডকার সোয়ারম ব্যবহারকারীদের জন্য নতুন সিনট্যাক্স উল্লেখ করব।

নমুনা আবেদন

আসুন চেষ্টা করি এবং পোর্ট 80 এ একটি সাধারণ Nginx পরিষেবা চালাই প্রথমে CLI এবং তারপর একটি সাধারণ ডকার- compose.yml ব্যবহার করে। পরবর্তী বিভাগে, আমরা এর স্মৃতি সীমাবদ্ধতা এবং ব্যবহার অন্বেষণ করব এবং কাস্টম সীমাবদ্ধতা কীভাবে আরোপ করা হয়েছে তা দেখতে আমাদের ডকার-কম্পোজ.ইএমএল সংশোধন করব।



ডকার-সিএলআই ব্যবহার করে একটি সাধারণ এনজিনক্স সার্ভার শুরু করা যাক:

$ docker run -d --name my -nginx -p80:80nginx: সর্বশেষ

আপনি ভিজিট করে nginx সার্ভার কাজ করতে পারেন http: // localhost অথবা lcoalhost প্রতিস্থাপন করুন

আপনার ডকার হোস্টের আইপি ঠিকানা সহ। এই কন্টেইনারটি সম্ভাব্যভাবে আপনার ডকার হোস্টে সম্পূর্ণ উপলব্ধ মেমরি ব্যবহার করতে পারে (আমাদের ক্ষেত্রে এটি প্রায় 2 গিগাবাইট)। মেমরির ব্যবহার পরীক্ষা করার জন্য, অন্যান্য জিনিসের মধ্যে, আমরা কমান্ডটি ব্যবহার করতে পারি:

$ docker পরিসংখ্যান my-nginx

কনটেইনার আইডি নাম CPU % MEM ব্যবহার/LIMIT MEM % নেট I/O ব্লক I/O PIDS
6eb0091c0cf2 my-nginx0.00% 2.133MiB / 1.934GiB0.11% 3.14kB / 2.13kB 0B / 0B2

MEM USAGE/LIMIT মোট 1.934GiB এর মধ্যে 2.133MiB এ রয়েছে। আসুন এই ধারকটি সরিয়ে ফেলি এবং ডকার-কম্পোজ স্ক্রিপ্ট লিখতে শুরু করি।

$ docker my-nginx বন্ধ করুন
$ docker rm my-nginx

সমতুল্য ym ফাইল

যদি আমরা এই পদক্ষেপগুলি অনুসরণ করি তবে উপরের মতো সঠিক ধারক তৈরি করা যেতে পারে:

$ mkdir my-compose
$ cd my-compose
$ vim docker-compose.yml

আমরা একটি নতুন খালি ডিরেক্টরি তৈরি করি এবং এতে একটি ফাইল docker-compose.yml তৈরি করি। যখন আমরা এই ডিরেক্টরি থেকে ডকার-কম্পোজ আপ চালাবো, তখন এই নির্দিষ্ট ফাইলটি (অন্য সবকিছু উপেক্ষা করে) সন্ধান করবে এবং সেই অনুযায়ী আমাদের স্থাপনা তৈরি করবে। এই .yml ফাইলের মধ্যে নিম্নলিখিত বিষয়বস্তু যোগ করুন।

সংস্করণ:'3'
সেবা:
আমার- nginx:
ছবি: nginx: সর্বশেষ
বন্দর:
-'80: 80 '

$ docker -compose up -d

-D পতাকা যুক্ত করা হয়েছে যাতে নতুন তৈরি পাত্রে পটভূমিতে চলে। অন্যথায়, টার্মিনাল নিজেকে পাত্রে সংযুক্ত করবে এবং সেখান থেকে রিপোর্ট ছাপানো শুরু করবে। এখন আমরা নতুন তৈরি পাত্রে পরিসংখ্যান দেখতে পারি:

$ ডকার পরিসংখ্যান -সব

কনটেইনার আইডি নাম CPU% MEM ব্যবহার/LIMIT MEM% নেট I/O ব্লক I/O PIDS
5f8a1e2c08ac my-compose_my-nginx_10.00% 2.25MiB/1.934GiB0.11% 1.65kB/0B 7.35MB/0B2

আপনি লক্ষ্য করবেন যে আগের মত একটি অনুরূপ ধারক অনুরূপ মেমরি সীমা এবং এমনকি ব্যবহারের সাথে তৈরি করা হয়েছিল। একই ডিরেক্টরি থেকে যা yml ফাইল ধারণ করে। তৈরি করা কাস্টমার ব্রিজ নেটওয়ার্ক সহ নতুন তৈরি কন্টেইনার মুছে ফেলার জন্য নিম্নলিখিত কমান্ডটি চালান।

$ডকার-কম্পোজ ডাউন

এটি তৈরি করা কোনো ভলিউম ব্যতীত ডকারকে একটি পরিষ্কার অবস্থায় ফিরিয়ে দেবে (আমরা এমনটি তৈরি করিনি তাই এটি উদ্বেগের নয়।)

স্মৃতি সীমা এবং স্মৃতি সংরক্ষণ

মেমরি লিমিট এবং মেমরি রিজার্ভেশন হল দুটি ভিন্ন দিক যা আপনার অ্যাপ্লিকেশন এবং ডকার হোস্টের একটি মসৃণ কার্যকারিতা নিশ্চিত করে।

ব্যাপকভাবে বলতে গেলে, মেমোরি লিমিট মেমরির পরিমাণের একটি উচ্চ সীমা আরোপ করে যা সম্ভাব্যভাবে একটি ডকার কন্টেইনার দ্বারা ব্যবহার করা যেতে পারে। ডিফল্টরূপে একটি ডকার কন্টেইনার, অন্য কোন সিস্টেম প্রক্রিয়ার মত, ডকার হোস্টের সম্পূর্ণ উপলব্ধ মেমরি ব্যবহার করতে পারে। এটি স্মৃতি-বহির্ভূত হতে পারে এবং আপনার সিস্টেম খুব ভালভাবে ক্র্যাশ হতে পারে। এমনকি যদি এটি কখনও না আসে, এটি এখনও মূল্যবান সম্পদ থেকে অন্যান্য প্রক্রিয়া (অন্যান্য পাত্রে সহ) অনাহারে থাকতে পারে, আবার কর্মক্ষমতা ক্ষতিগ্রস্ত করে। স্মৃতি সীমা নিশ্চিত করে যে সম্পদ ক্ষুধার্ত পাত্রে একটি নির্দিষ্ট সীমা অতিক্রম করে না। এটি একটি দুর্বল লিখিত অ্যাপ্লিকেশনের বিস্ফোরণ ব্যাসার্ধকে কয়েকটি কন্টেইনারে সীমাবদ্ধ করে, পুরো হোস্টকে নয়।

অন্যদিকে, মেমরি সংরক্ষণগুলি কম কঠোর। যখন সিস্টেমটি কম মেমোরিতে চলছে এবং এটির কিছু পুনরায় দাবি করার চেষ্টা করে। এটি কন্টেইনারের মেমরি খরচ রিজার্ভেশন সীমাতে বা তার নিচে আনার চেষ্টা করে। যদি মেমরির প্রাচুর্য থাকে তবে, অ্যাপ্লিকেশনটি হার্ড সেট মেমরির সীমা পর্যন্ত প্রসারিত করতে পারে।

সংক্ষেপ:

  1. মেমরির সীমা: একটি পাত্রে উপলব্ধ মেমরির পরিমাণের একটি কঠোর উচ্চ সীমা।
  2. মেমরি রিজার্ভেশন: এটি একটি অ্যাপ্লিকেশনকে সঠিকভাবে চালানোর জন্য ন্যূনতম পরিমাণ মেমরি হিসাবে সেট করা উচিত। সুতরাং যখন সিস্টেম কিছু স্মৃতি পুনরুদ্ধার করার চেষ্টা করছে তখন এটি ক্র্যাশ বা খারাপ আচরণ করে না।

যদি মেমরি রিজার্ভেশন মেমরির সীমার চেয়ে বেশি হয়, মেমরির সীমা অগ্রাধিকার পায়।

স্মৃতি সীমা এবং সংরক্ষণ নির্দিষ্ট করা

সংস্করণ 2

আসুন আমরা আগে লেখা ডকার-কম্পোজ.ইএমএল-এ ফিরে যাই এবং এতে মেমরির সীমা যুক্ত করি। পূর্বশর্ত বিভাগে আলোচিত কারণে সংস্করণটি 2.4 এ পরিবর্তন করুন।

সংস্করণ:'2.4'
সেবা:
আমার- nginx:
ছবি: nginx: সর্বশেষ
বন্দর:
-'80: 80 '
mem_limit: 300 মি

শেষ লাইন my-nginx পরিষেবার সীমা 300MiB নির্ধারণ করে। আপনি KiB এর জন্য k ব্যবহার করতে পারেন, এবং GiB এর জন্য এবং b শুধুমাত্র বাইটের জন্য ব্যবহার করতে পারেন। যাইহোক, এর আগে সংখ্যাটি অবশ্যই একটি পূর্ণসংখ্যা হতে হবে। আপনি 2.4 মি মত মান ব্যবহার করতে পারবেন না, আপনি পরিবর্তে 2400k ব্যবহার করতে হবে। এখন যদি আপনি চালান:

$ ডকার স্ট্যাট -সব

কনটেইনার আইডি নাম CPU % MEM ব্যবহার/LIMIT MEM % নেট I/O ব্লক I/O PIDS
44114d785d0a my-compose_my-nginx_10.00% 2.141MiB/300MiB0.71% 1.16kB/0B 0B/0B2

আপনি লক্ষ্য করবেন যে মেমরির সীমা 300 MiB তে সেট করা আছে। মেমরি রিজার্ভেশন সেট করা সমানভাবে সহজ, শুধু একটি লাইন mem_reservation: শেষে xxx যোগ করুন।

সংস্করণ:'2.4'
সেবা:
আমার- nginx:
ছবি: nginx: সর্বশেষ
বন্দর:
-'80: 80 '
mem_limit: 300 মি
mem_reservation: 100 মি

সংস্করণ 3 (ptionচ্ছিক)

তিনটি সংস্করণ ব্যবহার করার জন্য আপনাকে সোকার মোডে ডকার চালাতে হবে। উইন্ডোজ এবং ম্যাকের জন্য আপনি ডকার সেটিংস মেনু ব্যবহার করে এটি সক্ষম করতে পারেন। লিনাক্স ব্যবহারকারীদের ডকার সোয়ার্ম ইনিট চালাতে হবে। সে সম্পর্কে আরও তথ্য পাওয়া যাবে এখানে । যদিও এটি একটি প্রয়োজনীয় পদক্ষেপ নয়, এবং যদি আপনি এটি সক্ষম না করেন তবে এটিও ঠিক আছে। এই বিভাগটি মানুষের জন্য ইতিমধ্যে ঝাঁকুনি মোডে চলছে এবং নতুন সংস্করণ ব্যবহার করতে পারে।

সংস্করণ:'3'
সেবা:
আমার- nginx:
ছবি: nginx: সর্বশেষ
বন্দর:
-'80: 80 '
স্থাপন করা:
সম্পদ:
সীমা:
মেমরি: 300 মি
রিজার্ভেশন:
স্মৃতি: 100 মি

আমরা এই সব সংস্থান বিকল্পের অধীনে সংজ্ঞায়িত করি। সীমা এবং রিজার্ভেশন তাদের নিজস্ব প্রাথমিক চাবিকাঠি হয়ে ওঠে এবং মেমরি এখানে পরিচালিত অনেক সম্পদের মধ্যে একটি। CPU আরেকটি গুরুত্বপূর্ণ প্যারামিটার।

আরো তথ্য

আপনি অফিসিয়াল ডকুমেন্টেশন থেকে ডকার-কম্পোজ সম্পর্কে আরও জানতে পারেন এখানে সংযুক্ত । একবার আপনি কিভাবে একটি কম্পোজ ফাইল লিখবেন তার সারমর্ম পেয়ে গেলে ডকুমেন্টেশন আপনাকে বিভিন্ন প্যারামিটার বিশদভাবে সাহায্য করতে পারে।

আপনাকে সবকিছু জানতে হবে না, শুধু আপনার আবেদন কী প্রয়োজন তা অনুসন্ধান করুন এবং রেফারেন্স আপনাকে এটি বাস্তবায়নে নির্দেশনা দেবে।