معرفی مختصری از کانتینرهای ویندوز. درک کانتینرها کانتینرهای سرور ویندوز

در امروز از یک مدیر سوال بپرسید، من به شما نشان خواهم داد که چگونه یک تصویر را در یک ظرف در ویندوز سرور 2016 مستقر کنید، یک تصویر جدید ایجاد کنید و آن را در Docker آپلود کنید.

یکی از ویژگی های جدید اصلی در ویندوز سرور 2016 پشتیبانی از کانتینرها و داکر است. کانتینرها تجربه مجازی سازی سبک و انعطاف پذیری را ارائه می دهند که توسعه دهندگان می توانند از آن برای استقرار سریع و به روز رسانی برنامه ها بدون سربار ماشین های مجازی استفاده کنند. و در ترکیب با Docker، یک راه حل مدیریت کانتینر، فناوری کانتینر در چند سال گذشته منفجر شده است.

این به‌روزرسانی اطلاعاتی است که قبلاً در استقرار و مدیریت کانتینرهای Windows Server با Docker وجود داشت که برای Windows Server 2016 Technical Preview 3 وجود داشت. برای اطلاعات بیشتر در مورد Docker، به Docker چیست مراجعه کنید؟ و آیا کانتینرهای داکر بهتر از ماشین های مجازی هستند؟ بر روی پایه فنیدانش پتری IT.

برای پیروی از دستورالعمل‌های این مقاله، باید به یک سرور فیزیکی یا مجازی با ویندوز سرور 2016 دسترسی داشته باشید. می‌توانید یک نسخه ارزیابی را از وب‌سایت مایکروسافت دانلود کنید یا یک ماشین مجازی در Microsoft Azure راه‌اندازی کنید. شما همچنین به یک Docker ID رایگان نیاز دارید که با ثبت نام می توانید آن را دریافت کنید.

Docker Engine را نصب کنید

اولین قدم نصب پشتیبانی Docker در ویندوز سرور 2016 است.

  • وارد ویندوز سرور شوید.
  • کلیک جستجو کردننماد نوار وظیفه و نوع پاورشلدر کادر جستجو
  • کلیک کلیک راستموش Windows PowerShellدر نتایج جستجو و انتخاب کنید به عنوان مدیر اجرا شوداز منو
  • هنگامی که از شما خواسته شد، اعتبار مدیر را وارد کنید.

برای نصب Docker روی ویندوز سرور، cmdlet PowerShell زیر را اجرا کنید. از شما خواسته می شود NuGet را نصب کنید، که ماژول Docker PowerShell را از یک مخزن آنلاین قابل اعتماد دانلود می کند.

Install-Module -Name DockerMsftProvider -Force

حالا استفاده کن نصب-بسته cmdlet برای نصب موتور داکر روی ویندوز سرور. توجه داشته باشید که در پایان فرآیند نیاز به راه اندازی مجدد است.

Install-Package -Name docker -ProviderName DockerMsftProvider -Force Restart-Computer -Force

پس از راه اندازی مجدد سرور، اعلان PowerShell را مجددا اجرا کنید و با اجرای دستور زیر بررسی کنید که Docker نصب شده است:

نسخه داکر

یک تصویر را از داکر دانلود کنید و یک فرآیند کانتینر را شروع کنید

اکنون که موتور Docker نصب شده است، بیایید تصویر پیش‌فرض Windows Server Core را از Docker بکشیم:

Docker pull microsoft/windowsServerCore

اکنون که تصویر در سرور محلی آپلود شده است، فرآیند کانتینر را با استفاده از آن شروع کنید پرتاب داکر:

داکر Microsoft /windowsServerCore را اجرا می کند

یک تصویر جدید ایجاد کنید

اکنون می توانیم با استفاده از تصویر ویندوز سرور دانلود شده قبلی به عنوان نقطه شروع، یک تصویر جدید ایجاد کنیم. قبل از اجرا به یک Docker ID نیاز دارید. اگر قبلاً آن را ندارید، برای یک حساب Docker ثبت نام کنید.

حامیان

