مهندس نرم افزار @ اسنپ
آموزش استفاده از GitHub Packages بعنوان Docker Image Registry
سرویس GitHub Packages یک مخزن برای نگهداری پکیج ها و Image های داکر (Docker) است. در این پست میخواهیم نحوه استفاده از این سرویس به عنوان Image Registry برای Image های داکر را توضیح دهیم. این سرویس میتواند همانند Image Registry اصلی داکر یعنی Docker Hub مخزنی برای نگهداری Image های Docker به کاربران و سازمان (Organization) ها ارائه کند. نکته مثبتی که این سرویس میتواند برای کاربران ایرانی داشته باشد عدم تحریم کاربران ایرانی از طرف GitHub میباشد.
فرایند Authentication
برای Pull یا Push کردن Image ها در GitHub Packages لازم است که از طریق کلاینت Docker لاگین کنید. لاگین با استفاده از Username گیتهاب و یک توکن (Personal access token) انجام میشود.
برای دریافت Personal access token، در منوی کاربری سایت GitHub، مسیر زیر را دنبال کنید:
Settings > Developer Settings > Personal access tokens
در صفحه باز شده بر روی دکمه Generate new token کلیک کنید و یک عنوان دلخواه وارد کنید، دسترسی های Read و Write را تیک بزنید و عمر توکن را مشخص کنید تا توکن را دریافت کنید.
اکنون میتوانید با دستور زیر لاگین کنید. پس از اجرای دستور میبایست Username گیتهاب خود و سپس توکن دریافت شده را به جای Password وارد کنید.
docker login ghcr.io
ساخت Image های Docker
ایمیج های داکر معمولا از روی Dockerfile ها ساخته میشوند و یا اینکه از Image Registry های دیگر مانند Docker Hub دریافت (Pull) میشوند.
برای ساخت یک ایمیج از یک Dockerfile میتوانید دستور زیر اجرا کنید:
docker build -t my-image-name <Dockerfile-path>
همچنین برای Pull کردن یک ایمیج (مثلا NGINX) از Docker Hub میتوانید دستور زیر اجرا کنید:
docker pull nginx:1.21.1-alpine
انتشار (Push) Image ها در Github Packages
با دستور docker images میتوانید لیست ایمیج های موجود در دسکتاپ یا سرور خود را مشاهده کنید. آنرا اجرا و از وجود ایمیج مورد نظر اطمینان حاصل کنید.
root@example ~$ docker images
nginx 1.21.1-alpine b9e2356ea1be 10 months ago 22.8MB
ubuntu 18.04 39a8cfeef173 10 months ago 63.1MB
mysql 8.0.25 5c62e459e087 11 months ago 556MB
برای مثال میخواهیم ایمیج nginx را از لیست ایمیج های موجود در سرور را به GitHub Packages آپلود (Push) میکنیم. برای این کار ابتدا با دستور زیر یک تگ جدید با پیشوند آدرس سرویس GitHub Packages برای ایمیج مورد نظر میسازیم.
docker tag b9e2356ea1be ghcr.io/{username}/nginx:1.21.1-alpine
در دستور بالا «b9e2356ea1be» شناسه (ID) ایمیج NGINX است که از اجرای دستور docker images بدست آوردیم. عبارت ghcr.io/{username}/nginx:1.21.1-alpine آدرس جدید ایمیج است که باید با ghcr.io (آدرس سرویس GitHub Packages) شروع شود. {username} را باید با Username یا Organization گیتهاب خود تغییر دهید. nginx نام ایمیج و 1.21.1-alpine تگ آن است.
در انتها با دستور زیر، Image در GitHub Packages اپلود (Push) میشود.
docker push ghcr.io/{username}/nginx:1.21.1-alpine
لیست Images های Push شده میتوانید در یکی از آدرس های زیر (اولی برای اکانت شخصی و دومی برای Organization) مشاهده کنید.
https://github.com/{username}?tab=packages
https://github.com/orgs/{name}/packages
تنظیمات Image ها
در پنل GitHub Packages روی Image مورد نظر کلیک کنید و از ستون سمت راست بر روی دکمه Package Settings کلیک کنید. در صفحه باز شده میتوانید تنظیمات مربوط به Image را تغییر دهید.
برای مثال، در بخش Manage access میتوانید کاربرانی را که به Image دسترسی دارند را مدیریت کنید. در صورتی که میخواهید Image بصورت Public ارائه شود تا برای عموم قابل استفاده باشد، بر روی دکمه Change Visibility کلیک کنید و آنرا روی Public بگذارید.
دریافت (Pull) ایمیج ها
همانند Docker Hub و دیگر Docker Image Registry ها، با دستوری مشابه دستور زیر میتوانید یک Image را بر روی دسکتاپ یا سرور خود Pull کنید.
docker pull ghcr.io/{username}/nginx:1.21.1-alpine
سخن پایانی
در این پست، نحوه استفاده از GitHub Packages بعنوان یک Docker Image Registry برای Pull و Push کردن Image های Docker آموزش داده شد. این سرویس میتواند جایگزین مناسبی برای سرویس Docker Hub که کاربران ایرانی را تحریم کرده باشد.
این سرویس میتواند نقش یک Registry رایگان را برای Image های عمومی و خصوصی پروژه های شما ایفا کند. همچنین اگر امکان نصب پروکسی بر روی سرور را ندارید میتوانید Image های مورد نیاز از Docker Hub را روی کامپیوتر دسکتاپ (که پروکسی دارد) Pull و در Packages گیتهاب Push کنید و در پروژه های خود از آن استفاده کنید.
مطلبی دیگر از این انتشارات
بررسی توسعه ی اقتصادی ایران در سه دهه ی اخیر
مطلبی دیگر از این انتشارات
اپراتورهای تلفن همراه، پرداخت الکترونیک، وصله ناجور
مطلبی دیگر از این انتشارات
در نقد «حجاب حداکثری، تنها، برای زنان»