اشتراک گزاری برنامه ی داکری

اشتراک گزاری برنامه ی داکری

تا این بخش از آموزش کاربردی داکر، یک image ساختیم، و حالا می خواهیم آن را با دیگران به اشتراک بگذاریم!

برای share کردن یک image داکر، شما باید از یک Registry داکر استفاده کنید. Registry پیش فرض داکر، docker hub است. یعنی همان جایی که همه ی image های مورد استفاده در این آموزش از آنجا آمده اند. 

یادآوری از قسمت آشنایی با معماری داکررجیستری داکر، محلی برای ذخیره ی Image های داکر است. Docker Hub یک رجیستری عمومی است که هرکسی می‌تواند از آن استفاده کند و البته داکر به صورت پیش فرض به گونه ای تظیم شده است که در Docker Hub به دنبال imageها می‌گردد.

ایجاد یک Repository ( مخزن)

برای اینکه  یک image را push کنید، ابتدا باید یک Repository در Docker Hub بسازید.

  1. ابتدا بهhub.docker.com  (داکرهاب) بروید و در صورتی که حساب کاربری ندارید یا Login نیستید، حساب خود را ایجاد و یا لاگین کنید.
  2. روی دکمه ی Create Repository کلیک کنید.
  3. برای اسم Repository تان getting-started را وارد کنید. مطمئن شوید که حالت visibility آن، روی گزینه ی public قرار دارد.
  4. روی دکمه ی Create کلیک کنید.

اگر به قسمت راست صفحه نگاه کنید، بخشی را با نام Docker commands مشاهده می کنید. در تصویر زیر نمونه ی دستوری که برای push کردن در این Repository نیاز دارید، را می بینید.

بخش Docker commands
بخش Docker commands

Push کردن image

  1. در خط فرمان (CLI)، سعی کنید دستوری که در داکرهاب دیده بودید را امتحان کنید. توجه کنید که در دستورتان باید از namespace خودتان بجای docker استفاده کنید.
$ docker push docker/getting-started
The push refers to repository [docker.io/docker/getting-started]
An image does not exist locally with the tag: docker/getting-started

چرا به مشکل 😢 خوردید؟! دستور push به دنبال image ای با اسم docker/getting-started می گردد، اما چیزی پیدا نکرده است. اگر دستور docker image ls را اجرا کنید، شما هم چنین چیزی پیدا نمی کنید.

برای حل این مشکل، باید روی image ای که درست کرده اید tag بزنید، تا اسم دیگری برای آن بگذارید.

2- با دستور زیر در داکرهاب لاگین کنید.

docker login -u YOUR-USER-NAME

3- با استفاده از دستور docker tag به Image ای که قبل تر با نام getting-started ساخته اید، یک نام جدید بدهید. دقت کنید که در دستور زیر، به جای YOUR-USER-NAME، از ID داکر خودتان استفاده کنید.

docker tag getting-started YOUR-USER-NAME/getting-started
  1. حالا دوباره دستور push را اجرا کنید. اگر شما این دستور را، از داکرهاب کپی کرده اید، می توانید بخش tagname را از آن حذف کنید. همانطور که ما هم tag ای روی اسم image نزدیم. اگر هیچ tag ای مشخص نکنید، داکر به صورت خودکار از یک tag با نام latest، استفاده خواهد کرد.
docker push YOUR-USER-NAME/getting-started

 

اجرای image روی یک نمونه ی جدید

حالا که دیگر image ما در یک رجیستری ساخته و push شده است، قصد داریم برنامه مان را، روی یک سیستم جدید (a brand new instance) راه اندازی کنیم که تا به حال، این image کانتینر را ندیده است. به همین واسطه با Play with Docker کمی کار خواهیم کرد.

روی مرورگرتان Play with Docker را باز کنید.

با اکانت داکرهاب تان اینجا هم لاگین کنید.

بعد از لاگین کردن، روی لینک "ADD NEW INSTANCE+" در نوار سمت چپ کلیک کنید. اگر این لینک را ندیدید، مقداری مرورگرتان را عریض تر کنید. بعد از چند ثانیه، یک پنجره ی ترمینال در مرورگرتان باز خواهد شد.

نمایی از  Play with Docker
نمایی از  Play with Docker

حالا در ترمینال، برنامه تازه تان را push کنید.

docker run -dp 3000:3000 YOUR-USER-NAME/getting-started

مشاهده خواهید کرد که image مورد نظرتان گرفته شده و در نهایت، اجرا می شود.

اگر badge 3000 آمد روی آن کلیک کنید و اگر هم نیامد می توانید روی دکمه ی Open Port کلیک کرده و 3000 را تایپ کنید. این برنامه ی شماست، که با اصلاحاتی که انجام داده بودید اجرا شده است.

خلاصه

در این درس، یاد گرفتیم چطور image هایمان را با push کردن در Registry، به اشتراک بگذاریم. سپس، داخل یک محیط کاملا جدید، موفق شدیم image ای که به تازه گی push کرده بودیم را اجرا کنیم. این کار، در فرآیند CI رایج است، یک image ساخته می شود و بعد در Registry مورد نظرمان push می شود و درنهایت production environment می تواند از آن image استفاده کند.

حالا که اینها را یادگرفتیم، بیایید برگردیم به همان چیزی که در بخش آخر متوجه آن شدیم. برای یادآوری، ما متوجه شدیم که وقتی برنامه را Restart می کنیم، همه ی آیتم های Todo مان را از دست داده ایم. قطعا چنین چیزی اصلا تجربه ی خوبی برای کاربر نیست، پس بیایید در قسمت بعدی این مشکل را حل کنیم و ببینیم چطور می توانیم با ذخیره ی دائمی (persist) داده ها، آنها را از خطر حذف در زمان restart نجات بدهیم.

دوره در دست تالیف است ... rocket
نظرات
اگر login نکردی برامون ایمیلت رو بنویس: