স্ক্র্যাচ থেকে একটি ডকার ইমেজ তৈরি করা

Creating Docker Image From Scratch



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

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







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



একটি ডকার ইমেজের অ্যানাটমি

আগেই উল্লেখ করা হয়েছে, একটি ডকার অ্যাপ একটি সম্মত পরিবেশে চলবে। এখন প্রশ্ন হল কিভাবে আমরা সেই পরিবেশ তৈরি করব? বেশিরভাগ অ্যাপ্লিকেশন চিত্র একটি ডকার বেস ইমেজ আমদানি করবে এবং এর উপরে তাদের অ্যাপ্লিকেশন তৈরি করবে।



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





উবুন্টু থেকে: 18.04
## ডকারফাইলের বাকি অংশ

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

একটি নতুন ডকার ইমেজ টানার চেষ্টা করার সময় আপনি হয়তো এটি লক্ষ্য করেছেন।



স্ক্র্যাচ থেকে ডকার ইমেজ তৈরি করা

এটি দেখায় যে আসল প্রয়োগের আগে কতগুলি স্তর টানা হয় (যা আকারে মাত্র কয়েক মেগাবাইট হতে পারে) আনা হয়।

এই কারণে, আমরা তৈরি করতে চাই যা একটি বেস ইমেজ হিসাবে পরিচিত। যা অন্য কিছুর উপরে নির্মিত নয়। কীওয়ার্ড স্ক্র্যাচ ব্যবহার করে বোঝানো হয় যে এই স্তরটি অন্য কিছুর উপরে নির্মিত নয়। তাই ভালো:

গোড়া থেকে
## Dcokerfile বাকি

আমরা প্রথমে একটি সাধারণ হ্যালো-ওয়ার্ল্ড অ্যাপ্লিকেশন তৈরি করব এবং তারপরে বাকি ডকারফিলটি কী হতে চলেছে তা নির্ধারণ করব। হোস্ট সিস্টেম উবুন্টু: 18.04 এলটিএস এবং আমরা পরীক্ষার জন্য ডকার সংস্করণ 17.12.1-ce ব্যবহার করছি।

একটি স্ট্যাটিক বাইনারি তৈরি করা

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

তবে বেশিরভাগ উচ্চ স্তরের অ্যাপ্লিকেশনগুলি অনেকগুলি সিস্টেম লাইব্রেরির উপর নির্ভর করে (যেমন glibc, musl, klibc, ইত্যাদি ) এবং অনেক রানটাইম নির্ভরতা যেমন পাইথন বা Node.js বা জাভা রানটাইম। অ্যাপ্লিকেশন বাইনারি এর ভিতরে সমস্ত লাইব্রেরি নেই, কিন্তু যখন এটি কার্যকর করা শুরু করে তখন হোস্ট অপারেটিং সিস্টেম থেকে সেই লাইব্রেরিগুলিকে কল করে।

যেহেতু আমরা শুরু থেকে একটি চিত্র তৈরি করার চেষ্টা করছি, আমরা এই সুন্দরগুলি পেতে পারি না। সুতরাং আমাদের আবেদন একটি স্ট্যাটিক ফাইল বা একটি স্বতন্ত্র এক্সিকিউটেবল হতে হবে।

চলুন শুরু করা যাক MyDockerImage নামে একটি ফোল্ডার তৈরি করে এবং এর ভিতরে একটি ফাইল hello.cc তৈরি করে।

$mkdirMyDockerImage
$সিডিMyDockerImage
$স্পর্শhello.cc

আপনার প্রিয় টেক্সট এডিটর ব্যবহার করে hello.cc খুলুন এবং এর ভিতরে নিচের লাইনগুলো যোগ করুন।

#অন্তর্ভুক্ত
নামস্থান std ব্যবহার করে;
intপ্রধান(){
খরচ<< 'হ্যালো! এই বার্তাটি একটি ধারক থেকে আসছেn';
প্রত্যাবর্তন 0;

}

এটি একটি সহজ C ++ প্রোগ্রাম যা হ্যালো প্রিন্ট করে! এই বার্তা …

আগে আলোচিত কারণগুলির জন্য, আমরা স্ট্যাটিক পতাকা ব্যবহার করে এটি সংকলন করব। ব্যবহৃত কম্পাইলার হল g ++ (উবুন্টু 7.3.0-16ubuntu3) 7.3.0।

প্রোগ্রামটি কম্পাইল করতে, একই ডিরেক্টরিতে নিম্নলিখিত কমান্ডটি চালান:

$ গ্রাম++ -হে হ্যালো-স্থিরহ্যালো.ডিসি