تصاویر Docker معمولاً از دستورات Dockerfile ساخته می‌شوند، اما برای اهداف نمایشی، ما دستوری را روی تصویر آپلود شده اجرا می‌کنیم، یک تصویر جدید را بر اساس تغییر ایجاد می‌کنیم و سپس آن را در Docker آپلود می‌کنیم تا از فضای ابری در دسترس باشد.

توجه داشته باشید که در خط فرمان زیر -tاین پارامتر تگ تصویر را می دهد و به شما امکان می دهد تصویر را به راحتی شناسایی کنید. همچنین به خط فاصله ای که بعد از نام تگ ظاهر می شود توجه ویژه ای داشته باشید.

"از Microsoft /windowsservercore `n CMD echo Hello World!" | docker build -t mydockerid /windows-test-image -

پس از پایان ساختن تصویر جدید داکر، لیست تصاویر موجود در سرور محلی را بررسی کنید. شما باید هر دو را ببینید. Microsoft /windowsServerCoreو mydockerid /windows-test-imagesدر لیست

تصویر داکر

حالا یک تصویر جدید را در ظرف شروع کنید و به یاد داشته باشید که آن را جایگزین کنید mydockeridبا Docker ID خود و باید ببینید سلام دنیا!در خروجی ظاهر می شود:

docker mydockerid /windows-test-images را اجرا کنید

یک تصویر در Docker آپلود کنید

بیایید تصویری را که ایجاد کردیم در Docker آپلود کنیم تا از فضای ابری در دسترس باشد. با شناسه داکر و رمز عبور خود وارد شوید:

به docker -u mydockerid -p mypassword وارد شوید

استفاده فشار داکربرای آپلود تصویری که در مراحل قبل ایجاد کردیم با جایگزین کردن mydockeridبا نام Docker ID شما:

Docker push mydockerid /windows-test-images

چگونه یک برنامه را در ظرف داکر بسته بندی کنیم؟

من برنامه ای دارم که با NodeJS نوشته شده است. چگونه می توانم آن را در یک تصویر Docker بسته بندی کنم تا به عنوان یک کانتینر اجرا شود؟

Docker یک سیستم مدیریت کانتینر برای سیستم عامل های سازگار با POSIX است (لینوکس در حال حاضر پشتیبانی می شود). یکی از ویژگی های Docker این است که یک برنامه را با تمام محیط های لازم بسته بندی می کند به گونه ای که آن را روی سیستم دیگری بدون مراحل طولانی و پیچیده برای نصب وابستگی ها یا ساختن از منبع اجرا می کند. یک برنامه بسته بندی شده آماده برای استقرار "تصویر" نامیده می شود. تصاویر Docker بر اساس "الگوها" - محیط های کاری از پیش تنظیم شده است. شما می توانید آن را به عنوان توزیع در نظر بگیرید سیستم عامل، اگرچه این کاملاً درست نیست. همچنین می توانید با مطالعه مستندات Docker الگوی خود را ایجاد کنید. مزیت این روش این است که تصویر برنامه شما فقط شامل خود برنامه خواهد بود و محیط مورد نیاز برای آن به طور خودکار از مخزن قالب دانلود می شود. Docker کمی شبیه chroot یا bsd jail است، اما عملکرد متفاوتی دارد.

تمایز بین مفاهیم "ظرف" و "تصویر" مهم است. یک کانتینر یک کپی در حال اجرا از برنامه شما است و یک تصویر فایلی است که برنامه را ذخیره می کند و ظرف از آن ساخته می شود.

فرض کنید یک برنامه NodeJS دارید که می خواهید آن را در یک ظرف بسته بندی کنید. فرض کنید فایلی که برنامه شما را اجرا می کند server.js نام دارد و برنامه برای اجرا به پورت 8000 گوش می دهد.ما از "node:carbon" به عنوان الگو استفاده خواهیم کرد. برای کانتینری کردن برنامه، باید یک "Dockerfile" در فهرستی که فایل های برنامه شما در آن قرار دارد ایجاد کنید، که پارامترهای آماده سازی تصویر را شرح می دهد:

$ Dockerfile را لمس کنید

محتویات فایل ممکن است چیزی شبیه به این باشد:

# الگو را برای استفاده از FROM node:carbon تعیین کنید # ایجاد دایرکتوری کاری برنامه در داخل ظرف WORKDIR /usr/src/app # وابستگی های برنامه را با npm نصب کنید # هر دو package.json و package-lock.json را در صورت وجود بسته COPY کپی کنید*. json ./ RUN npm install # فایل های برنامه خود را در تصویر کپی کنید. . # پورت 8000 را باز کنید تا خارج از کانتینر EXPOSE 8000 قابل دسترسی باشد # دستور اجرای برنامه را در داخل کانتینر CMD [ "npm"، "start"] اجرا کنید.

برای حذف فایل های غیر ضروری از تصویر، می توانید نام آنها را در فایل ".dockerignore" فهرست کنید. می توانید از ماسک (*.log) استفاده کنید.

تصویر با دستور زیر ساخته شده است:

$ docker build -t username/node-web-app .

$ تصاویر داکر # نمونه شناسه برچسب مخزن CREATED node carbon 1934b0b038d1 5 روز پیش نام کاربری/node-web-app آخرین d64d3505b0d2 1 دقیقه پیش

شروع یک کانتینر از یک تصویر با دستور زیر انجام می شود:

$ docker run -p 49160:8000 -d username/node-web-app

این مثال یک ظرف از تصویر "username/node-web-app" ایجاد می کند و بلافاصله شروع می شود. پورت برنامه 8000 در ماشین محلی (localhost) موجود است و برای اینکه "خارج" در دسترس باشد، به پورت 49160 "Forward" می شود. شما می توانید هر پورت رایگان را انتخاب کنید، علاوه بر این، امکان فوروارد برنامه وجود دارد. با مشخص کردن گزینه "-p 8000:8000" "as is" را پورت کنید.

با صدور دستور می توانید مشاهده کنید که کانتینر شما در حال اجرا است:

$ docker ps # شناسه مثال دستور تصویر ... پورت ها ecce33b30ebf نام کاربری/node-web-app:آخرین شروع npm ... 49160->8000

کانتینر را می توان با دستورات مختلفی مدیریت کرد و شناسه این کانتینر را مشخص کرد:

مکث $ docker ecce33b30ebf - مکث کانتینر با شناسه ecce33b30ebf
$ docker رزومه ecce33b30ebf - شناسه کانتینر رزومه ecce33b30ebf
$ docker stop ecce33b30ebf - کانتینر توقف با شناسه ecce33b30ebf
$ docker rm ecce33b30ebf - محفظه را حذف کنید (با این کار تمام داده های ایجاد شده توسط برنامه در داخل ظرف حذف می شود)

در مارس 2013، سولومان هایکس شروع یک پروژه منبع باز را اعلام کرد که بعدها به نام داکر شناخته شد. در ماه‌های بعد به شدت توسط جامعه لینوکس پشتیبانی شد و در پاییز 2014، مایکروسافت برنامه‌های خود را برای پیاده‌سازی کانتینرها در ویندوز سرور 2016 اعلام کرد. WinDocks، که من یکی از بنیانگذاران آن بودم، نسخه‌ای مستقل از آن را منتشر کرد. متن باز Docker برای ویندوز در اوایل سال 2016 با تمرکز بر پشتیبانی کانتینر درجه یک در SQL Server. کانتینرها به سرعت در حال تبدیل شدن به کانون توجه در صنعت هستند. در این مقاله نگاهی به کانتینرها و استفاده از آنها توسط توسعه دهندگان SQL Server و DBA خواهیم داشت.

اصول سازماندهی کانتینر

