داکر در فرانت

داکر چیست ؟داکر یک پلتفرم نرم افزاری برای ساخت اپلیکیشن‌های مبتنی بر Container است. محیط‌های اجرایی کوچک و سبک که به طور مشترک از هسته سیستم عامل استفاده می‌کنند اما در عین حال در یک محیط ایزوله و کاملا جدا از هم قرار دارند.معماری داکر ( Docker architecure) داکر از معماری کلاینت - سرور استفاده میکند.داکر کلاینت با دکر دیمون( docer daemon) در ارتباط هست که کار های سنگین ساخت , اجرا و توزیع کانتینر های داکر شما را انجام می دهد.کلاینت داکر و دیمون می توانند بر روی یک سیستم اجرا شوند، یا می توانید یک کلاینت داکر را به یک داکر دیمون ریموت وصل کردداکر کلاینت و داکر ریمون با استفاده از یک REST API از طریق سوکت های یونیکس یا یک network باهم ارتباط برقرار میکنندیکی دیگه از داکر کلاینت ها داکر compose هستش که این امکان رو میده با برنامه هایی که از مجموعه ای از کانتینر ها تشکیل شده اند کار کنید.داکر دیمون (The Docker daemon) :داکر دیمون (dockerd) به ریکوست های داکر کلاینت گوش میکنه و اشیا داکر مانند image , کانتینرها , شبکه ها و volumes ها رو مدیریت میکنه.یک دیمون همچنین می تواند برای مدیریت سرویس های داکر با دیمون های دیگه ارتباط برقرار کنه.داکر کلاینت (The Docker client) :داکر کلاینت (docker) راه اصلی تعامل بسیاری از کاربران داکر با خود داکر هستش.وقتی دستوراتی مثل docker run استفاده میکنیم, داکر کلاینت این دستورات رو به داکر دیمون می فرستد که انها را اجرا می کند. داکر کلاینت می تواند با بیش از یک ریمون ارتباط برقرار کنه. ایمیج (Images) :یک image یک الگوی read-only با دستورالعمل هایی برای ایجاد یک container است.اغلب این images ها بر اساس یک image دیگر با برخی سفارش سازی ها ساخته شده است.ممکن است که image را خودمان بسازیم یا از image های که بقیه ساختن استفاده کنیم.برای ساخت image های خودمان یک Dockerfile بهمراه دستور ساده برای تعریف مراحل موردنیاز برای ایجاد image و اجرای آن ایجاد میکنیم.هر دستورالعمل در Dockerfile یک لایه در image ایجاد میکند.وقتی Dockerfile تغییر میدهیم و image را rebuild میکنیم , تنها لایه هایی که تغییر کرده اند بازسازی می شوند.این موضوع باعث میشود که imageهای داکر با فناوری های شبیه سازی دیگری که موجود هست , سریع تر و کوچیک تر باشند.کانتینر ها(Containers) :کانتینر یک نمونه قابل اجرا از یک image است. می توانید با استفاده از Docker API یا CLI یک کانتینر ایجاد , شروع , توقف , حرکت یا حذف کنید.می توانیم یک کانتینر رو به یک یا چند نتورک , فضای ذخیره سازی را به آن متصل کنید یا حتی یک image جدید رو بر اساس state فعل آن ایجاد کنید.بطور پیش فرض,یک کانتینر به خوبی از سایر کانتینرها و ماشین میزبان ان جدا شده است.می توانیم کنترل کنیم که شبکه یک کانتینر , ذخیره سازی یا سایر زیر سیستم های زیربنایی چقدر از کانتینر های دیگر یا از ماشین میزبان جدا هستند.حالا برای بهتر فهمیدن موضوعاتی که صحبتش شد, بهتره که بصورت عملی وارد کار بشیم.قدم اول اینکه داکر رو روی سیستم خودتون نصب کنید.برای نصب به صفحه رسمی داکر مراجعه کنید.بعد از نصب داکر , ترمینال خودتونو باز کنید و دستور docker run hello-world را اجرا کنید.شما باید پیام زیر را ببنید :➜ ~ docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 1b930d010525: Pull complete Digest: sha256:6540fc08ee6e6b7b63468dc3317e3303aae178cb8a45ed3123180328bcc1d20f Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly.بیاید عمیق تر باشیم که چیکار کردیم :-- کامنت docker دستوری هست برای ارتباط و کار با داکر کلاینت-- زمانی که شما دستور docker run [name of image] را اجرا میکنید,داکر دیمون ابتدا چک میکند که یک کپی لوکالی از image فراخونده شده دارید یا نه.درصورتی که وجود نداشته باشد از docker hub دانلود خواهد کرد.-- درمرحله بعدی داکر دیمون یک کانتینر ایجاد میکند که پیام Hello form Docker! را تولید میکند-- سپس داکر ریمون خروجی را به داکر کلاینت ارسال میکند و ان را به ترمینال شما می فرستدداکر برای ریکت خب حالا میرسیم به قسمت هیجان انگیز ماجرا که قراره Docker file خودمونو بسازیم که یه image کاستوم شده بهمون بده.برای شروع دستورات زیر را اجرا کنید➜ ~ npx create-react-app react-test ➜ ~ cd react-test ➜ ~ yarn startشما باید صفحه اصلی ریکت رو ببینیدبرای ساخت داکرفایل خودمون باید در روت پروژه فایلی با نام Dockerfile ساخته شود همراه با محتوایی که زیر همین جمله براتون گذاشتم# Select the image to use FROM node ## Install dependencies in the root of the Container COPY package.json yarn.lock ./ ENV NODE_PATH=/node_modules ENV PATH=$PATH:/node_modules/.bin RUN yarn # Add project files to /app route in Container ADD . /app # Set working dir to /app WORKDIR /app # expose port 3000 EXPOSE 3000 CMD npm startدر ابتدا FROM : مشخص کردن image مورد استفاده در ContainerCOPY : اضافه یا کپی فایل یا دایرکتوری به Container بدون لینک کردنENV: ا ضافه کردن متغییرهای محلی به ContainerRUN : اجرا کردن دستور هنگام ساخته شدن ContainerADD:اضافه یا کپی یا لینک کردن فایل یا دایرکتوری به ContainerWORKDIR : ست کردن دایرکتوری اجرایی در ContainerEXPOSE : مشخص کردن پورت هایی که Container بعد بالا آمدن اجازه دسترسی به آن را می دهدCMD : اجرا کردن یک دستور بعد از ساخته شدن Containerحالا زمان این رسیده که با کمک داکر فایلی که نوشته شده image خودمونو بسازیم :docker image build -t react:test .دستور وارد شده image شما رو میسازه و با اپشن t , شما به image خودتون یه تگ انتخاب میکنید تا استفاده ازش راحت تر باشه.سپس با دستور زیر image ساخته شده رو روی پورتی که مشخص میکنید اجرا میکنیدdocker run -it -p 3000:3000 react:testدستور بالا image شما رو اجرا میکنه و درحال اجرا نگهش میداره با اپشن it . اپشن -p درواقع پورت 3000 کانیتنر شما رو به پورت 3000 سیستم محلی متصل میشه.شما بعد از زدن دستور روی پورت 3000 پروژه خودتونو دارید که رو حالت دولوپ دیپلوی شده و حالا شما یه داکر برای پروژه خودتون ساختید.برای تمرین داکرفایلی ک نوشتید رو تغییر بدید به طوری که درحالت پروداکشن پروژه ریکتی را run کرده باشید!!البته که مسله داکر خیلی گسترده و عظیمه که من اینجا خواستم یه دید مقدماتی از داکر داده باشم و یه پروژه خیلی ساده از داکر ساخته باشیم.امیدوارم مفید واقع شده باشه.اگه سوالی داشتید حتما این زیر کامنت برام بزارید..علی سرمدی :)))