আপনি এই আর্টিকেল পড়ার আগ্রহ প্রকাশ করেছেন মানে ধরেই নিচ্ছি আপনি প্রযুক্তির লোকজন। আপনি যদি না হয়ে থাকেন তাতেও কোন সমস্যা নেই। আপনার হাতে আছে ইন্টারনেট সংযুক্ত ডিভাইস আর সার্চ ইঞ্জিন, ব্যাস! আপনি সব টার্ম সম্পর্কে জেনে যাবেন। ইন্টারনেট থেকে শল্যচিকিৎসা, কৃষিকাজ কিংবা অন্যন্য কাজ শেখা না গেলেও প্রযুক্তি, সফটওয়্যার ইঞ্জিনিয়ারিং কিংবা তার অংশের সব জিনিসপত্র আপনি শিখতে পারেন সহজে।
এবার মুলকথায় আসি, আমরা যারা ডেভেলপার, সফটওয়্যার ইঞ্জিনিয়ার কিংবা <some buzz words here> তাদের দৈনন্দিন কাজের অংশ হচ্ছে কোন একটা অ্যাপ্লিকেশন বানানো যা দিয়ে বাস্তবিক কিছু সমস্যার সমাধান হবে, মানব সভ্যতার কাজে লাগবে। আমরা সেই অ্যাপ্লিকেশন গুলো আমাদের লোকাল প্লাটফর্মে টেস্ট করে দেখি, বিভিন্ন ভার্সনে টেস্ট করি, অসংখ্যবার করি। যার জন্য আমাদের বিভিন্ন অ্যাপ্লিকেশনের জন্য বিভিন্ন প্যাকেজ, ডিপেন্ডেন্সি আরও সুসম্পর্কিত জিনিসপত্র লাগে। তো এরকম একটা পরিস্থিতির সুন্দর সমাধান হচ্ছে ডকার, ডকার খাঁটি বাংলায় এমন একটা জিনিস যেখানে আমাদের অ্যাপ্লিকেশন গুলো স্বতন্ত্রভাবে চালানোর জন্য যত রকমের ওএস লেভেলের জিনিস, প্যাকেজ, লাইব্রেরি আরো যা লাগে সব যোগান দেয়। সব থেকে মজার জিনিস আমরা প্রত্যেক অ্যাপ্লিকেশনের জন্য আলাদা আলাদা এমন বান্ডল তৈরী করতে পারবো। যাদেরকে ইমেজ বলে আর একটা চলমান ইমেজকে বলে কন্টেইনার।
Go অ্যাপ্লিকেশন

