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

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