داکر چیست؟

داکر (Docker) یک پلتفرم متن‌باز برای ساخت، بسته‌بندی و اجرای اپلیکیشن‌ها در کانتینرها است. کانتینرها محیط‌های سبک و ایزوله‌ای هستند که به توسعه‌دهندگان و تیم‌های DevOps کمک می‌کنند تا برنامه‌هایشان را به‌همراه تمام وابستگی‌ها اجرا کنند، بدون اینکه نگران تفاوت بین محیط‌های مختلف (مثل لوکال، تست و پروداکشن) باشند.

داکر به ما این امکان را می‌دهد که:

  • اپلیکیشن‌ها را در محیطی مستقل از سیستم‌عامل اجرا کنیم.
  • وابستگی‌ها، تنظیمات و کتابخانه‌های موردنیاز را در یک داکر ایمیج (Docker Image) بسته‌بندی کنیم.
  • اجرای برنامه در مقیاس بزرگ را ساده‌تر کنیم.

تغییر دایرکتوری روت داکر

به صورت پیش‌فرض عموماً داکر داده‌هایش را در مسیر /var/lib/docker در سیستم عامل لینوکس ذخیره می کند. داده‌هایی مانند ایمیج‌های دانلودشده، داده‌های مربوط به کانتینرها، داده‌های ذخیره‌شده در والیوم‌ها، تنظیمات شبکه‌های داکر، پلاگین‌ها و تنظیمات خاص و غیره را ذخیره می‌کند. در برخی موارد نیاز است که شما این مسیر را تغییر دهید و به داکر بگویید در جای دیگر داده‌هایش را ذخیره نماید.

چرا نیاز است دایرکتوری روت داکر را تغییر دهیم؟

۱. فضای کافی روی دیسک اصلی وجود نداشته باشد: اگه حجم زیادی از کانتینرها، ایمیج‌ها و والیوم‌های داکر استفاده بشه، ممکنه فضای دیسک اصلی پر و باعث مشکل توی کل سیستم شود. برای همین، بهتره این مسیر رو روی یه دیسک جداگانه یا یک پارتیشن بزرگ‌تر تنظیم کنیم.

۲. افزایش سرعت با استفاده از دیسک سریع‌تر (SSD/NVMe): اگه دیتای داکر روی یه هارد معمولی (HDD) ذخیره بشه، سرعت بارگذاری ایمیج‌ها و اجرای کانتینرها پایین میاد. می‌توانیم مسیر داده‌های داکر رو روی یه SSD یا NVMe پرسرعت قرار بدیم تا عملکردش بهتر بشه.

۳. جداسازی داده‌های داکر از سیستم‌عامل برای مدیریت بهتر: وقتی داده‌های داکر روی یه دیسک جدا باشه، اگر روزی لازم شد سیستم‌عامل رو مجدداً نصب کنیم، داده‌های داکر دست‌نخورده باقی می‌مونه و راحت می‌تونیم دوباره بهش دسترسی پیدا داشته باشیم.

۴. امنیت و پشتیبان‌گیری راحت‌تر: بعضی از افراد مسیر داده‌های داکر رو روی یه دیسک رمزنگاری‌شده قرار میدن تا امنیت بیشتری داشته باشن. همچنین، اگر مسیر داده‌های داکر روی یه دیسک جدا باشه، میشه راحت‌تر ازش بکاپ گرفت و در صورت خرابی سریع‌تر بازیابی کرد.

۵. ذخیره داده‌ها روی NFS یا یک سرور دیگر: در برخی شرکت‌ها، داده‌های داکر رو روی یک فضای ذخیره‌سازی شبکه‌ای (NFS، SAN، یا NAS) قرار میدن تا تیم‌های مختلف به اون دسترسی داشته باشند یا به‌سادگی بین چند سرور جابجا بشه.

راهنمای گام به گام تغییر دایکتوری روت داکر

دقت کنیم که مراحل زیر را دقیق و به ترتیب انجام دهیم. در صورتی که این مراحل را به ترتیب و صحیح انجام ندهیم ممکن است با خطاهای عجیب غریبی مواجه شویم. این مراحل در توزیع اوبونتو (ubuntu) تست شده است اما برای هر توزیع دیگری از لینوکس که از systemd استفاده می‌کند نیز جواب می‌دهد.

گام اول
متوقف کردن داکر

اگر در حین تغییر دایرکتور روت، داکر در حال اجرا باشد، ممکن است بخشی از دیتا در زمان انتقال دایرکتوری گم شود و از دست بروند. به همین دلیل لازم است ابتدا داکر متوقف گردد. برای متوقف کردن داکر از دستورات زیر استفاده کنید:

$ sudo systemctl stop docker.service
$ sudo systemctl stop docker.socket

گام دوم
ایجاد فولدر مقصد

در مسیر جدیدی که قصد داریم داده‌های داکر در آن ذخیره شود، یک فولدر به نام docker ایجاد می‌کنیم. مثلا ما قصد داریم در مسیر /mnt/new فولدر داکر را ایجاد نماییم. پس دستور زیر را وارد می‌کنیم:

 $ mkdir –p /mnt/new/docker

