داکر برای برنامه‌نویس‌ها: قسمت هشتم - بیلد کردن ایمیج با داکرفایل

مقدمه

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

برای این مطلب آشنایی با داکر و کانتینرها لازمه. هم‌چنین دونستن دستورات بش کمک میکنه. برای مطالعه در مورد داکر می‌تونید به قسمت‌های قبلی مراجعه کنید. برای بش در لینوکس هم به این دنباله می‌تونید برید.

معرفی داکرفایل

برای این که بتونیم از روی ایمیج‌های دیگه ایمیج بسازیم باید یک فایل با نام Dockerfile بنویسیم. هیچ پسوندی نداره. حرف اولش هم بزرگه. این فایل رو داخل پوشه اصلی برنامه می‌ذاریم.

اینجا یک فایل ساده‌ی بش دارم و می‌خوام به شکل کانتینری اجراش کنم. از عمد یک مثال ساده در نظر گرفتم تا فقط روی مفاهیم تمرکز کنیم. ان شاء الله قسمت‌های بعد فریم‌ورک‌ها و زبان‌های مختلف رو خواهیم دید. محتوای فایل بش این شکلیه:

کار خاصی نمی‌کنه؛ هر ۲ ثانیه یه بار جمله‌ای رو چاپ می‌کنه. حالا تو همین پوشه داکرفایل رو درست می‌کنم. ویرایشگر من vscode هست و با ایجاد کردن داکر فایل لوگوی داکر رو نشون میده:

احتمالا در ویرایشگرهای دیگه هم همین طوره.

نوشتن داکرفایل

خب دیگه وقتشه شروع به نوشتن کنیم. داخل داکرفایل یک سری کلمات خاص وجود دارن که با حروف بزرگ نوشته میشن. به تدریج باهاشون آشنا میشیم. اولین کاری که می‌کنیم اینه که بگیم از روی کدوم ایمیج می‌خوایم ایمیج جدید رو بسازیم و بهش ایمیج والد یا اصلی یا parent image میگیم. من از ubuntu استفاده کردم. برای این کار از FROM استفاده می‌کنم و جلوش اسم ایمیج رو می‌نویسم:

FROM ubuntu

اول داکرفایل همیشه FROM رو داریم تا مشخص بشه روی چه ایمیجی کار می‌کنیم.

حالا فایل‌هایی که می‌خوایم رو به ایمیج اصلی منتقل می‌کنیم. اول مشخص می‌کنیم که تو کدوم پوشه از ایمیج هستیم.‌ این رو با WORKDIR نشون میدم:

WORKDIR /root

بعدش فایل(های) مورد نظرم رو کپی می‌کنم:

COPY ./script.sh ./

دستور COPY دو تا آرگومان داره؛ اولیش فایل یا پوشه مبدا که در سیستم اصلی هست رو میگه و دومی پوشه مقصد که داخل ایمیج هست. تو آرگومان اول نقطه به معنای پوشه‌ای هست که داکرفایل توشه و تو آرگومان دوم نقطه پوشه‌ای هست که با WORKDIR تعیین گردیم.

آخرین کاری که می‌کنم دادن دستوری برای اجرا هست. یعنی موقعی که یه کانتینر از روی این ایمیج اجرا شد چی کار کنه. در این مورد می‌خوام اسکریپت من اجرا بشه:

ENTRYPOINT [ &quot/bin/bash&quot, &quot./script.sh&quot ]

کلمه ENTRYPOINT رو نوشتم و بعدش دستوری که قراره اجرا شه. دقت کنید که دستور به شکل آرایه باید داده بشه و هر قسمت از دستور یک عنصری از آرایه هست. تمام اعضای لیست هم باید به شکل string باشن.


بیلد کردن ایمیج و اجرای کانتینر

حالا که یه داکرفایل ابتدایی نوشتم می‌خوام از روش ایمیج بسازم. به این کار build میگیم. با استفاده از دستور docker build در پوشه‌ای که داکرفایل دارم این کارو انجام میدم:

جلوش t- گذاشتم تا اسم ایمیج جدید رو بدم. در ضمن بعد از : تگ مناسب هم گذاشتم. یک برنامه که می‌نویسیم اسم ایمیج یکسانی داره ولی با دادن نسخه‌های مختلف تگش تغییر می‌کنه. در آخر نقطه گذاشتم به این معنا که پوشه اصلی همینجاست.

الان این ایمیج رو در لیست ایمیج‌ها می‌بینم:

و بعد از ساخت کانتینر از روش:

همون چیزی که می‌خواستم شد و خوشحالم :)


جمع بندی

در این مطلب با داکرفایل و نحوه نوشتنش آشنا شدیم. بعدش ایمیج‌مون رو با docker build ساختیم و یه کانتینر درست کردیم. امیدوارم براتون مفید بوده باشه. اگر نظر یا سوالی دارید این پایین بفرمایید.

قسمت قبلی