# ------------------------------------------------------------------- # Dockerfile: Hugging Face Space-এ VS Code (code-server) চালানোর জন্য # লেখক: v0 # উদ্দেশ্য: এটি একটি শিক্ষামূলক Dockerfile যা টেকনোলজি ছাত্রদের জন্য তৈরি। # ------------------------------------------------------------------- # --- ধাপ ১: বেস ইমেজ (Base Image) সেটআপ --- # যেকোনো Dockerfile একটি বেস ইমেজ দিয়ে শুরু হয়। এটি আমাদের অ্যাপ্লিকেশন চালানোর জন্য একটি ভিত্তি বা Operating System প্রদান করে। # এখানে আমরা Python 3.9 ইমেজ ব্যবহার করছি, যা আমাদের প্রয়োজনে Python ব্যবহারের সুযোগ দেবে। FROM python:3.9 # --- ধাপ ২: সিস্টেমের প্রয়োজনীয় প্যাকেজ ইনস্টল করা --- # Hint: একটি ভালো Dockerfile-এ সব সময় সিস্টেম আপডেট করা এবং অপ্রয়োজনীয় ফাইল মুছে ফেলা উচিত, যাতে ইমেজ সাইজ ছোট থাকে। RUN apt-get update && \ apt-get install -y --no-install-recommends \ curl wget gnupg git procps net-tools apt-transport-https ca-certificates \ && rm -rf /var/lib/apt/lists/* # ব্যাখ্যা: # apt-get update -> প্যাকেজ লিস্ট আপডেট করে। # apt-get install -y -> বিভিন্ন টুলস (যেমন git, curl) ইনস্টল করে যা ডেভেলপমেন্টের জন্য প্রয়োজন। # rm -rf /var/lib/apt/lists/* -> ইনস্টলেশনের পর ক্যাশ (cache) পরিষ্কার করে, যা ফাইনাল ইমেজের আকার কমায়। # --- ধাপ ৩: অ্যাপ্লিকেশন (code-server) ইনস্টল করা --- # Hint: "curl | sh" একটি শক্তিশালী কিন্তু ঝুঁকিপূর্ণ কমান্ড। এটি সরাসরি ইন্টারনেট থেকে একটি স্ক্রিপ্ট ডাউনলোড করে এবং 실행 (execute) করে। # শুধুমাত্র বিশ্বস্ত উৎস (trusted source) থেকেই এই কমান্ড ব্যবহার করা উচিত। RUN curl -fsSL https://code-server.dev/install.sh | sh # ব্যাখ্যা: এই কমান্ডটি code-server (ব্রাউজারে चलने वाला VS Code) ইনস্টল করে। # --- ধাপ ৪: ইউজার এবং ওয়ার্কস্পেস কনফিগারেশন --- # Hint: নিরাপত্তাজনিত কারণে Docker কন্টেইনারে 'root' ইউজার হিসেবে অ্যাপ্লিকেশন চালানো উচিত নয়। # তাই আমরা 'user' নামে একটি নন-রুট ইউজার তৈরি করছি। RUN useradd -m -u 1000 user USER user ENV PATH="/home/user/.local/bin:$PATH" # WORKDIR কমান্ড কন্টেইনারের ভেতর একটি ডিফল্ট ফোল্ডার তৈরি করে এবং সেখানে অবস্থান করে। # এর ফলে পরবর্তী সব কমান্ড (যেমন COPY, CMD) এই ফোল্ডারের সাপেক্ষে কাজ করে। WORKDIR /app # --- ধাপ ৫: প্রোজেক্ট ফাইল যুক্ত করা --- # Hint: Dockerfile-এর পাশে থাকা সব ফাইল ও ফোল্ডারকে COPY কমান্ডের মাধ্যমে কন্টেইনারে যুক্ত করা হয়। # '--chown=user' ফ্ল্যাগ নিশ্চিত করে যে ফাইলগুলোর মালিকানা 'user'-এর কাছে থাকবে। COPY --chown=user . /app # --- ধাপ ৬: অ্যাপ্লিকেশন চালানো এবং পোর্ট এক্সপোজ করা --- # CMD (Command) হলো কন্টেইনার চালু হওয়ার সময় যে কমান্ডটি ডিফল্টভাবে চলবে। # Hint: '--auth none' ব্যবহার করার মানে হলো যে কেউ আপনার VS Code সেশন অ্যাক্সেস করতে পারবে। # এটি ব্যক্তিগত বা গুরুত্বপূর্ণ প্রজেক্টের জন্য একেবারেই নিরাপদ নয়। শুধু শেখার উদ্দেশ্যে এটি ব্যবহার করুন। CMD ["code-server", "--auth", "none", "--bind-addr", "0.0.0.0:7860", "/app"] # ব্যাখ্যা: # --auth none -> কোনো পাসওয়ার্ড ছাড়াই অ্যাক্সেস চালু করে। # --bind-addr 0.0.0.0 -> কন্টেইনারের ভেতরের সব নেটওয়ার্ক ইন্টারফেসে সার্ভারটি শোনার জন্য প্রস্তুত থাকে। # :7860 -> Hugging Face Spaces-এর জন্য নির্ধারিত পোর্ট। # /app -> VS Code চালু হওয়ার পর ডিফল্টভাবে এই ফোল্ডারটি খুলবে।