محمد علی امینی
محمد علی امینی
خواندن ۴ دقیقه·۳ سال پیش

خودآموز داکر: درس ۰۵ - سفاریستن ایمیج

تا اینجا با مفهوم‌های ایمیج و کانتینر در داکر آشنا شدی [آشنادی]؛ و آموختی چگونه با استفاده [استفادن] از ایمیج‌های عمومی موجود در مخزن داکر (داکر هاب) یه کانتینر بسازی و اجرایش کنی [باجرایی اش]. در این درسگفتار می‌آموزی چگونه یه ایمیج پایه را سفارشی کنی [بسفاریسی]؛ بعبارتی، می‌آموزی چگونه یه ایمیج بسازی بطوریکه درونش مجموعه‌ای از نرم‌افزارها نصب شده باشد [نصبشته باشد].


توجه. چون علاقه زیادی به آسان کردن [آسانیدن] و باقاعده کردن زبان دارم، واژگان زیادی ساخته‌ام؛ که بدلیل ناشناخته بودن اشان تنها برای شناساندن ازشان استفاده کرده‌ام [استفاده‌ام]. ریشه‌ی بیشتر این واژگان آشکار است؛ و در ویکی‌واژه تعریفشان کرده‌ام [تعریفته‌ام اشان] یا خواهم کرد [تعریفینم اشان].
امیدوارم خوشایندت باشد.
سخنی با خواننده. قصد دارم [قصتادم] خودآموز داکر را از پایه برای برنامه‌نویسان تازه‌کاری که هیچ آشنایی با داکر ندارند بنویسم. ولی چون امکان دسته‌بندی [گروهیستن] مقاله‌ها در ویرگول وجود ندارد، عنوان مقاله‌های این مجموعه را همانند زیر می‌گذارم:
خودآموز داکر: درس <شماره درس> - <موضوع درس>
که «شماره درس» از ۰۱ شروع شده [شروعارده]. پس، بعنوان مثال، برای یافتن درس چهارم کافیه عبارت «خودآموز داکر: درس ۰۴» را در ویرگول جستجو کنی [بجویی]. درضمن، پیشنهاد می‌کنم [می‌توصیم] درس‌ها را بترتیب بخوانی.

کلیت کار

برای سفارشی‌کردن [سفاریستن] یه ایمیج کافیه:

  1. یه فایل داکر بنام Dockerfile در مسیر پروژه‌ات ایجاد کنی [بایجادی]؛
  2. ایمیج پایه و دستورهایی که باید ازطریق ایمیج هه اجرا شوند [اجرایشند] را درقالب دستورالعمل‌های (instruction، راهنمال) قابل درک [درکشدنی] برای داکر اعلام کنی [باعلامی]؛
  3. با استفاده [استفادن] از کارخواه داکر (Docker client) ایمیج سفارشیت را بوسیله غول داکر (Docker daemon) بسازی.
ساختن ایمیج سفارشی با داکر
ساختن ایمیج سفارشی با داکر

دستورالعمل‌های [راهنمال‌های] پرکاربرد فایل داکر

ساختار دستورالعمل‌ها [راهنمال‌ها] بشکل زیر است:

ساختار راهنمال‌های داکر
ساختار راهنمال‌های داکر

و پرکاربردترین راهنمال‌ها:

  • راهنمال FROM: تعیین کردن [تعیندن] ایمیج پایه
FROM name:tag # مثال FROM alpine:latest
  • راهنمال RUN: اجراییدن یه دستور ازطریق ایمیج
RUN [commands] # مثال. نصبیدن مفسر پایتون RUN apk add --update python3
  • راهنمال CMD: تعیین کردن [تعیندن] دستور پیشفرض
CMD [&quotexecutable&quot, &quotparam1&quot, &quotparam2&quot, ....] # مثال. اجراییدن مفسر پایتون CMD [&quotpython3&quot]

مرجع راهنمال‌های فایل داکر

فرایند ساخت ایمیج سفارشی [سازش ایمیج سفارشی]

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

سازش ایمیج سفارشی
سازش ایمیج سفارشی

برای فهمیدن بهتر، کدهای زیر را در فایل داکر بنام Dockerfile وارد کن:

# اعلانیدن ایمیج پایه FROM alpine:latest # نصبیدن پایتون۳ RUN apk add --update python3 # اعلانیدن دستور شروعش CMD [ &quotpython3&quot ]

و در مسیر فایل هه دستور زیر را برای ساختن ایمیج سفارشیت اجرا کن [باجرای]:

docker build .

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

Sending build context to Docker daemon 2.048kB Step 1/3 : FROM alpine:latest ---> 0ac33e5f5afa

و تنها شناسه‌اش برگردانده شده:

docker images # خروجی REPOSITORY TAG IMAGE ID CREATED SIZE alpine latest 0ac33e5f5afa 4 weeks ago 5.57MB

در گام دوم، دستور apk add --update python3 در یه کانتینر میانی اجرا شده، و در پایان کانتینر هه حذف و ازرویش یه ایمیج میانی ساخته شده:

Step 2/3 : RUN apk add --update python3 ---> Running in cbf848245de4 # اجراییدن کانتینر میانی fetch https://dl-cdn.alpinelinux.org/alpine/v3.15/main/x86_64/APKINDEX.tar.gz fetch https://dl-cdn.alpinelinux.org/alpine/v3.15/community/x86_64/APKINDEX.tar.gz (1/13) Installing libbz2 (1.0.8-r1) (2/13) Installing expat (2.4.7-r0) (3/13) Installing libffi (3.4.2-r1) (4/13) Installing gdbm (1.22-r0) (5/13) Installing xz-libs (5.2.5-r1) (6/13) Installing libgcc (10.3.1_git20211027-r0) (7/13) Installing libstdc++ (10.3.1_git20211027-r0) (8/13) Installing mpdecimal (2.5.1-r1) (9/13) Installing ncurses-terminfo-base (6.3_p20211120-r0) (10/13) Installing ncurses-libs (6.3_p20211120-r0) (11/13) Installing readline (8.1.1-r0) (12/13) Installing sqlite-libs (3.36.0-r0) (13/13) Installing python3 (3.9.7-r4) Executing busybox-1.34.1-r5.trigger OK: 56 MiB in 27 packages Removing intermediate container cbf848245de4 # حذفیدن کانتینر میانی هه ---> e4493fed1929 # شناسه ایمیج میانی

در گام سوم هم یه کانتینر میانی ازروی ایمیج میانی گام پیش ایجاد، و دستور شروعش پیشفرض برایش تعیین شده [تعینشته]:

Step 3/3 : CMD [ &quotpython3&quot ] ---> Running in d7da112eada8 Removing intermediate container d7da112eada8 ---> 0dbc7566ebd4 # شناسه ایمیج میانه مرحله سوم Successfully built 0dbc7566ebd4 # شناسه ایمیج نهایی

و درآخر هم ایمیج هه در مخزن ایمیج‌های محلیمان انبار شده [نگران تگ عجیبش نباش، در ادامه می‌آموزی که چگونه به ایمیج‌هایت تگ بدهی]:

REPOSITORY TAG IMAGE ID CREATED SIZE <none> <none> 0dbc7566ebd4 21 minutes ago 54MB alpine latest 0ac33e5f5afa 4 weeks ago 5.57MB
داکر
توسعه‌دهنده سایت با چارچوب جنگو
شاید از این پست‌ها خوشتان بیاید