کانتینرها تعریف می کنند روش جدیدبسته بندی برنامه، همراه با جداسازی کاربر و فرآیند، برای برنامه های کاربردی چند مستاجر. پیاده سازی های مختلف کانتینر برای لینوکس و ویندوز سال هاست که وجود داشته است، اما با انتشار ویندوز سرور 2016، ما استاندارد Docker را بالفعل داریم. امروزه، فرمت و API کانتینر Docker در سرویس‌های عمومی AWS، Azure، Google Cloud، همه توزیع‌های لینوکس و ویندوز پشتیبانی می‌شود. چارچوب ظریف Docker دارای مزایای مهمی است.

  • قابل حمل بودن کانتینرها حاوی وابستگی‌های نرم‌افزار کاربردی هستند و بدون تغییر روی لپ‌تاپ برنامه‌نویس، سرور آزمایشی مشترک و هر سرویس عمومی اجرا می‌شوند.
  • اکوسیستم کانتینرها Docker API کانون نوآوری های صنعت با راه حل هایی برای نظارت، گزارش گیری، ذخیره سازی داده ها، هماهنگ سازی خوشه ای و مدیریت است.
  • سازگاری با خدمات عمومی کانتینرها برای معماری میکروسرویس ها، کاهش مقیاس و بارهای کاری گذرا طراحی شده اند. کانتینرها به گونه ای طراحی شده اند که به دلخواه برداشته و جایگزین شوند، نه تعمیر یا ارتقاء.
  • سرعت و اقتصاد. ساخت کانتینرها چند ثانیه طول می کشد. پشتیبانی موثر چند مشترک ارائه شده است. برای اکثر کاربران، تعداد ماشین های مجازی سه تا پنج برابر کاهش می یابد (شکل 1).

ظروف سرور SQL

SQL Server به مدت ده سال از چند مستاجری نمونه نامگذاری شده پشتیبانی کرده است، بنابراین ارزش ظروف SQL Server چیست؟

نکته اینجاست که کانتینرهای SQL Server به دلیل سرعت و اتوماسیون کاربردی تر هستند. کانتینرهای SQL Server نمونه هایی نام گذاری می شوند که داده ها و تنظیمات آن در چند ثانیه ارائه می شوند. توانایی ایجاد، حذف و جایگزینی کانتینرهای SQL Server در چند ثانیه آنها را برای توسعه، QA و سایر موارد استفاده که در زیر مورد بحث قرار می‌گیرند، کاربردی‌تر می‌کند.

ظروف سرور SQL با سرعت و اتوماسیون خود برای توسعه تولید و محیط کنترل کیفیت ایده آل هستند. هر یک از اعضای تیم با کانتینرهای ایزوله در یک ماشین مجازی مشترک کار می کنند و تعداد ماشین های مجازی سه تا پنج برابر کاهش می یابد. در نتیجه، صرفه جویی قابل توجهی در نگهداری ماشین های مجازی و هزینه مجوزهای مایکروسافت دریافت می کنیم. کانتینرها را می توان به راحتی در آرایه های Storage Area Network (SAN) با استفاده از کپی های ذخیره سازی و کلون های پایگاه داده ادغام کرد (شکل 2).

یک پایگاه داده پیوست شده 1 ترابایتی در کمتر از یک دقیقه در یک ظرف نمونه سازی می شود. این پیشرفت قابل توجهی نسبت به سرورهایی است که نمونه‌های نام‌گذاری شده اختصاصی یا ارائه ماشین‌های مجازی برای هر توسعه‌دهنده دارند. یک شرکت از یک سرور هشت هسته ای برای ارائه حداکثر 20 کانتینر 400 گیگابایتی SQL Server استفاده می کند. در گذشته، تهیه هر VM بیش از یک ساعت طول می‌کشید و نمونه‌های کانتینر در دو دقیقه ارائه می‌شوند. به این ترتیب، می‌توان تعداد ماشین‌های مجازی را تا 20 برابر کاهش داد، تعداد هسته‌های پردازنده را تا 5 برابر کاهش داد و هزینه‌های پرداخت لایسنس مایکروسافت را به‌طور چشمگیری کاهش داد. علاوه بر این، افزایش انعطاف پذیری و پاسخگویی در کسب و کار.

استفاده از ظروف سرور SQL

کانتینرها با استفاده از اسکریپت های Dockerfile تعریف می شوند که مراحل خاصی را برای ساخت یک کانتینر ارائه می دهد. Dockerfile نشان داده شده در شکل 1، SQL Server 2012 را با پایگاه های داده کپی شده در ظرف و یک اسکریپت SQL Server برای پوشاندن جداول انتخابی مشخص می کند.

هر ظرف می تواند حاوی ده ها پایگاه داده با فایل های کمکی و فایل های گزارش باشد. پایگاه های داده را می توان کپی کرد و در یک ظرف اجرا کرد یا با استفاده از دستور MOUNTDB نصب کرد.

