روش نوشتن یک Dockerfile
یکی از بهترین روشهای تولید یک تصویر داکر )docker image(، نوشتن یک Dockerfile و سپس استفاده از دستور docker build است. این روش به دلیل سادگی و سازگاری با متدولوژی زیرساخت، به صورت کد )Infrastructure as Code( به متداول ترین راه برای تولید تصاویر داکر تبدیل شده است.
جهت اجرای دستورات گفته شده در این مقاله نیاز دارید از قبل داکر را نصب کرده باشید. روش نصب داکر روی ویندوز یا لینوکس CentOS را می توانید در همین سایت مطالعه کنید. همچنین برای یادگیری بهتر این مطلب ممکن است آشنایی با مفاهیم پایه ای داکر به شما کمک کند.
ساده ترین Dockerfile میتواند تنها شامل یک خط باشد که مشخص میکند کدام تصویر قرار است به عنوان تصویر پایه، برای تولید یک تصویر جدید بکار گرفته شود. به عنوان مثال کافیست در یک پوشه فایلی با این محتویات و با نام Dockerfile ایجاد کنید:
سپس میتوانید با اجرای دستور docker build -t my-first-image $PWD ،در همان پوشه، اولین تصویر داکر خود را بسازید. در این حالت تصویر جدید کاملا مشابه تصویر پایه خواهد بود؛ که در این مثال نسخه Wheezy از سیستم عامل Debian است.
در نهایت با اجرای دستور docker images میتوانید تمامی تصاویر موجود روی ماشین داکر خودتان را لیست کنید که شامل تصویر جدید نیز می شود:
همانطور که مشاهده میکنید شناسه های )ID( هر دو این تصاویر دقیقا یکسان هستند و حتی با اینکه تصویر جدید لحظاتی قبل تولید شده است، زمان ایجاد آن چند روز قبل و همزمان با تصویر پایه نشان داده میشود.
این بدین دلیل است که دستور docker build تشخیص میدهد که تصویر جدید هیچ تغییراتی نسبت به تصویر پایه ندارد و بنابراین نیازی به اختصاص فضا و شناسه جدید نیست. در واقع با این کار تنها یک نام جدید برای همان تصویر قبلی تولید شده است که این کار را میتوان با کمک دستور docker tag نیز به سادگی و بدون نیاز به Dockerfile انجام داد.
اضافه کردن فایل به تصویر
اگر فایلی مثلا به نام test.sh در همان پوشه داشته باشید میتوانید با اضافه کردن یک خط دیگر در Dockerfile این فایل را به مجموعه فایلهای موجود در تصویر خود اضافه کنید:
در این حالت خروجی دستور docker build به صورت زیر خواهد بود:
نکته قابل توجه در این خروجی وجود دو مرحله در ساخت این تصویر جدید است. حالا اگر لیست تصاویر موجود را مجددا بررسی کنید متوجه خواهید شد که تصویر جدید، به نام my-second-image، شناسه ای متفاوت از تصویر پایه دارد و در زمان جدیدتری نیز ساخته شده است:
مشابه همین روش را میتوانید برای اضافه کردن یک پوشه به تصویر بکار ببرید. دقت کنید که حجم تصویر جدید بسته به تعداد و اندازه فایلهای اضافه شده بزرگتر از تصویر پایه خواهد شد.
نکته: اگر در هیچ یک از فایل ها تغییری ایجاد نکرده باشید و دوباره اقدام به ساخت همین تصویر کنید متوجه خواهید شد که دفعه دوم فرآیند ساخت بسیار سریعتر و تقریبا به صورت آنی تمام میشود. علت این امر آن است که داکر برای هر مرحله یک تصویر میانی می سازد و تمامی این تصاویر میانی را به صورت موقت نگهداری میکند تا فرآیند ساخت را تسریع کند.
برای اینکه محتویات تصویر جدید را مشاهده کنید و از وجود فایلهای خود مطمئن شوید میتوانید اقدام به اجرای یک پوسته )shell( در یک کانتینر از این تصویر کنید:
در صورت نیاز برای آشنایی بیشتر با فرامین داکر میتوانید دستورات پرکاربرد داکر را مطالعه کنید.
همچنین لازم به ذکر است که دستور COPY مشابه قدیمی تری به نام ADD دارد که در حال حاضر کمتر استفاده می شود. این دو دستور تفاوتهایی با یکدیگر دارند، مانند اینکه در دستور ADD میتوان یک آدرس وب را بجای مبدا برای اضافه کردن یک فایل به تصویر استفاده کرد.