এটি একই ডিরেক্টরিতে একটি বাইনারি এক্সিকিউটেবল ফাইল হ্যালো তৈরি করে। এটি আমাদের স্ট্যাটিক ফাইল। টার্মিনালে ফাইলের নাম উল্লেখ করে ইচ্ছাকৃতভাবে এটি চলছে কিনা তা পরীক্ষা করুন।

$/হ্যালো

এখন আমরা এই সহজ প্রোগ্রামটি কনটেইনারাইজ করার জন্য প্রস্তুত।

ডকারফিল

ডকারফাইলে এমন একটি নিয়ম রয়েছে যা আপনার অ্যাপ্লিকেশন ফাইলগুলি (যেমন বাইনারি, সোর্স ফাইল ইত্যাদি) বিভিন্ন কনফিগারেশন প্যারামিটার যেমন ফাইল সিস্টেম লেআউট, এক্সপোজড পোর্ট ইত্যাদি নিয়ে যায় এবং সেগুলিকে ডকার ইমেজ ফাইলে পরিণত করে। তারপরে আপনি যে কেউ সেই অ্যাপ্লিকেশনটি চালাতে চান তার সাথে আপনি ইমেজ ফাইলটি ভাগ করতে পারেন।

আমরা ডকারফাইলের জন্য উপলব্ধ প্রতিটি বিকল্প খনন করব না, পরিবর্তে আমরা একটি খুব সংক্ষিপ্ত ডকারফিল লিখব। একই ডিরেক্টরিতে, যেখানে আপনার হ্যালো এক্সিকিউটেবল থাকেন, সেখানে একটি খালি ফাইল নাম তৈরি করুন ডকারফিল।

$স্পর্শডকারফিল

আপনার প্রিয় পাঠ্য সম্পাদকের সাথে এটি খুলুন এবং এটিতে নিম্নলিখিত লাইনগুলি লিখুন:

স্ক্র্যাচ থেকে
হ্যালো যোগ করুন/
সিএমডি['/হ্যালো']

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

সবশেষে, সিএমডি লাইনের একটি স্ট্রিং আছে /হ্যালো এই স্ট্রিংটি শেল কমান্ড হিসাবে কার্যকর করা হবে যখনই এই ছবি থেকে একটি ধারক তৈরি করা হবে, এইভাবে আমরা আমাদের কন্টেইনারে যোগ করা বাইনারি ফাইল এবং আমাদের অ্যাপে লেখা বার্তাটি মুদ্রণ করব।

আসুন আমন্ত্রণ করে ছবিটি তৈরি করি ডকার বিল্ড কমান্ড যা ডকারফাইলের বিষয়বস্তুর মধ্য দিয়ে যাবে এবং ছবিটি তৈরি করবে। ডকারফিল এবং এক্সিকিউটেবল বাইনারি হিসাবে একই ডিরেক্টরিতে নিম্নলিখিত কমান্ডটি চালান।

$ডকার বিল্ড-ট্যাগহ্যালো .

দ্য – ট্যাগ হ্যালো পতাকা ছবির নাম সেট করে হ্যালো এবং বিন্দু ( । ) শেষে বলে ডকার বিল্ড Dockerfile এবং সংশ্লিষ্ট বিষয়বস্তুগুলির জন্য বর্তমান ডিরেক্টরিটি দেখুন।

ডকার কন্টেইনার চালাচ্ছে

আমরা যে চিত্রটি তৈরি করেছি তা চিত্রের তালিকায় দেখা যাচ্ছে কিনা তা পরীক্ষা করতে, চালান:

$ডকার ছবি

লক্ষ্য করুন হ্যালো ইমেজটি কতটা ছোট যখন অন্য ছবির তুলনায়। যে কোনও ক্ষেত্রে, এটি একটি ধারক হিসাবে চালানোর জন্য প্রস্তুত,

$ডকার রান হ্যালো

এটাই! আপনি স্ক্র্যাচ থেকে আপনার প্রথম ন্যূনতম ধারক তৈরি করেছেন।

অন্যান্য অপশন

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

ব্যবহার করে তাদের প্যারেন্ট ইমেজ হিসেবে ব্যবহার করুন আলপাইন থেকে: সর্বশেষ ছোট ইমেজ হিসাবে ভাল হবে। যেহেতু বেস ইমেজগুলি মাত্র 2-5 MB আকারের। ডকার সম্পর্কিত কোন বিষয় আছে কিনা তা আমাদের জানান, আপনি আমাদের পরবর্তী কভার করতে চান। আপনি আমাদের কাছে পৌঁছাতে পারেন টুইটার , ফেসবুক অথবা ইমেলের মাধ্যমে আমাদের সাবস্ক্রাইব করুন।