نصب SQL Server 2017 بر روی سیستم عامل Ubuntu Linux و از طریق Docker

نکته مهم: این مقاله به مرور زمان، ویرایش و یا تکمیل می‌شود!در صورتی که با مشکل تایپی، دستوری و یا مفهومی در این مقاله برخورد کردید، از شما دوست عزیز و گرامی، تقاضا می‌کنم که مرا مطلع کرده، تا نسبت به تصحیح و تکمیل آن در اسرع وقت اقدام نمایم.با کمال تشکر داریوش تصدیقینسخه ۱.۰شرایط نرم‌افزاری و سخت‌افزاری موجودیک سیستم عامل لینوکس اوبونتو نسخه 18.04.3 بر روی یک کامپیوتر فیزیکی جداگانه و با آی‌پی 192.168.14.56 نصب شده و ما از طریق پروتکل SSH و با استفاده از برنامه PuTTy به آن متصل شده‌ایم.ابتدا با دستور ذیل، چک می‌کنیم که آیا docker بر روی سیستم نصب شده است یا خیر؟ و در صورت نصب بودن، نسخه آن را مشاهده می‌کنیم:docker --versionDocker version 18.09.7, build 2d0083dبرای مشاهده Image های مختلف SQL Server در سایت Docker Hub، می‌توانیم به نشانی ذیل مراجعه نماییم:https://hub.docker.com/_/microsoft-mssql-serverتوجه: لطفا قبل از اجرای هر دستور، ابتدا کل مقاله را مطالعه کرده و سپس نسبت به اجرای دستورات اقدام نمایید!با استفاده از دستور ذیل، Image مربوط به SQL Server 2017 صرفا دانلود می‌شود:docker pull mcr.microsoft.com/mssql/serverولی بهتر است که همیشه، در هنگام دانلود Image، نام Tag مورد نظر را نیز به صراحت اعلام نماییم:docker pull mcr.microsoft.com/mssql/server:2017-latest-ubuntuدر دستور فوق، عبارت بعد از server، مربوط به Tag مورد نظر برای دانلود می‌باشد.پس از دانلود Image مورد نظر، با استفاده از دستور ذیل، اقدام به ایجاد یک Container می‌کنیم:docker run --name mssql -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=yourStrong(!)Password' -p 814:1433 -d mcr.microsoft.com/mssql/server:2017-latest-ubuntuدر خصوص دستورات فوق، به نکات ذیل توجه می‌کنیم:بهتر است که برای Container مورد نظر، و از طریق پارامتر name، نامی را به صراحت تعیین نماییم (mssql)، در غیر این صورت Docker یک نام کاملا تصادفی برای Container در نظر می‌گیرد.حتما از پارامتر d- استفاده می‌کنیم. معادل این پارامتر، detach-- (با دو Dash) می‌باشد و معنی آن، این است که می‌خواهیم این Container بعد از ایجاد شدن، راه‌اندازی (Start) شده و حتی پس از Restart کردن سیستم‌عامل اصلی نیز، به طور خودکار، راه‌اندازی شود.حتما از پارامتر p- استفاده می‌کنیم. معادل این پارامتر، port-- (با دو Dash) می‌باشد و معنی آن این است که، چه پورتی از سیستم اصلی، به پورت Container اصطلاحا Map یا Forward شود. حتی اگر در مثال فوق، هر دو پورت نیز یکی می‌باشند، برای اعمال عملیات Port Forwarding، نوشتن پارامتر p الزامی می‌باشد! در مثال فوق، پورت 1433 مربوط به Container، به پورت خارجی 814 سیستم اصلی، اصطلاحا Map یا Forward می‌شود.دقت کنیم که اگر بر روی سیستم اصلی ما، سرویس Firewall نصب و راه‌اندازی شده است، پورت 814 را در آن آزاد نماییم.دقت کنیم که اگر سیستم اصلی ما، پشت یک Firewall سخت‌افزاری قرار دارد، پورت 814 را، در آنجا نیز آزاد نماییم.دقت کنیم که گذرواژه SA را کاملا Strong تعریف نماییم! در غیر این صورت سرویس SQL Server بر روی Container مربوطه Start نخواهد شد.در صورتی که دستور فوق با موفقیت اجرا شود و سیستم ما نیز دارای IP ای به شماره 192.168.14.86 باشد، می‌توانیم از طریق دستگاه خودمان و از طریق برنامه SSMS = SQL Server Management System و از طریق آدرس 192.168.14.86:814 و با استفاده از کاربر sa و گذرواژه‌ای که در داخل دستور فوق تعریف کرده‌ایم، وارد SQL Server شویم.معمولا ما عادت داریم که Codepage یا Collation مربوط به SQL Server خودمان را Persian_100_CI_AI تعریف نماییم. ولی در صورتی که در داخل این SQL Server اقدام به ایجاد یک Database (مثلا MyDatabase) نماییم، Collation آن چیز دیگری است. برای حل این مساله، از طریق برنامه SSMS و انتخاب گزینه New Query (در قسمت Toolbox) دستور ذیل را نوشته و آن را اجرا می‌کنیم:ALTER DATABASE MyDatabase COLLATE Persian_100_CI_AI; GOبا استفاده از دستور ذیل، می‌توانیم وارد Container شده و فایل‌های بانک‌های اطلاعاتی را بررسی نماییم:docker exec mssql bash cd /var/opt/mssql/data ls -lha exitمی‌توانیم با استفاده از دستور ذیل، فایل‌های مربوط به بانک‌های اطلاعاتی را از Container به سیستم اصلی (و یا برعکس) کپی نماییم:cd ~ mkdir backup_databases docker cp mssql:/var/opt/mssql/data/. ~/backup_databasesپایان