تجربه من از اجرا anaconda با داکر

آناکوندا یکی از محبوب ترین ابزار بین دیتاساینتیست هاست. یکی از راه های اجرا آناکوندا از طریق داکر هست. امروز من تصمیم گرفتم آناکوندا رو با استفاده از داکر بالا بیارم و می‌خوام در این نوشته درباره همین موضوع و تجربیاتی که یادگرفتم بنویسم.





براساس داکیومنت ارائه دهنده ایمیج، ابتدا به pull کردن ایمیج پرداختم.

docker pull continuumio/anaconda3

بعد از اینکه ایمیج pull شد، به ایجاد کانتینر پرداختم.

(توضیحات اضافه : پورت 8888 کانتینر را به 8888 سیستم خودم مپ کردم. از طرفی یکسری از کامند هایی که باید داخل کانتینر اجرا بشه رو هم اضافه کردم.)

docker run -i -t -p 8888:8888 continuumio/anaconda3 /bin/bash -c "/opt/conda/bin/conda install jupyter -y --quiet && mkdir /opt/notebooks && /opt/conda/bin/jupyter notebook --notebook-dir=/opt/notebooks --ip='0.0.0.0' --port=8888 --no-browser --allow-root"

در نهایت آناکوندا بالا می آید.

حالا نوبت به باز کردن مرورگر سیستمم بود. به آدرس localhost:8888 مراجعه کردم و صفحه احراز هویت باز شد و توکنی که در تصویر بالا موجود هست رو داخل برنامه وارد کردم.

در نهایت دکمه login رو کلیک کردم.

همونطور که مشاهده می کنید، می تونستم از آناکوندا استفاده کنم!

آیا کار تمام است؟

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

اول : اگه فایلی (فایل هایی) از پروژه رو توی کانتینر ایجاد می کردم و می‌خواستم اونو به کامپیوتر خودم منتقل کنم، باید هر دفعه فایل ها رو بین کامپیوتر خودم و کانتینر کپی می کردم.

دوم : به محض stop شدن کانتینر، دیگه نمی تونستم اونو بالا بیارم و خطای زیر نمایش داده می شد :

Error response from daemon: Container 498992e2cd4555c6a168bd3e209ad802f0a226b05a8afc31bde83c087d983e8c is not running

خب

برای حل چالش اول، از والیوم های داکر استفاده کردم. (در ادامه کدش رو خواهید دید.)

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

mkdir: cannot create directory ‘/opt/notebooks’: File exists

براساس ایشویی که کاربری در صفحه گیت هاب ارائه دهنده این ایمیج اعلام کرده بود، گویا مشکل از دستور mkdir بود. یعنی هربار می‌خواستم کانتینر رو start کنم دایرکتوری notebooks ساخته می‌شد و از اونجایی که این دایرکتوری از قبل موجود هست، به اروری که در بالا اشاره کردم بر می خوردم.

برای ایگنور کردن اکسپشن بالا، باید از پارامتر p- برای دستور mkdir استفاده کنیم.


من سه بخش به دستور run اضافه کردم.

یک : اسم کانتینری که قراره ایجاد بشه رو my-anaconda گذاشتم. (چرا؟) چون تعداد کانتینر هایی که من استفاده می کنم، ممکنه زیاد باشه، پس نذاشتم داکر خودش به صورت تصادفی اسم این کانتینر رو انتخاب کنه.

دو : پوشه ای در سیستم خودم رو به دایرکتوری که فایل های پروژه ام که در کانتینر قرار می گیره، مپ کردم.

سه : پارامتر p- رو به دستور mkdir اضافه کردم.


در نهایت:

 docker run -i -t --name my-anaconda -p 8888:8888 -v C:\Users\abolfazl\sources:/opt/notebooks/ continuumio/anaconda3 /bin/bash -c "/opt/conda/bin/conda install jupyter -y --quiet && mkdir -p /opt/notebooks && /opt/conda/bin/jupyter notebook --notebook-dir=/opt/notebooks --ip='0.0.0.0' --port=8888 --no-browser --allow-root"

حالا اگه کانتینر stop بشه هم درد سر هایی که اشاره کردم رو نخواهید داشت!


امیدوارم نوشته امروز براتون مفید بوده باشه.

نویسنده: ابوالفضل وکیلی