گام سوم
سینک کردن فولدر مبدا و مقصد

با هدف حفظ آخرین وضعیت داکر، لازم هست دیتاهای قبلی که داکر در فولدر ابتدایی نوشته است را به فولدر جدیدی که در گام دوم ساختیم منتقل کنیم. اگر از دستور کپی (cp) استفاده کنیم، برخی از متادیتاها به درستی منتقل نمی‌شوند و در نتیجه باعث می‌شود که داکر به درستی مجدد راه اندازی نشود و با مشکلات عجیب غریبی روبرو شویم. بنابراین حتما به جای کپی یا move کردن، از سینک استفاده نمایید. دستور آن به این صورت است:

$ rsync –aP /var/lib/docker /mnt/new/docker

در دستور بالا، آدرس اول یعنی /var/lib/docker همان دایرکتوری ابتدایی روت داکر می‌باشد و آدرس دوم، فولدر جدیدی است که قصد داریم از این به بعد داده‌های داکر در آن ذخیره گردد. در مثال ما آدرس دوم، آدرس فولدری است که در گام دوم ایجاد کردیم یعنی /mnt/new/docker

گام چهارم
حذف یا تغییرنام فولدر ابتدایی

بعد از اینکه مطمئن شدیم گام سوم با موفقیت انجام شده است، می‌توانیم فولدر مبدا یا ابتدایی داکر را حذف یا تغییر نام دهیم. پیشنهاد من این است که این فولدر را به جای حذف، تغییر نام دهیم که در صورت بروز مشکلات پیش‌بینی نشده، اصل داده ها را از دست نداده باشیم. دستور تغییرنام:

$ mv /var/lib/docker /var/lib/docker_backup

گام پنجم
ایجاد فایل کانفیگ daemon

در مسیر /etc/docker یک فایل جیسون با نام daemon.json ایجاد کنید. اگر از قبل این فایل در این مسیر وجود دارد آن را ویرایش کنید. سپس خطوط زیر را در آن نوشته و ذخیره نمایید:

{
   “data-root”: “/mnt/new/docker”
}

در صورتی که فایل daemon.json از قبل وجود دارد فقط کلید و مقدار نوشته شده در بالا را به جیسون موجود اضافه کنید.

گام ششم
ری‌لود کردن daemon

در برخی از نسخه های لینوکس نیاز است که فایل daemon ری‌لود گردد. برای اینکار می توانید از دستور زیر استفاده کنید:

$ sudo systemctl daemon-reload

گام هفتم
ایجاد symlink برای جلوگیری از وقوع خطا

این گام در برخی مواقع ضروری است تا اجرا گردد. چه مواقعی ضروری است؟ زمانی که خطای زیر در هنگام راه اندازی مجدد داکر رخ می‌دهد، به این گام نیاز است.

Error response from daemon: error evaluating symlinks from mount source “/var/lib/docker/…”: lstat /var/lib/docker: no such file or directory

برای رفع این خطا، باید symlink مربوطه را ایجاد نماییم. برای اینکار از دستور زیر استفاده می‌کنیم:

$ ln -s /mnt/new/docker /var/lib/docker

که در دستور بالا، بخش اول آدرس فولدر جدید و بخش دوم آدرس فولدر قدیمی داده‌های داکر می‌باشد.

گام هشتم
استارت داکر

در این گام همه چیز برای استارت مجدد داکر آماده می‌باشد. برای این منظور از دستور زیر استفاده می‌کنیم:

$ sudo systemctl start docker

گام نهم
صحت سنجی و تست

در این گام باید بررسی کنیم که داکر به درستی استارت شده است و همه موارد قبلی به درستی در جای خود قرار دارند یا خیر. همچنین چ کنیم که با تمام تغییرات، داکر بدون مشکل در حال سرویس دهی می‌باشد؟ برای این منظور می‌توان از دستور زیر استفاده کنیم تا لیستی از تمام پروسه‌هایی که به نوعی به داکر مربوط هستند رو بهمون نشون بده:

$ ps aux | grep -i docker | grep -v grep

البته اگر سرویس ها بدون چالش راه اندازی شده‌اند، عملیات با موفقیت انجام شده و از این به بعد داده‌های داکر در مسیر جدید ذخیره می‌گردند.

گام دهم
حذف فایل‌های اضافه

در صورتی که در گام چهارم، مانند من به جای حذف کردن روت اصلی داکر، آن را تغییرنام داده‌اید و هنوز دیتاهای قدیمی داکر در مسیر /var/lib/docker_backup وجود دارند، می‌تونیم با استفاده از دستور زیر، این دایرکتوری را برای آزاد کردن فضای اشغال شده، حذف کنیم. فقط حواسمون باشه که داکر به درستی راه‌اندازی شده و در حال سرویس دهی باشد:

$ rm -rf /var/lib/docker_backup

امیدوارم این پست آموزشی برای شما مفید باشد. اگر در هر گام با خطایی روبرو شدید یا سوالی دارید در بخش کامنت‌ها برام بنویسید که بهتون کمک کنم.

محتواهای مرتبط با این صفحه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *