Table of Contents
Containerization مهندسی نرم افزار مدرن را با فعال سازی استقرار برنامه های سازگار، قابل حمل و کارآمد تغییر داده است.در قلب این حرکت Docker، یک پلت فرم است که ایجاد، استقرار و مدیریت ظروف سبک وزن را برای مهندسان، تسلط بر containerization و Docker دیگر اختیاری نیست - این یک صلاحیت اصلی است.
Containerization چیست؟
Containerization یک روش مجازی سازی سبک است که یک برنامه را با وابستگی های آن بسته می کند - کتابخانه ها، فایل های پیکربندی، Binaries - به یک واحد منفرد، به نام یک container، بر خلاف ماشین های مجازی سنتی (VM)، ظروف هسته سیستم عامل میزبان را به اشتراک می گذارند، که سربار اجرای یک سیستم عامل مهمان جداگانه برای هر برنامه را از بین می برد.
مفهوم containerization به زندان های اولیه ی Unix و زندان های FreeBSD بازمی گردد، اما Docker آن را در سال ۲۰۱۳ با ارائه یک اکوسیستم ساده و قوی، محبوب کرد. امروز، containerization پایه ای از معماری های ابر، میکروسرویس ها و شیوه های DevOps است.
تفاوت های کلیدی ماشین مجازی
- سربار منبع: VM شامل یک سیستم عامل کامل (guest kernel)، مصرف گیگابایت دیسک و رم در هر نمونه. Containers به طور معمول اندازه گیری در مگابایت و به اشتراک گذاری هسته میزبان.
- زمان شروع: A VM می تواند چند دقیقه طول بکشد تا بوت شود؛ یک ظرف در میلی ثانیه شروع می شود.
- قابلیت حمل و نقل: کانتینرها در سراسر محیط قابل حمل تر هستند زیرا آنها فقط شامل برنامه و وابستگی های زمان اجرا آن هستند، نه یک سیستم عامل کامل.
- حل: VMها انزوای قوی تر از طریق جداسازی hypervisor سطح ارائه می دهند. Containers به فضاهای نام هسته و گروه های c تکیه می کنند که می توانند چالش های امنیتی را در صورت پیکربندی اشتباه ایجاد کنند.
مزایای مهندسین
- سازگاری در محیط ها: حذف "آن را بر روی ماشین من کار می کند - همان ظرف بر روی لپ تاپ یک توسعه دهنده، یک سرور مرحله بندی و در تولید اجرا می شود.
- CI / CD: ساخت، آزمایش و استقرار با استفاده از همان تصویر container در سراسر خط لوله.
- مقیاس پذیری رپید: ارکسترها مانند Kubernetes می توانند صدها ظرف را در ثانیه به هم متصل کنند.
- ] کنترل بر زیرساخت ها: Dockerfiles و برچسب های تصویر به شما اجازه می دهد دقیقاً چگونگی ساخت یک برنامه را دنبال کنید.
مفهوم های Docker
برای کار موثر با Docker، مهندسان باید چند جزء بنیادی را درک کنند.هر مفهوم نقش مهمی در چگونگی ساخت، توزیع و اجرا دارد.
تصاویر و لایه های Docker
تصویر Docker یک قالب خواندنی است که شامل دستورالعمل های ایجاد یک container. Images از یک سری لایه ها ساخته شده است، هر کدام یک از آنها یک تغییر را نشان می دهند (به عنوان مثال، نصب یک بسته، کپی کردن لایه های فایل، ذخیره و استفاده از آن در سراسر ساخت، که سرعت توسعه و کاهش ذخیره سازی را افزایش می دهد.
نوشتن فایل های کارآمد
یک Dockerfile یک سند متنی است که شامل تمام دستورات برای جمع آوری یک تصویر است.بهترین شیوه ها عبارتند از:
- از یک تصویر پایه (به عنوان مثال، یا انواع (FLT 1) شروع کنید.
- ترکیب (FLT:2) دستورات برای کاهش تعداد لایه ها
- استفاده از [FLT3] برای حذف فایل های غیر ضروری از زمینه ساخت.
- ادغام چند مرحله ای برای جدا کردن وابستگی های زمان ساخت و زمان اجرا ایجاد می کند.
مثال Dockerfile برای یک برنامه Node.js:
FROM node:18-alpine AS base
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
FROM node:18-alpine
WORKDIR /app
COPY --from=base /app/node_modules ./node_modules
COPY . .
CMD ["node", "server.js"]
چرخه عمر Container Lifecycle
در این میان، در این میان، از چند جمله، به صورت جداگانه، به صورت جداگانه و با استفاده از آن، به صورت جداگانه، به صورت زیر، به صورت زیر، به صورت زیر، به صورت جداگانه و با استفاده از آن، به صورت زیر، به صورت زیر، به صورت زیر، به صورت جداگانه و در صورت لزوم، به صورت زیر اشاره شده است.
سوالات متداول Docker برای مهندسان
در زیر پاسخ های دقیق به سوالات متداول Docker در مصاحبه های فنی و بحث های مهندسی در دنیای واقعی است.
چگونه Docker بهبود گردش کار توسعه؟
Docker از بین بردن اختلافات زیست محیطی با بسته بندی نرم افزار با وابستگی دقیق آن. تیم ها می توانند یک Dockerfile یا یک تصویر از قبل ساخته شده، اطمینان از هر عضو همان پشته است.این سازگاری گسترش به CI / خط لوله CD: همان تصویری که آزمون می گذرد می تواند به تولید بدون بازسازی، علاوه، Docker Compose توسعه دهندگان اجازه می دهد تا برنامه های چند سرویس (به عنوان مثال، یک پیام وب سایت، یک پیام کوچک سازی، یک فایل.
برای بیشتر در ادغام Docker با CI / CD، ببینید راهنمای رسمی CI / CD .
۲- نظر امنیتی هنگام استفاده از Docker چیست؟
از آنجایی که ظروف هسته میزبان را به اشتراک می گذارند، یک ظرف به خطر افتاده می تواند به طور بالقوه بر شیوه های امنیتی کلیدی میزبان تأثیر بگذارد:
- با حداقل امتیاز اجرا کنید از ظروف به عنوان ریشه اجتناب کنید. [۱۰] دستورالعمل در Dockerfiles و پرچم [FLT: ۱۱] در زمان اجرا استفاده کنید.
- (FLT:0) فقط از سیستم های فایل ریشه ای خواندن استفاده کنید: کوه سیستم فایل container به عنوان خوانده شده ( و از حجم داده های قابل توجه استفاده کنید.
- تصاویر را به روز نگه دارید؛ به طور منظم تصاویر را برای آسیب پذیری ها با استفاده از ابزارهایی مانند Docker Scout یا Trivy اسکن کنید.
- از نام کاربری استفاده کنید: کاربران کانتینر Remap به کاربران میزبان غیر مجاز برای محدود کردن آسیب از افزایش امتیاز.
- (به جز این که در این صورت به صورت کامل به آن نیاز نیست، به صورت غیر از این، به صورت مستقیم به آن دسترسی پیدا نکنید.
به [[رده:رده:]] مراجعه کنید.
چگونه تصویر Docker را بهینه سازی می کنید؟
تصاویر کوچکتر زمان انتقال شبکه، هزینه های ذخیره سازی و استراتژی های بهینه سازی سطح حمله را کاهش می دهند:
- تصاویر پایه باریک تصاویر لینوکس آلپی در حدود 5 مگابایت، در مقایسه با 150+ MB برای دبیان کامل است.
- از چند مرحله ای استفاده کنید: جداگانه وابستگی ها را ایجاد کنید (به عنوان مثال، کامپایلرها، npm dev وابستگی) از تصویر زمان اجرا نهایی.
- [در این باره] [مشرکان]: [[[۱]] [[۱۰]]] [[۱۰]]] [[۳]]] [[۳]]] [[۳]]] [[۱۰]]] [۳] [۱] [۱۰] [۱]] [۳] [۳] [۱] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [و [بر روی [بر روی [بر روی [۳] لایه های [برکِ [برکِ [بر [برکِ [بر [بر [برکِ [برکِ [بر [بر [برکِ]]]]]]]]] [بر [بر [بر [بر [بر [بر [بر [بر [برکِ [بر [بر [بر [بر [بر [بر [بر [برکِ [بر [بر [بر [بر [بر [بر [بر [بر [برکِ [برک]]]]]]]]]]]]]]]]]]]]]]]]]]] [برک [برک [برک [برک [
- [FLT: 16] فایل های پراکنده مانند ، logs و Node modules که در تصویر مورد نیاز نیست.
- [در این باره] از استفاده کنید [به جای آنکه در یک لایه جداگانه [FLT 19] استفاده کنید، برای جلوگیری از لایه اضافی.
از این روش بیشتر بدانید: (۱)
چگونه شبکه سازی Docker کار می کند؟
Docker چندین راننده شبکه را برای کنترل ارتباطات container فراهم می کند:
- Bridge: راننده پیش فرض (FLT:1) Containers در همان شبکه پل می تواند از طریق آدرس های IP ارتباط برقرار کند.
- Host: انزوای شبکه را حذف می کند - ظرف از پشته شبکه میزبان به طور مستقیم استفاده می کند.
- اضافه کردن: اتصال بین ظروف در چندین میزبان Docker، به طور معمول با Docker Swarm یا Kubernetes استفاده می شود.
- مک وان: آدرس MAC را به هر ظرف علامت گذاری می کند، و آنها را به عنوان دستگاه های فیزیکی در شبکه ظاهر می شود.
برای برنامه های چند نفره، Docker Compose به طور خودکار یک شبکه پل پیش فرض ایجاد می کند و به سرویس ها اجازه می دهد تا با نام container یکدیگر را حل کنند.
چگونه می توان به جمع آوری اطلاعات در Containers پرداخت؟
به طور پیش فرض، تمام داده های نوشته شده در داخل یک ظرف زمانی که ظرف متوقف می شود از دست می رود.برای ادامه داده ها، Docker حجم و روکش های متصل را ارائه می دهد:
- [[۱] [۱۰] [۱۰] [۱۰] [۱۰] [۱۰] [۱] [۱۰] [۱۰] [۱۰] [۱] [۱۰] [۱]] [۱۰] [۱] [۱۰] [۱] [۱۰] [۱۰] [۱] [۱۰]] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۵] [به خاطر تولید [به] ترجیح داده شده اند؛ زیرا قابل حمل و [و [و [در میان ظروف [و [و [و [و [به اشتراک گذاشته شده اند.
- بر روی کوه ها قرار می گیرد: یک دایرکتوری میزبان را به طور مستقیم در داخل ظرف قرار دهید.
از پرچم یا برای اتصال حجم استفاده کنید، برای پایگاه های داده، همیشه از حجم نام برای اطمینان از اینکه داده ها دوباره زنده می مانند، استفاده کنید.
Docker Compose چیست و چه زمانی باید از آن استفاده کنید؟
Docker Compose ابزاری برای تعریف و اجرای برنامه های چند منظوره Docker است که شما یک فایل می نویسید که خدمات، شبکه ها و حجم ها را مشخص می کند ()، همه خدمات با هم شروع می شوند.استفاده از Compose برای توسعه محلی، محیط های تست و استقرار های ساده که نیازی به ارکستر ندارند.
این توصیه برای خوشه های تولیدی در مقیاس - برای این منظور، Kubernetes یا Docker Swarm را در نظر بگیرید.
چگونه Docker Relate را به Kubernetes ارسال کنیم؟
Kubernetes یک پلت فرم ارکستر برای مدیریت ظروف در سراسر یک خوشه از ماشین ها است، در حالی که Docker دستکاری ایجاد container و زمان اجرا، Kubernetes به طور خودکار استقرار، مقیاس، تعادل بار و خود شفا بخش است. Docker می تواند به عنوان ظرف اجرا شده در زیر Kubernetes استفاده شود، اما Kubernetes همچنین از Containerd و CRIO مهندسان معمولا استفاده می کند تا آنها را در خوشه Kubernet قرار دهد.
برای معرفی، آموزش پایه (FLT:1) را ببینید.
نتیجه گیری
کانتینر سازی با Docker تبدیل به یک مهارت ضروری برای مهندسان نرم افزار است. آن جریان های توسعه را ساده می کند، استقرار را بهبود می بخشد، و معماری های میکروسرویس های مقیاس پذیر را قادر می سازد.با تسلط بر مفاهیم اصلی - تصاویر، ظروف، Dockerfiles، شبکه و پایداری داده ها - و پس از امنیت و بهینه سازی، مهندسان می توانند ساخت و نگهداری سیستم های تولید قوی، آماده شما همچنان به روز رسانی ابزار های سفر خود ادامه می دهد، و به روز رسانی ابزار در حال توسعه در حال توسعه، مانند ابزار های اکوسیستم، به روز رسانی ابزار های Kubernet در حال توسعه، و توسعه، به روز رسانی در حال توسعه، و توسعه، به روز رسانی ابزار در حال توسعه، به روز رسانی ابزار در حال توسعه، به روز رسانی در حال توسعه، به روز رسانی ابزار، به روز رسانی در حال توسعه، و سیستم های ابزار، به روز رسانی ابزار، و توسعه، به روز رسانی در حال توسعه، و توسعه، به روز رسانی در مقیاس پایدار، به روز رسانی در حال توسعه، و توسعه، به روز رسانی در حال توسعه، و سیستم های آموزشی، و سیستم های آموزشی، به روز رسانی ابزار، و پیگیری امنیت و پیگیری امنیت و پیگیری امنیت و پیگیری امنیت و پیگیری امنیت و پیگیری امنیت و