Multi-Architecture Images (মাল্টি-আর্কিটেকচার ইমেজ)
আধুনিক কম্পিউটিংয়ে আমরা বিভিন্ন ধরণের প্রসেসর আর্কিটেকচার ব্যবহার করি। যেমন- সাধারণ কম্পিউটার (x86_64/amd64), ম্যাকবুকের অ্যাপল সিলিকন (arm64), বা রাস্পবেরি পাই (arm/v7)। একটি ইমেজ যদি এক আর্কিটেকচারের জন্য বিল্ড করা হয়, তবে সেটি অন্যটিতে নাও চলতে পারে। এই সমস্যার সমাধান হলো 'Multi-Architecture Images'।
১. মাল্টি-আর্কিটেকচার কি?
মাল্টি-আর্কিটেকচার হলো এমন একটি টেকনিক যেখানে একই নামের একটি ইমেজের ভেতর একাধিক আর্কিটেকচারের জন্য আলাদা আলাদা বিল্ড বাইনারি থাকে। ডকার ক্লায়েন্ট যখন ওই ইমেজটি পুল করতে চায়, তখন ডকার স্বয়ংক্রিয়ভাবে ইউজারের প্রসেসর অনুযায়ী সিটিক ইমেজটি ডাউনলোড করে।
২. ডকার বিল্ড-এক্স (Docker Buildx)
মাল্টি-আর্কিটেকচার ইমেজ তৈরির জন্য আমরা docker buildx ব্যবহার করি। এটি ডকারের একটি প্লাগইন যা মাল্টি-প্লাটফর্ম বিল্ড সাপোর্ট করে।
বিল্ড-এক্স সক্রিয় করা:
প্রথমে একটি নতুন বিল্ডার তৈরি করে নিতে হয়:
docker buildx create --use৩. মাল্টি-প্লাটফর্ম বিল্ড করা (Building)
নিচের কমান্ডটি ব্যবহার করে আপনি একইসাথে ইন্টেল (amd64) এবং এআরএম (arm64) প্রসেসরের জন্য ইমেজ বিল্ড করে ডকার হাবে পুশ করতে পারেন:
docker buildx build --platform linux/amd64,linux/arm64 -t username/myapp:v1 --push .--platform: এখানে কমা দিয়ে একাধিক প্ল্যাটফর্ম বলে দেওয়া যায়।--push: ইমেজটি সরাসরি রেজিস্ট্রিতে পুশ করে দেয়। কারণ লোকাল ডকার ডিমন সাধারণত একসাথে একাধিক প্ল্যাটফর্মের ইমেজ স্টোর করতে পারে না।
৪. প্ল্যাটফর্ম স্পেসিফিক ইন্সট্রাকশন
আপনার ডকার ফাইলে যদি নির্দিষ্ট প্ল্যাটফর্ম অনুযায়ী কিছু কাজ করতে হয়, তবে BUILDPLATFORM বা TARGETPLATFORM আরগুমেন্ট ব্যবহার করতে পারেন:
FROM --platform=$BUILDPLATFORM golang:alpine AS build
ARG TARGETPLATFORM
ARG BUILDPLATFORM
RUN echo "I am running on $BUILDPLATFORM, building for $TARGETPLATFORM"৫. কেন এটি গুরুত্বপূর্ণ?
- Cloud Flexibility: ক্লাউড প্রোভাইডাররা এখন সাশ্রয়ী ARM বেসড নোড (যেমন: AWS Graviton) অফার করে। আপনার ইমেজ মাল্টি-আর্কিটেকচার হলে আপনি সহজেই সাশ্রয়ী নোডে মাইগ্রেট করতে পারেন।
- Edge Computing: রাস্পবেরি পাই বা অন্যান্য আইওটি ডিভাইসে কন্টেইনার চালানোর জন্য এটি অপরিহার্য।
- Universal Images: ডকার হাবে যে জনপ্রিয় ইমেজগুলো আছে (যেমন: nginx, node), সেগুলো প্রায় সব আর্কিটেকচারেই কাজ করে কারণ সেগুলো মাল্টি-আর্কিটেকচার ইমেজ।
সারাংশ
docker buildx ব্যবহার করে আপনি আপনার অ্যাপ্লিকেশনকে সর্বজনীন করতে পারেন, যাতে এটি ল্যাপটপ থেকে শুরু করে আধুনিক সার্ভার এবং এমবেডেড ডিভাইসে একইভাবে কাজ করে।