আমরা অ্যাপ্লিকেশন ডেভেলপমেন্ট নিয়ে তেমন বিস্তারিত ফোকাস করবোনা। এখানে আমার লিখা গিটহাবের একটি খুব সাধারণ অ্যাপ্লিকেশন ব্যবহার করবো, যার রুট এন্ডপয়েন্টে আমরা একটা জেসন রেসপন্স পাবো {"Greetings" : "You are awesome!"}
অ্যাপ্লিকেশনটি আপনার লোকাল মেশিনে নিতে চাইলে, ক্লোন করুন –
git clone https://github.com/ihumaunkabir/go-docker-deployment.git
ডকার ইমেজ তৈরী
তারপর প্রজেক্ট ডিরেক্টরিতে যান। এখানে আপনি আপনি একটি Dockerfile
পাবেন। আমাদের মুল লক্ষ্য এই Dockerfile
কিভাবে করবো এবং সকল প্যারামিটারের ব্যাখ্যা জানবো। একটা ইমেজ ধাপে ধাপে বিল্ড করার জন্য আমরা Dockerfile
কনফিগার করি। আমরা নিচের Dockerfile
টি দেখি।
আমরা এবার বিস্তারিত ব্যাখ্যায় আসি-
FROM
আমরা ডকারের রিপোজিটরি থেকে golang:alpine
ইমেজের উপর ভিত্তির করে আমাদের ইমেজটি তৈরী করছি। আমরা লিনাক্সের alpine
লিনাক্স ডিস্ট্রো ব্যবহার করবো। এই ইমেজের সাইজ মাত্র 5MB, যার ভিতরে golang
ইন্সটল করাই আছে।
ENV
GO111MODULE
একটি এনভায়রনমেন্ট ভ্যারিয়েবল, এই ভ্যারিয়েবলই যাবতীয় প্যাকেজগুলো ইমপোর্ট করে। CGO_ENABLED=0
করা হয় সাধারণত কন্টেইনার সাইজ কমানোর জন্য। CGO
হচ্ছে, C আর Go, এটা নিস্ক্রীয় করা থাকলে Go’র প্যাকেজ C কোড ইমপোর্ট করা বন্ধ করে দেয়। তারপরের GOOS=linux
অপারেটিং সিস্টেম আর GOARCH=amd64
প্রসেসর আর্কিটেকচার।
WORKDIR
এর মাধ্যমে আমরা ডিরেক্টরি পরিবর্তন করি। COPY
দিয়ে মডিউল কপি করি এবং RUN
দিয়ে ডিপেন্ডেন্সিগুলো ডাউনলোড করি এবং অ্যাপ্লিকেশন বিল্ড করি। go.mod
মডিউল ফাইলে ডিপেন্ডেন্সিগুলো থাকে। ( বোনাস: আমরা জানি যে go mod init github.com/userName/appName
কমান্ড দিয়ে Go Module তৈরী করতে পারি। তারপর আমরা go build
দিয়ে অ্যাপ্লিকেশন বিল্ড করি এবং বিল্ড করার পর go.sum
এবং appName.exe
তৈরী হয়। go.sum
ফাইলে ক্রিপ্টোগ্রাফিক হ্যাশ আকারে মডিউলের সুনির্দিষ্ট ভার্সনগুলো জমা থাকে। )
EXPOSE
দিয়ে আমরা পোর্ট কন্টেইনার থেকে বাইরে একসেস করার জন্য পাঠাই। যেমন এখানে পোর্ট ব্যবহার করা হয়েছে 3000
চাইলে এটা পরিবর্তন করে অন্য দেওয়া যায় সমস্যা নেই।
CMD
দিয়ে যখন আমাদের ইমেজটা চলবে তখন একটা ডিফল্ট কমান্ড রান করাচ্ছি।
ব্যাস! ডকার ফাইল তৈরী করা শেষ এখন আমরা ইমেজ টা বিল্ড করবো। সেজন্য আমাদের কমান্ডলাইনে লিখতে হবে-
docker build . -t go-docker-dep
-t
ট্যাগ ফ্ল্যাগ। আপনি চাইলে go-docker-dep
এর পরিবর্তে অন্য ট্যাগও ব্যবহার করতে পারেন। সেক্ষেত্রে ইমেজ চালু করার সময় একই ট্যাগ দিতে হবে।
ইমেজ বিল্ড করা শেষ। এখন আমরা ইমেজটি রান করবো। আগেই বলেছিলাম যে, একটি চলমান ইমেজ-ই কিন্তু কন্টেইনার। যখন একটা ইমেজ চলমান থাকবে তখন আমরা সেটাকে বলবো কন্টেইনার। তাহলে এবার ইমেজটি রান করা যাক-
docker run -p 3000:3000 go-docker-dep
-p
পোর্ট ফ্ল্যাগ। go-docker-dep
আমাদের ইমেজের ট্যাগ।
যাক আমাদের ইমেজ চলছে, কন্টেইনার প্রস্তুত। সার্ভার ঠিক ঠাক কাজ করছে কি না দেখে নেওযা যাক নিচের এড্রেসে গিয়ে –
http://localhost:3000
আপনার হোস্ট আইপি ভিন্ন হলে localhost
এর পরিবর্তে সঠিক IP
লিখতে হবে। তাহলে আমরা রেসপন্স হিসেবে পাবো-
{"Greetings" : "You are awesome!"}
আমাদের ডকার কন্টেইনার ঠিক ঠাক মত চলছে এবং আমরা আমাদের অ্যাপ্লিকেশনের কাঙ্ক্ষিত আউটপুট পেয়েছি।
লিখায় কোন ত্রুটি পেলে আমাকে জানান আমি সংযোজন করবো। ভাল লাগলে শেয়ার করুন। ধন্যবাদ।
গিটহাব রিপোজিটরি https://github.com/ihumaunkabir/go-docker-deployment