هر ظرف حاوی یک سیستم فایل خصوصی جدا شده از منابع میزبان است. در شکل 2، کانتینر با استفاده از MSSQL-2014 و venture.mdf ساخته شده است. یک ContainerID منحصر به فرد و پورت کانتینر ایجاد می شود.


شکل 2: SQL Server 2014 container and venture.mdf

ظروف SQL Server ارائه می دهند سطح جدیدعملکرد و اتوماسیون، اما رفتار آنها دقیقاً مشابه فضاهای نامگذاری شده معمولی است. مدیریت منابع را می توان با استفاده از SQL Server Instrumentation یا از طریق محدودیت های منابع کانتینری پیاده سازی کرد (شکل 3).

سایر برنامه ها

کانتینرها رایج ترین وسیله برای سازماندهی محیط توسعه و QA هستند، اما کاربردهای دیگری نیز در حال ظهور هستند. آزمایش بازیابی فاجعه یک مورد استفاده ساده و در عین حال امیدوارکننده است. سایر موارد شامل کانتینرسازی محیط داخلی SQL Server برای برنامه های قدیمی مانند SAP یا Microsoft Dynamics است. پشتیبان کانتینری برای ارائه یک محیط کاری برای پشتیبانی و تعمیر و نگهداری فعلی. ظروف ارزیابی همچنین برای پشتیبانی از محیط های تولیدی با ذخیره داده های پایدار استفاده می شود. در یکی از مقالات بعدی، به طور مفصل در مورد داده های پایدار صحبت خواهم کرد.

