آموزش داکر (بخش سوم) – از صفر تا صد


این بخش از سری مقالات آموزش داکر به طور کامل در مورد «داکرفایلها» (Dockerfiles) است. در بخش قبلی این آموزش برخی از اصطلاحهای داکر که برای تعمیق درک خودمان از آن نیاز داریم، مورد بررسی قرار گرفتهاند. در بخشهای بعدی نیز به بررسی مفاهیم ایمیج داکر، دستورهای CLI داکر و استفاده از دادهها به همراه داکر میپردازیم. در ادامه این مقاله میتوانید با دهها دستورالعمل داکرفایل که مورد بررسی قرار گرفتهاند، آشنا شوید. همچنین در نوشته «داکر چیست» هم به معرفی جامع داکر و ارائه راهنمایی برای شروع به کار با آن پرداخته شده است.
همچنین یک مقاله آموزشی جامع و جدیدتر نیز برای آموزش داکر در مجله فرادرس منتشر شده است که مطالعه آن به علاقهمندان پیشنهاد میشود:
ایمیجهای داکر
در بخشهای قبلی گفتیم که کانتینر داکر یک ایمیج داکر است که حیات یافته است. این ایمیج خودکفا بوده و در واقع یک سیستم عامل کمینه به همراه کد اپلیکیشن است. ایمیج داکر در زمان «ساخت» (Build) و کانتینر داکر در زمان اجرا ایجاد میشود.
داکرفایل قلب داکر محسوب میشود. داکرفایل به داکر اعلام میکند که چگونه ایمیجی را بسازد که برای ساخت کانتینر مورد استفاده قرار میگیرد.
هر ایمیج داکر شامل یک فایل به نام Dockerfile بدون هیچ پسوندی است. این داکرفایل زمانی که دستور docker build برای ساخت یک ایمیج فراخوانی میشود، باید در دایرکتوری کاری جاری باشد. البته یک مکان متفاوت را میتوان با استفاده از فلگ فایل (f-) تعیین کرد.
به خاطر داشته باشید که یک کانتینر از یک سری از لایهها ساخته میشود. هر لایه به جز لایه کانتینر نهایی که روی بقیه لایهها قرار میگیرد، صرفاً خواندنی است. داکرفایل به داکر اعلام میکند که کدام لایهها باید به ترتیب به آن اضافه شوند.
هر لایه در عمل یک فایل است که تغییراتی نسبت به لایه قبلی در آن رخ داده است. در یونیکس تقریباً هر چیزی یک فایل است.
«ایمیج مبنا» (base image) لایههای اولیه را ارائه میکند. ایمیج مبنا به نام ایمیج والد نیز نامیده میشود.
زمانی که یک ایمیج از ریپازیتوری ریموت به روی رایانه محلی واکشی میشود، تنها لایههایی بارگذاری میشوند که قبلاً روی رایانه محلی دانلود نشده باشند. داکر کلاً بر مبنای مفهوم صرفهجویی در فضا و زمان از طریق استفاده مجدد از لایههای موجود عمل میکند.
قالببندی دستورالعمل داکرفایل به صورت یک کلمه اولیه با حروف بزرگ در هر خط است که در ادامه آرگومانهایی آمده است. هر خط در یک داکرفایل میتواند شامل چندین دستورالعمل باشد. دستورالعملها در زمان ساخته شدن ایمیج، از بالا به پایین پردازش میشوند. دستورالعملها چیزی مانند زیر هستند:
FROM ubuntu:18.04 COPY. /app
تنها دستورالعملهای FROM ،RUN ،COPY و ADD میتوانند لایههایی را در ایمیج نهایی ایجاد کنند. دستورالعملهای دیگر به پیکربندی موارد مختلف، افزودن متادیتا، یا اعلام موردی به داکر برای انجام در زمان اجرا مانند افشای یک پورت یا اجرای یک دستور مورد استفاده قرار میگیرند.
در این مقاله، تصور میکنیم که شما از یک ایمیج داکر مبتنی بر یونیکس استفاده میکنید. شما میتوانید از ایمیجهای مبتنی بر ویندوز نیز استفاده کنید؛ اما آنها کندتر و ناخوشایندتر هستند و چنین پردازشی نامعمول است. بنابراین در صورت امکان از یونیکس استفاده کنید.
در ادامه فهرست فشردهای از دستورالعملهای داکرفایل را که در ادامه توضیح خواهیم داد مشاهده میکنید.
- FROM – یک ایمیج مبنا (والد) تعریف میکند.
- LABEL – متادیتا ارائه میکند و مکان مناسبی برای گنجاندن اطلاعات فراداده است.
- ENV – یک متغیر محیطی دائمی را تعیین میکند.
- RUN – یک دستور را اجرا میکند و یک لایه ایمیج ایجاد میکند. از آن برای نصب بستهها درون کانتینرها استفاده میشود.
- COPY – همه فایلها و دایرکتوریها را به کانتینر کپی میکند.
- ADD – فایلها و دایرکتوریها را به کانتینر کپی میکند و میتواند فایلهای محلی rar. را از حالت فشرده خارج کند.
- CMD – یک دستور و آرگومانهایی برای یک کانتینر اجرایی ارائه میکند. پارامترها میتوانند لغو شوند. تنها یک CMD میتواند وجود داشته باشد.
- WORKDIR – دایرکتوری کاری برای دستورالعملهایی که در ادامه میآید تعیین میشود.
- ARG – یک متغیر تعریف میکند که در زمان ساخت به داکر ارسال میشود.
- ENTRYPOINT – یک دستور و آرگومانهایی برای یک کانتینر اجرایی ارائه میکند. آرگومانها دائمی هستند.
- EXPOSE – یک پورت را باز (افشا) میکند.
- VOLUME – یک نقطه نصب دایرکتوری تعیین میکند که به دادههای دائمی دسترسی دارد و آنها را ذخیره میکند.
دستورالعملها و نمونهها
یک داکرفایل میتواند به سادگی این خط منفرد باشد:
FROM ubuntu:18.04
From
یک داکرفایل باید با یک دستورالعمل FROM یا دستورالعمل ARG آغاز شود که پس از آن یک دستورالعمل FROM آمده است. کلیدواژه FROM به داکر اعلام میکند که از یک ایمیج مبنا استفاده کند که با ریپازیتوری و تگ ارائه شده مطابقت دارد. ایمیج مبنا به نام «ایمیج والد» (Parent Image) نیز نامیده میشود.
در این مثال، Ubuntu همان ریپازیتوری ایمیج است. اوبونتو نام یک ریپازیتوری داکر رسمی (+) است که یک نسخه پایه از این توزیع سیستم عامل محبوب لینوکس یعنی اوبونتو ارائه میدهد.
دقت کنید که این داکرفایل شامل یک تگ برای ایمیج مبنا به صورت 18.04 است. این تگ به داکر میگوید که کدام نسخه از ایمیج در ریپازیتوری Ubuntu باید واکشی شود. اگر هیچ تگی ارائه نشده باشد، در این صورت داکر به صورت پیشفرض از آخرین تگ استفاده میکند. برای این که منظور خود را روشن اعلام کنید، بهتر است همیشه تگ ایمیج مبنا را قید کنید.
زمانی که داکرفایل فوق برای ساخت ایمیج به صورت محلی برای نخستین بار مورد استفاده قرار گیرد، داکر اقدام به دانلود لایههای ذکر شده در ایمیج Ubuntu میکند. لایهها را میتوان به صورت پشتههایی که روی هم قرار میگیرند تصور کرد. هر لایه یک فایل، با مجموعهای از تفاوتها نسبت به لایه قبلی است.
زمانی که یک کانتینر ایجاد میشود، یک لایه قابل نوشتن به روی لایههای قبلی صرفاً-خواندنی اضافه میشود.
داکر از یک راهبرد «کپی در زمان نوشتن» برای افزایش کارایی استفاده میکند. اگر یک لایه در یک سطح پایینتر درون ایمیج وجود داشته باشد و لایه دیگری نیاز به دسترسی آن داشته باشد، داکر از فایل موجود استفاده میکند و در این حالت لازم نیست هیچ چیزی دانلود شود.
زمانی که یک ایمیج در حال اجرا است، اگر لایهای نیاز به تغییر یافتن از سوی کانتینر داشته باشد، در این صورت فایل به لایه فوقانی که قابل نوشتن است، کپی میشود. برای کسب اطلاعات بیشتر در مورد راهبرد «کپی در حین نوشتن» میتوانید به این صفحه (+) مستندات داکر مراجعه کنید.
یک نمونه عملیتر از داکرفایل
با این که ایمیج تکخطی ما کاملاً فشرده است؛ اما کند نیز هست و اطلاعات کمی ارائه میکند. همچنین در زمان اجرای کانتینر هیچ کار خاصی انجام نمیدهد. در ادامه یک داکرفایل را بررسی میکنیم که یک ایمیج با اندازه کوچکتر میسازد و اسکریپت درون کانتینر را در runtime اجرا میکند.
FROM python:3.7.2-alpine3.8 LABEL maintainer="jeffmshale@gmail.com" ENV ADMIN="jeff" RUN apk update && apk upgrade && apk add bash COPY../app ADD https://raw.githubusercontent.com/discdiver/pachy-vid/master/sample_vids/vid1.mp4 \ /my_app_directory RUN ["mkdir"، "/a_directory"] CMD ["python"، "./my_script.py"]
در ادامه همه اتفاقاتی که در داکرفایل فوق رخ میدهند را یک به یک توضیح میدهیم.
ایمیج مبنا یک ایمیج رسمی از پایتون با تگ 3.7.2-alpine3.8 است. همان طور که از کد منبع (+) آن مشخص است، این ایمیج شامل لینوکس و پایتون است و جز آن هیچ چیز دیگری ندارد. ایمیجهای Alpine به این دلیل محبوبیت دارند که کوچک، سریع و امن هستند. با این وجود، ایمیجهای آلپاین بسیاری از بخشهای ضروری سیستم عامل را در خود ندارند. شما باید بستههای مختلف را بر اساس نیازهای خود نصب کنید.
LABEL
دستورالعمل بعدی که مورد بررسی قرار میدهیم LABEL نام دارد. LABEL فرادادهای به ایمیج اضافه میکند. در این مورد، اطلاعات تماس نگهدارنده ایمیج به آن اضافه میشود. LABEL-ها موجب کندتر شدن ساخت یا اشغال فضای ایمیج نمیشوند و اطلاعات مفیدی در مورد ایمیج داکر ارائه میدهند. از این رو باید قطعاً از آنها بهره گرفت. برای کسب اطلاعات بیشتر در مورد LABEL-ها میتوانید به این لینک (+) مراجعه کنید.
ENV
ENV یک متغیر محیطی دائمی را تعیین میکند که در زمان اجرای کانتینر در دسترس ما خواهد بود. در مثال فوق، شما میتوانید از متغیر ADMIN در زمان ایجاد شدن کانتینر داکر استفاده کنید.
ENV برای تعیین ثابتها نیز مفید است. اگر از چند مکان ثابت برای داکرفایلهای خود استفاده میکنید و میخواهید مقدار آن را بعداً تغییر دهید، میتوانید این کار را با تعیین یک مکان انجام دهید.
در داکرفایل معمولاً چندین روش برای انجام یک کار وجود دارد. بهترین روش در این حالت آن است که بین موارد عرفی یا قراردادهای داکر، شفافیت و سرعت تعادلی برقرار کنید. برای نمونه RUN ،CMD و ENTRYPOINT مقاصد مختلفی دارند ولی همگی آنها میتوانند برای اجرای دستورها مورد استفاده قرار گیرند.
RUN
دستورالعمل RUN یک لایه در زمان ساخت ایجاد میکند. داکر خالت ایمیج را پس از هر Run کامیت میکند. RUN در اغلب موارد برای نصب بستهها درون یک ایمیج استفاده میشود. در مثال فوق به دستور زیر توجه کنید:
RUN apk update && apk upgrade
این دستور به داکر اعلام میکند که بستهها را از ایمیج مبنا بهروزرسانی کند. دستور زیر نیز به داکر اعلام میکند که bash را در ایمیج نصب کند:
&& apk add bash
Apk اختصاری برای عبارت «ابزار مدیریت بسته لینوکس آلپاین» (Alpine Linux Package Manager) است. اگر از ایمیج مبنای لینوکس در توزیعی به جز Alpine استفاده میکنید، در این صورت میتوانید به جای apk.apt با استفاده از دستور apt-get که اختصاری برای «ابزار بسته پیشرفته» (Advanced Package Tool) است اقدام به نصب بستههای مختلف کنید. در یک مثال دیگر روشهای موجود مختلف برای نصب بستهها را بررسی میکنیم.
دستور RUN و همتایانش، CMD و ENTRYPOINT میتوانند به شکل exec یا در فرم Shell اجرا شوند. فرم exec از ساختار آرایه JSON به صورت زیر استفاده میکند:
RUN ["my_executable"، "my_first_param1"، "my_second_param2"]
در مثال فوق، ما از فرم shell در قالب زیر استفاده کردهایم:
RUN apk update && apk upgrade && apk add bash
در ادامه در داکرفایل خود از فرم ترجیح داده شده exec با دستور زیر استفاده میکنیم:
RUN ["mkdir"، "/a_directory"]
دستور فوق برای ایجاد یک دایرکتوری استفاده میشود. فراموش نکنید که از گیومههای جفتی برای رشتههای با ساختار JSON در فرم exec استفاده کنید.
COPY
دستورالعمل زیر به داکر اعلام میکند که فایلها و پوشهها را در چارچوب بیلد محلی دریافت کرده و آنها را به دایرکتوری کاری جاری ایمیج داکر اضافه کند:
COPY../app
دستور COPY دایرکتوری مقصد را در صورت عدم وجود میسازد.
ADD
دستورالعمل ADD کاری مشابه COPY انجام میدهد؛ اما دو کاربرد بیشتر نیز دارد. ADD میتواند برای انتقال فایلها از یک URL ریموت به یک کانتینر و همچنین استخراج فایلهای TAR محلی مورد استفاده قرار گیرد.
در مثال فوق از ADD برای کپی کردن فایلها از یک آدرس ریموت به دایرکتوری با نام my_app_directory در کانتینر استفاده شده است. مستندات داکر (+) توصیه نمیکنند که از آدرسهای ریموت به این روش استفاده کنید، چون در این حالت امکان حذف فایلها وجود ندارد. فایلهای اضافی موجب میشوند که اندازه ایمیجها افزایش پیدا کند.
مستندات داکر (+) همچنین پیشنهاد میکنند که هر جا که امکان دارد از COPY به جای ADD استفاده شود، زیرا شفافیت کار افزایش مییابد. این که داکر ADD و COPY را به صورت یک دستور واحد ترکیب نمیکند تا تعداد دستورالعملهای داکرفایل کاهش یافته و روند کار سرراستتر شود، چندان مناسب نیست.
دقت کنید که دستور ADD شامل یک کاراکتر ادامه خط به صورت (\) است. میتوانید از این کاراکتر برای افزایش خوانایی دستور از طریق شکستن دستورهای طولانی به چندین خط استفاده کنید.
CMD
دستور CMD یک دستور برای اجرای فرمانهای داکر در زمان آغاز به کار آن است. این دستور نتیجه دستور را در زمان ساخت به ایمیج، کامیت نمیکند. در مثال فوق، CMD کانتینر داکر را واخواهد داشت که فایل my_script.py را در زمان اجرا run کند.
چند نکته دیگر در مورد CMD
- در هر داکرفایل تنها یک دستورالعمل CMD میتواند وجود داشته باشد. در غیر این صورت همه دستورها به جز دستور آخر نادیده گرفته میشوند.
- CMD میتواند شامل یک فایل اجرایی باشد. اگر CMD بدون فایل اجرایی ارائه شده باشد، در این صورت دستورالعمل ENTRYPOINT باید وجود داشته باشد. در این حالت هم CMD و هم ENTRYPOINT باید در قالب JSON باشند.
- آرگومانهای خط فرمان برای دستور docker run باعث میشوند که آرگومانهای ارائه شده برای CMD در داکرفایل لغو شوند.
دستورهای بیشتر داکرفایل
در ادامه چند مورد دیگر از دستورالعملها را در یک مثال دیگر از داکرفایل مورد بررسی قرار میدهیم:
FROM python:3.7.2-alpine3.8 LABEL maintainer="jeffmshale@gmail.com" # Install dependencies RUN apk add --update git # Set current working directory WORKDIR /usr/src/my_app_directory # Copy code from your local context to the image working directory COPY.. # Set default value for a variable ARG my_var=my_default_value # Set code to run at container run time ENTRYPOINT ["python"، "./app/my_script.py"، "my_var"] # Expose our port to the world EXPOSE 8000 # Create a volume for data storage VOLUME /my_volume
دقت کنید که میتوان از توضیح یا کامنت در داکرفایل نیز استفاده کرد. کامنتها در داکرفایل با # آغاز میشوند. نصب بسته یکی از وظایف اصلی داکرفایل است. همان طور که قبلتر اشاره کردیم، چندین روش برای نصب بسته با RUN وجود دارد.
شما میتوانید یک بسته را در یک ایمیج Alpine به وسیله دستور apk. Apk نصب کنید که مانند apt-get در بیلدهای لینوکس معمولی است. برای نمونه بسته در یک داکرفایل با ایمیج مبنای Ubuntu میتواند به وسیله دستور زیر بهروزرسانی شده و نصب شود:
RUN apt-get update && apt-get install my_package
علاوه بر apk و apt-get، بستههای پایتون میتوانند از طریق pip ،wheel و conda نیز نصب شوند. زبانهای دیگر میتوانند از نصابهای دیگر نیز استفاده کنند. لایههای زیرین باید لایه نصب را با ابزار مدیریت مرتبط داشته باشند. اگر مشکلی در نصب بستهای دارید، ابتدا مطمئن شوید که ابزارهای مدیریت بسته نصب شده باشند تا بتوانید از آنها استفاده کنید.
همچنین میتوانید از RUN به همراه pip استفاده کنید و بستههایی که میخواهید مستقیماً در داکرفایل خود نصب کنید را فهرستبندی کنید. اگر چنین کاری انجام میدهید، باید نصب بستهها را در یک دستورالعمل واحد تجمیع کنید و آن را با استفاده از کاراکتر \ به چند خط بشکنید. این روش عملکرد شفافی دارد و به لایههای کمتری نسبت به دستورالعمل RUN نیاز دارد.
به طور جایگزین میتوانید الزامات بستهها را در یک فایل لیست کرده و یک ابزار مدیریت بسته را روی آن فایل اجرا کنید. به طور معمول این فایل به صورت requirements.txt نامگذاری میشود. یک الگوی توصیه شده برای بهرهمندی از مزیت کش کردن زمان ساخت را به همراه requirements.txt در بخش بعدی این سری مقالات آموزش داکر ارائه خواهیم کرد.
WORKDIR
دستور WORKDIR اقدام به تغییر دایرکتوری کاری برای دستورهای COPY ،ADD ،RUN ،CMD و ENTRYPOINT میکند که پس از آن میآیند. توجه به چند نکته در این خصوص ضروری است:
- ترجیح بر این است که به جای ناوبری در سیستم فایل با دستورهای cd در سیستم فایل، یک مسیر مطلق با WORKDIR در داکرفایل مورد استفاده قرار گیرد.
- WORKDIR در صورت عدم وجود یک دایرکتوری آن را ایجاد میکند.
- میتوانید از دستور WORKDIR چندین مرتبه استفاده کنید. اگر از مسیرهای نسبی استفاده شود در این صورت دستور WORKDIR دایرکتوری کاری جاری را تغییر میدهد.
ARG
دستور ARG یک متغیر تعریف میکند که از خط فرمان به ایمیج در زمان ساخت ارسال میشود. یک مقدار پیشفرض را میتوانید برای ARG در داکرفایل تعیین کنید. چنان که مقدار زیر در مثال فوق استفاده شده است:
ARG my_var=my_default_value
متغیرهای ARG، برخلاف متغیرهای ENV، در اختیار کانتینرهای در حال اجرا قرار ندارند. با این وجود میتوان از مقادیر ARG برای یک متغیر ENV استفاده کرد و در زمان ساخت از طریق خط فرمان آن را تعیین نمود. در این حالت متغیر ENV در زمان اجرای کانتینر به صورت دائمی حضور خواهد داشت. در مورد این تکنیک در این لینک (+) بیشتر میتوانید مطالعه کنید.
ENTRYPOINT
دستورالعمل ENTRYPOINT امکان ارائه دستور و آرگومانهای پیشفرض را هنگام آغاز به کار کانتینر نیز فراهم میکند. این دستور شبیه به CMD است، اما پارامترهای ENTRYPOINT در صورتی که کانتینر با پارامترهای خط فرمان اجرا شده باشد، بازنویسی نمیشوند.
به جای آن آرگومانهای خط فرمان که به دستور زیر ارسال میشوند به آرگومانهای دستورالعمل ENTRYPOINT الحاق میشوند:
docker run my_image_name
برای نمونه دستور زیر آرگومان bash را به انتهای آرگومانهای موجود دستورالعمل ENTRYPOINT اضافه میکند:
docker run my_image bash
یک داکرفایل باید دستکم یک دستورالعمل CMD یا ENTRYPOINT داشته باشد.
مستندات داکر (+) چند توصیه برای انتخاب بین CMD و ENTRYPOINT به عنوان دستور مقداردهی اولیه کانتینر دارند:
- ENTRYPOINT در مواردی ترجیح دارد که لازم باشد هر بار دستور مشابهی را اجرا کنیم.
- ENTRYPOINT در مواردی ترجیح دارد که کانتینر به عنوان یک برنامه اجرایی استفاده میشود.
- CMD در مواردی ترجیح دارد که لازم باشد آرگومانهای پیشفرض اضافی ارائه شود که میتوانند از سوی خط فرمان بازنویسی شوند.
در مثال فوق، دستور زیر موجب میشود که کانتینر در زمان آغاز به کار، یک اسکریپت به نام my_script.py را با آرگومان my_var اجرا کند:
ENTRYPOINT ["python"، "my_script.py"، "my_var"]
سپس my_var میتواند از سوی my_script به وسیله argparse مورد استفاده قرار گیرد. دقت کنید که my_var یک مقدار پیشفرض دارد که قبلتر از سوی ARG در داکرفایل ارائه شده است. بنابراین اگر یک آرگومان از خط فرمان ارسال هم نشود، همچنان آرگومان پیشفرض مورد استفاده قرار خواهد گرفت.
داکر توصیه میکند که به طور کلی از فرم exex یعنی ENTRYPOINT استفاده کنید:
ENTRYPOINT ["executable"، "param1"، "param2"]
این فرم از نوعی است که دارای ساختار آرایه JSON است.
EXPOSE
دستورالعمل EXPOSE نشان میدهد که کدام پورت قرار است انتشار یابد تا بتوانیم به کانتینر در حال اجرا دسترسی داشته باشیم. EXPOSE در عمل پورت را منتشر نمیکند؛ بلکه به عنوان مستنداتی استفاده خواهد شد که بین فردی که ایمیج را میسازد و فردی که کانتینر را اجرا میکند رد و بدل میشود.
از دستور docker run به همراه فلگ –p برای انتشار و نگاشت یک یا چند پورت در زمان اجرا استفاده کنید. فلگ با حروف بزرگ به صورت P- نیز موجب میشود که همه پورتها باز شوند.
VOLUME
دستور VOLUME تعیین میکند که کانتینر شما دادههای دائمی خود را در کجا ذخیره کرده و یا مورد دسترسی قرار میدهد. VOLUME-ها خود یک موضوع مفصل هستند که یکی از بخشهای بعدی این سری مقالات آموزشی به آنها اختصاص داده شده است، بنابراین بررسی تفصیلی آنها را به آن نوشته موکول میکنیم.
در نهایت دستورالعملهای داکرفایلی را که در این نوشته معرفی کردیم را مجدداً در یک فهرست خلاصه ارائه میکنیم.
دستورالعملهای مهم داکرفایل
- FROM - یک ایمیج مبنا (والد) تعریف میکند.
- LABEL – متادیتا ارائه میکند و مکان مناسبی برای گنجاندن اطلاعات فراداده است.
- ENV – یک متغیر محیطی دائمی را تعیین میکند.
- RUN – یک دستور را اجرا میکند و یک لایه ایمیج ایجاد میکند. از آن برای نصب بستهها درون کانتینرها استفاده میشود.
- COPY – همه فایلها و دایرکتوریها را به کانتینر کپی میکند.
- ADD – فایلها و دایرکتوریها را به کانتینر کپی میکند و میتواند فایلهای محلی rar. را از حالت فشرده خارج کند.
- CMD – یک دستور و آرگومانهایی برای یک کانتینر اجرایی ارائه میکند. پارامترها میتوانند لغو شوند. تنها یک CMD میتواند وجود داشته باشد.
- WORKDIR – دایرکتوری کاری برای دستورالعملهایی که در ادامه میآید تعیین میشود.
- ARG – یک متغیر تعریف میکند که در زمان ساخت به داکر ارسال میشود.
- ENTRYPOINT – یک دستور و آرگومانهایی برای یک کانتینر اجرایی ارائه میکند. آرگومانها دائمی هستند.
- EXPOSE – یک پورت را باز میکند.
- VOLUME – یک نقطه نصب دایرکتوری تعیین میکند که به دادههای دائمی دسترسی دارد و آنها را ذخیره میکند.
سخن پایانی
ما تقریباً همه دستورهای مهم داکرفایل را در این نوشته بررسی کردیم. تنها 5 دستور دیگر به نامهای USER ،ONBUILD ،STOPSIGNAL ،SHELL و HEALTHCHECK وجود دارند که بنا به عدم ضرورت بررسی نشدهاند.
داکرفایلها احتمالاً کلیدیترین جزء داکر هستند که باید آموخته شوند. امیدواریم این مقاله برای کمک به کسب مهارت در زمینه پیکربندی داکرفایل برای شما مفید بوده باشد. در بخش بعدی این سری مقالات آموزشی به روش کاهش اندازه ایمیجهای داکر میپردازیم.
اگر این نوشته برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای برنامه نویسی
- آموزش داکر (Docker) برای توسعه دهندگان
- مجموعه آموزشهای مهندسی نرمافزار
- آموزش نرمافزار مجازیسازی VMware Workstation
- اکوسیستم داکر (Docker) — کامپوننت های رایج
- راهنمای استفاده از Docker و Node.js — از صفر تا صد
- کشف سرویس و انبارههای پیکربندی توزیع یافته در اکوسیستم داکر (Docker) —راهنمای جامع
- داکر چیست ؟ | راهنمای شروع به کار با Docker — رایگان و به زبان ساده
==
سلام من میخوام یک پروژه x-ui رو به عنوان ایمیج بسازم که همیشه بتونم ازش استفاده کنم ! متاسفانه این پروژه نسخه چینیش تو هاب هست و اینم هم نسخه ای که من میخوام لطفا راهنمایی کنید چطوری اینو بسازم!!!
bash
با سلام و تشکر مفید و آموزنده (هر چند کمی سطح بالا)