کامند های پرکاربرد داکر و یک تجربه ی عملی

معمولا عکسایی که برای داکر می ذارن از کانتینر هاست ولی خب خیلی خشن و بی روحن! به جاش من اینو از آن اسپلش پیداکردم که هم کانتینر داره و هم دوچرخه که خیلی دوست دارم (و حدود سه سالی هست نشده که دوچرخه سواری کنم)پیش نوشت۱: داکر واقعا فوق العادست و از وقتی که باهاش آشنا شدم هر چه قدر یاد می گیرم احساس می کنم خیلی بیشتر نمی فهمم! (خب این طبیعیه) و هزار مطلب و چالش جدید توی داکر هست برای تجربه کردن و حرفه ای شدنپیش نوشت۲: دو بار دیگه هم قبلا درباره ی داکر نوشتم یا ازشون استفاده کردم و اگر خواستید بهشون سری بزنید:تست سرعت Apache و Nginx با طعم داکر و NodeJsتجربه ی کار با REST API وردپرس و کانفیگ اون با nginx و داکراصطلاحاتی درباره ی داکر که بهتره قبل از هر چیز مرورشون کنیملایه Layer: کامند ها و یا فایل ها و اسکریپت خاصی که اون محیط مورد نظرمون رو برای اجرای اپلیکیشن می سازند. هر لایه روی لایه های قبلی سوار می شوند و اعمال کننده ی تغییراتی روی لایه (های) قبلی هستند. مثلا هر مرحله ی آماده سازی برای اجرای یک وب سرویس نود جی اس ساده می تواند به عنوان یک لایه تعریف شود به این صورت که پشت سر هم باید انجام بشوند تا محیط مناسب مورد نیاز برای اجرا آن وب سرویس فراهم شود.ایمیج Image: لایه های تغییرناپذیر که پایه ی یک کانتینر را تشکیل می دهند.کانتینر Container: نمونه ای کامل از ایمیج که قابل پردازش و اجرا به عنوان برنامه است. کانتینر از لایه های تغییرناپذیری تشکیل شده که روی ایمیج اصلی سوار شده اند (و ایمیج خود لایه های تغییرناپذیر مستقل و جداکانه ای دارد) مثلا فایل زیر نمونه ای از Dockerfile (فایل مربوط به ایجاد کانتینر یا ایمیج) برای node js است که هر خط یک لایه از کانتینر را تشکیل می دهد.رجیستری Registry: محلی برای ذخیره و اشتراک گذاری ایمیج هاریپو Repository: مجموعه ای از کانتینر های در کنار هم (چه یک اپلیکیشن را تشکیل بدهند و چه متفاوت باشند)داکر هاب Docker hub: رجیستری اصلی برای ایمیج ها که توسط شرکت داکر ایجاد شدهFROM node:latest MAINTAINER "mohebbi.sadegh@gmail.com" RUN mkdir -p /nodejs/app WORKDIR /nodejs/app/ #copy app files to WORKDIR COPY index.js . COPY package.json . #install nodejs dependencies RUN npm install CMD npm install && node index.jsنکاتی مختصر مفید درباره ی ستاپ اپلیکیشن ها با داکرسعی کنید تا جای ممکن ایمیج هارو کوچک نگه دارید (مثلا node js و mongo db و redis رو توی یه ایمیج ستاپ نکنید بلکه به صورت سه تا ایمیج جداگانه شبکه ای و یک ریپو ستاپ کنید) این کار باعث افزایش سرعت در ساخت و اجرا و انتقال خواهد شد. پلاگین یا نرم افزار های اضافی به ایمیج اضافه نکنید مگر این که واقعا برای اجرای اپلیکیشن تون لازم باشهاگر اپلیکیشن شما نیاز به مقیاس پذیری دارد ، از docker swarm استفاده کنید چرا که تمامی نیاز های شما در خصوص مدیریت دسته ها به صورت ماشین های مجازی را داراست (کارای عجیب و غریب نکنید و خلاصه این که ساده نگهش دارید)برای تجربه ی حس لذت بخش کارایی و سرعت در توسعه ی اپلیکیشن (و لازم برای تیم های بزرگ و حرفه ای) از ابزار های CI/CD استفاده کنید. می توان از یه نمونه ساده و عالی به نام Gitlab نام برد. البته داکر کلود هم هست که خیلی از فرایند های داکر رو اتوماتیک انجام می ده (که خودم باهاش کار نکردم)کامند های پرکاربرد و لازم برای شروع کار با داکرتوسعه و کار با داکر ایمیجdocker create [image]: ایجاد کانتینر از ایمیجdocker login: لاگین کردن به داکر هابdocker pull [image]: دانلود ایمیج از داکر هابdocker push [username/image]: آپلود ایمیج به داکر هاب (انتشار به صورت عمومی)docker search [term]: جستجو بین ایمیج ها در داکر هابdocker tag [source] [target]: تگ و نشان گذاری برای داکر ایمیج توناجرای داکر کانتینرdocker start [container]: اجرای کانتینرdocker stop [container]: توقف کانتینرdocker exec -ti [container] [command]: اجرای کامند یا دستور خط فرمان در کانتینرdocker run -ti — image [image] [container] [command]: اجرا یا ایجاد کانتینر از یک ایمیج و اجرای کامند مورد نظر به صورت همزمان پس از ایجاد یا اجراdocker run -ti — rm — image [image] [container] [command]: همون کارای کامند قبلی به علاوه ی حذف کانتینر پس از اجرای کامندdocker pause [container]: توقف موقت تمامی فعالیت های کانتینراستفاده از ابزار های داکرdocker history [image]: نمایش تاریخچه ی ایمیجdocker images: نمایش لیست ایمیج هاdocker inspect [object]: نمایش مختصر از اطلاعات عمومی ایمیج یا کانتینرdocker ps: نمایش لیست کانتینر های اجرا شده و وضعیت آن هاdocker version: ورژن داکر که روی سیستم تون نصبهتمیز کردن محیط داکرdocker kill [container]: کشتن! یه کانتینرdocker kill $(docker ps -q): قتل عام کانتینر هاdocker rm [container]: حذف یه کانتینرdocker rm $(docker ps -a -q): حذف تمامی کانتینر هااستفاده ای عملی و سریع از دستورات داکر در حالتی که تغییراتی روی کد های اپلیکیشن دادیداولا: دوره ای هست که آقای طهانی تهیه کردند رو حتما ببینید ، برای شروع خیلی خوبه. از اینجا می تونید به این دوره دسترسی داشته باشید.دوما: ما توی چندپر از تکنولوژی های تقریبا زیاد و گوناگونی در سمت بک اند استفاده می کنیم و برای مدیریت و اجرا و ستاپ همه ی این ها در کنار همدیگه ، چاره ی کار رو در استفاده از docker compose دیدیم. واقعا ابزار فوق العاده عالی و قدرتمندی هست (من که خیلی حال کردم باهاش!) البته بحث من اینجا فقط داکر هست و نیازه که توی فرصت دیگه ای در موردش گپ بزنیم. به هر حال ،‌ فرض کنید شما کد های بک اند رو تغییر دادید ،‌سریع ترین و ساده ترین راهی که من بلدم تا این تغییرات در داکر کانتینر اعمال بشه کامند های زیر هست:# your application code should be updated git pull origin master # build updated docker compose service docker-compose build [service name] # start docker compose again (updated docker container automatically recreated) docker-compose up -d و تمام ... خیلی دوست دارم درباره ی آشنایی یک ساله ام با docker compose براتون بگم (اینقدر ذوق کردم!) ولی بماند برای ویرگولی دیگرپس نوشت۱: منبع بخش ابتدایی این نوشته ،‌ترجمه ای آزاد از این مطلب است.پس نوشت۲: جدیدا بک اند نوشتن با Lua توجه منو به خودش جلب کرده! (قبلا بازی سازی باهاش توجه منو به خودش جلب کرده بود ولی ادامه پیدا نکرد) دارم در موردش تحقیق می کنم. کسی کار کرده؟