WinDocks متعهد است که از طریق یک رابط وب استفاده از کانتینرها را حتی ساده تر کند. پروژه دیگری بر انتقال ظروف SQL Server در DevOps یا ادغام مداوم با خطوط لوله CI/CD بر اساس Jenkins یا Team City تمرکز دارد. امروز می توانید با استفاده از ظروف روی همه آشنا شوید نسخه های ویندوز 8 و Windows 10، Windows Server 2012 یا Windows Server 2016 با پشتیبانی از همه نسخه‌هایی که با SQL Server 2008 شروع می‌شوند، با استفاده از کپی خود از WinDocks Community Edition (https://www.windocks.com/community-docker-windows).

کاوش در فناوری کانتینر
ویندوز سرور 2016

یکی از قابلیت های قابل توجه جدید معرفی شده در ویندوز سرور 2016 پشتیبانی از کانتینرها است. بیایید او را بهتر بشناسیم

سیستم های مدرن مدت هاست که از اصل یک سیستم عامل - یک سرور دور شده اند. فن‌آوری‌های مجازی‌سازی به شما امکان استفاده کارآمدتر از منابع سرور را می‌دهد و به شما امکان می‌دهد چندین سیستم عامل را اجرا کنید، آنها را از یکدیگر جدا کنید و مدیریت را ساده‌تر کنید. سپس میکروسرویس ها ظاهر شدند که به شما امکان می دهند برنامه های کاربردی ایزوله را به عنوان یک جزء مجزا، به راحتی مدیریت و مقیاس پذیر اجرا کنید. داکر همه چیز را تغییر داده است. روند ارائه یک برنامه همراه با یک محیط به قدری ساده شده است که نمی تواند برای کاربر نهایی جذابیت نداشته باشد. برنامه داخل ظرف به گونه ای کار می کند که گویی از یک سیستم عامل کامل استفاده می کند. اما بر خلاف ماشین های مجازی، آنها نسخه های خود را از سیستم عامل، کتابخانه ها، فایل های سیستم و غیره بارگذاری نمی کنند. کانتینرها یک فضای نام مجزا دریافت می کنند که در آن تمام منابع لازم در دسترس برنامه است، اما نمی توان از آن خارج شد. اگر نیاز به تغییر تنظیمات دارید، تنها تفاوت ها با سیستم عامل اصلی ذخیره می شوند. بنابراین کانتینر بر خلاف ماشین های مجازی خیلی سریع راه اندازی می شود و سیستم را کمتر بارگذاری می کند. کانتینرها از منابع سرور کارآمدتر استفاده می کنند.

ظروف در ویندوز

در ویندوز سرور 2016، علاوه بر فناوری‌های مجازی‌سازی موجود - اپلیکیشن‌های مجازی Hyper-V و Server App-V، پشتیبانی از کانتینرهای Windows Server Containers اضافه شده است که از طریق لایه انتزاعی پشته Container Management که تمام عملکردهای لازم را پیاده‌سازی می‌کند، پیاده‌سازی شده است. این فناوری در پیش‌نمایش فنی 4 اعلام شد، اما از آن زمان تا کنون چیزهای زیادی در جهت ساده‌سازی تغییر کرده است و دستورالعمل‌های نوشته شده در قبل حتی قابل خواندن نیستند. در همان زمان، دو نوع ظروف "خود" پیشنهاد شد - ظروف ویندوز و ظروف Hyper-V. و احتمالاً یکی دیگر از فرصت های اصلی استفاده از ابزار Docker علاوه بر cmdlet های PowerShell برای مدیریت کانتینرها است.

ظروف ویندوز در اصل شبیه FreeBSD Jail یا Linux OpenVZ هستند، آنها از یک هسته با سیستم عامل استفاده می کنند که به همراه منابع دیگر (رم، شبکه) بین آنها به اشتراک گذاشته می شود. فایل ها و سرویس های سیستم عامل در فضای نام هر ظرف نگاشت می شوند. این نوع کانتینر از منابع به نحو احسن استفاده می‌کند و سربار را کاهش می‌دهد و بنابراین به برنامه‌ها اجازه می‌دهد متراکم‌تر قرار بگیرند. از آنجایی که تصاویر پایه ظرف "دارای" یک هسته با یک گره هستند، نسخه های آنها باید مطابقت داشته باشند، در غیر این صورت عملکرد تضمین نمی شود.

کانتینرهای Hyper-V از یک لایه ایزوله اضافی استفاده می کنند و به هر کانتینر هسته و حافظه اختصاص داده شده است. جداسازی، برخلاف نوع قبلی، نه توسط هسته سیستم عامل، بلکه توسط Hyper-V Hyper-V انجام می شود (نیاز به نقش Hyper-V است). نتیجه سربار کمتری نسبت به ماشین‌های مجازی است، اما ایزوله‌تر از کانتینرهای ویندوز است. در این حالت، برای اجرای کانتینر، همان هسته سیستم عامل را داشته باشید. این کانتینرها را می‌توان در Windows 10 Pro/Enterprise نیز مستقر کرد. به ویژه شایان ذکر است که نوع کانتینر در زمان ایجاد انتخاب نمی شود، بلکه در زمان استقرار انتخاب می شود. یعنی هر کانتینری را می توان هم به عنوان ویندوز و هم به عنوان یک نوع Hyper-V اجرا کرد.

به عنوان سیستم عامل در ظرف، از هسته سرور یا سرور نانو بریده شده استفاده می شود. اولین مورد در Windows Sever 2008 ظاهر شد و سازگاری بیشتری با برنامه های موجود فراهم می کند. دومی حتی از Server Core کمتر است و برای اجرا بدون مانیتور طراحی شده است و به شما امکان می دهد سرور را در کوچکترین پیکربندی ممکن برای استفاده با Hyper-V، فایل سرور (SOFS) و سرویس های ابری اجرا کنید، که به 93٪ کمتر نیاز دارد. فضا. فقط شامل بیشترین اجزای لازم(.Net با CoreCLR، Hyper-V، Clustering و غیره).

برای ذخیره سازی، از فرمت تصویر هارد دیسک VHDX استفاده می شود. کانتینرها، مانند مورد Docker، به عنوان تصاویر در مخزن ذخیره می شوند. علاوه بر این، هر یک مجموعه کاملی از داده ها را ذخیره نمی کند، بلکه فقط تفاوت بین تصویر ایجاد شده و تصویر پایه را ذخیره می کند. و در زمان راه اندازی، تمام داده های لازم به حافظه نمایش داده می شود. سوئیچ مجازی برای مدیریت ترافیک شبکه بین کانتینر و شبکه فیزیکی استفاده می شود.