buy vpn kharid vpn kerio vpn mobile vpn
Dockerfile | رایانش ابری
ClearwaterCore_Logo_Print
NFV و Clearwater
۱۳۹۴/۰۱/۱۹
cloud standards
TOSCA استانداردی برای برنامه های ابری
۱۳۹۴/۰۲/۰۴
نمایش همه
docker-logo

هر داکرفایل یک اسکریپت متشکل از دستورات مختلف و آرگومان هایی است که به صورت خودکار عملیاتی روی یک ایمیج پایه برای ایجاد یک ایمیج جدید انجام می دهد . برای سازماندهی همه چیز استفاده می شود و تاحدزیادی به ساده سازی اجرای فرآیندها کمک می کند (ازشروع تا پایان )

داکرفایل ها با تعریف یک ایمیج آغاز می شوند ایمیجی که قراراست نقطه شروع ساخت فرآیندها باشد . با تعقیب متدهای مختلف ، دستورات و آرگومان ها (یا شرایط) منجر به ایجاد یک ایمیج جدید می شوند که برای ساخت کانتینر های داکر بکار می روند .

دایمون داکر با تعریف محتوای داکرفایل ها یک ایمیج می سازد که در ادامه خواهم گفت اما پیش از آن لازم می دانم کمی درمورد سینتکس داکرفایل صحبت کنم .

Syntax یا نحو در برنامه نویسی به معنای یک ساختار برای دستور ، آرگومان ها و هرچیزی که برای ساختن یک برنامه لازم است می باشد ( به عبارتی توابع یا مجموعه ای از دستورالعمل ها )

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

داکرفایل ها با نحو ساده و روشنی به کار می روند که باعث می شود کاربران بتوانند ساده و راحت آنها را ایجاد و بکار برند .

دستورات داکرفایل :

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

همه این دستورات با توجه به نحو یا سینتکس شان که در ادامه گفته خواهد شد داخل یک فایل متنی لیست خواهند شد و این فایل متنی همان داکرفایل ما را تشکیل می دهد . بااین حال ، برخی از این دستورات می توانند در هرمکانی قرار بگیرند .

ADD

این دستور دو آرگومان دارد : یک منبع و یک مقصد که فایل ها را از منبع به مقصد در خود فایل سیستم کانتینر کپی می کند اگر منبع کپی یک آدرس اینترنتی باشد آن وقت محنویات آدرس دانلود شده و در مقصد مشخص شده قرار خواهد گرفت .

مثال :

# Usage: ADD [source directory or URL] [destination directory]

ADD /my_app_folder /my_app_folder

CMD

دستور CMD بسیار شبیه دستور RUN می تواند برای اجرای یک دستور خاص استفاده شود .بااین حال ، برخلاف آن در طول ساخت ، اجرا نمی شود بلکه زمانی که یک کانتینر ساخته شده است ، بکار می رود . بنابراین باید به عنوان یک دستور پیش فرض یا اولیه در نظر گرفت .

مثال :

# Usage 1: CMD application “argument”, “argument”, ..

CMD “echo” “Hello docker!”

ENTRYPOINT

این دستور برنامه های پیش فرضی که هرزمان یک کانتینر ایجاد می شود استفاده می شوند را تنظیم می کند و برای مثال اگر شما یک برنامه خاص داخل ایمیج نصب کرده باشید و بخواهید این ایمیج را فقط برای اجرای اون برنامه استفاده کنید می توانید آن را با ENTRYPOINT تعریف کنید و هرزمان یک کانتینر از آن کانتینر ایجاد شد برنامه شما هدف آن خواهد بود .

اگر شما ENTRYPOINT را با CMD همراه کنید ، آنوقت می توانید “application” را از CMD حذف و فقط “argument” هایی که به ENTRYPOINT منتقل خواهد شد ر ا در خط دستور قرار دهید.

مثال :

# Usage: ENTRYPOINT application “argument”, “argument”, ..

# Remember: arguments are optional. They can be provided by CMD

#           or during the creation of a container.

ENTRYPOINT echo

# Usage example with CMD:

# Arguments set with CMD can be overridden during *run*

CMD “Hello docker!”

ENTRYPOINT echo

ENV

دستور ENV برای تنظیم متغیرهای محیطی استفاده می شود . این متغیرها شامل جفت “key= value” هستند که با کانتینر توسط  اسکریپت ها و برنامه های مشابه قابل دسترسی هستند . این قابلیت داکر ، انعطاف پذیری زیادی برای اجرای برنامه ها ایجاد می کند .

مثال :

# Usage: ENV key value

ENV SERVER_WORKS 4

XPOSE

این دستور برای تخصیص پورت خاصی برای فعال سازی شبکه بین فرآیند در حال اجرا داخل کانتینر و فضای بیرون بکار می رود .

مثال :

# Usage: EXPOSE [port]

EXPOSE   ۸۰۸۰

FROM

این دستور به احتمال زیاد مهم ترین دستور برای داکرفایل هااست . این دستور ایمیج پایه مورد استفاده برای اجرای فرآیند ساخت را مشخص می کند . می تواند هر ایمیجی باشد حتی ایمیجی که شما همین الان ایجاد کرده اید . اگر ایمیجی که FROM تعریف می کند روی هاست داکر نباشد ، آن وقت داکر سعی می کند که آن را پیدا و دانلود کند (از ایندکس ایمیج ها)  بنابراین باید اولین دستوری باشد که در داخل داکرفایل اعلان می شود .

مثال :

# Usage: FROM

FROM ubuntu

MAINTAINER

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

مثال :

# Usage: MAINTAINER [name]

MAINTAINER authors_name

RUN

این دستور مرکزی ترین دستور اجرایی داکرفایل ها است یک دستور را به عنوان آرگومان می گیرد و با اجرای آن فرمی از ایمیج اجرا می شود . بر خلاف CMD ، برای ساخت ایمیج بکار می رود  ( تشکیل لایه ای دیگر در بالای قبلی که کامیت شده است )

مثال :

# Usage: RUN [command]

RUN aptitude install -y riak

USER

برای تعیین UID یا نام کاربری ای که کانتینر را براساس ایمیج ساخته شده استفاده می کند .

مثال :

# Usage: USER [UID]

USER 751

VOLUME

دستور VOLUME برای فعال سازی دسترسی از کانتینرتان به یک مسیر روی ماشین میزبان (مثلا نصب آن ) بکار می رود .

# Usage: VOLUME [“/dir_1”, “/dir_2” ..]

VOLUME [“/my_files”]

WORKDIR

شما با استفاده از CDM یک دستور اجرا می کنید . با WORKDIR جاییکه باید این دستور اجرا شود را تعیین می کنید .

مثال :

# Usage: WORKDIR /path

WORKDIR ~/

خب حالا نوبت اون رسیده که ببینیم چطور می شه از یک داکرفایل استفاده کرد . استفاده از داکرفایل ها ساده است مثل اجرای دایمون داکر . خروجی بعد از اجرای اسکریپت ، ID ایمیج جدید داکر است .فرض کنید می خواهید در مسیری که قرار دارید یک ایمیج با استفاده از داکرفایل موجود بسازید اسم داکرفایل هم my_mongodb است دستور اجرای داکر فایل به صورت زیر خواهد بود :

sudo docker build -t my_mongodb .

خب حالا با یک مثال ساده این بخش از داکر را هم به اتمام می رسانیم . می خواهیم یک ایمیج برای نصب MongoDB با استفاده از داکرفایل بسازیم :

سعی می کنیم این مثال ساده رو مرحله به مرحله عنوان کنیم تا در نهایت به فایل نهایی برسیم :

قدم اول : ایجاد یک داکرفایل خالی

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

sudo nano Dockerfile

قدم دوم : تعریف فایل و هدف آن

این بخش اختیاریه اما به نظرمن خیلی کارخوبیه که خودمون رو عادت بدیم اول همه فایل ها یا اسکریپت هایی که ایجاد می کنیم هدفمون رو از ایجادش بنویسیم :

############################################################

# Dockerfile to build MongoDB container images

# Based on Ubuntu

############################################################

قدم سوم : تعیین ایمیج مبنای کار

# Set the base image to Ubuntu

FROM ubuntu

قدم چهارم : تعریف نویسنده

# File Author / Maintainer

MAINTAINER Example FSKarimi

قدم پنجم : آپدیت لیست ریپازیتوری های برنامه

این بخش لازم نیست بااین حال بهتره باشه

# Update the repository sources list

RUN apt-get update

قدم ششم : تعیین آرگومان ها و دستورات لازم برای دانلود MongoDB

################## BEGIN INSTALLATION ######################

# Install MongoDB Following the Instructions at MongoDB Docs

# Ref: http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/

 

# Add the package verification key

RUN apt-key adv –keyserver hkp://keyserver.ubuntu.com:80 –recv 7F0CEB10

 

# Add MongoDB to the repository sources list

RUN echo ‘deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen’ | tee /etc/apt/sources.list.d/mongodb.list

 

# Update the repository sources list once more

RUN apt-get update

 

# Install MongoDB package (.deb)

RUN apt-get install -y mongodb-10gen

 

# Create the default data directory

RUN mkdir -p /data/db

 

##################### INSTALLATION END #####################

قدم هفتم : تعیین پورت پیش فرض برای اجرای مانگو

# Expose the default port

EXPOSE 27017

 

# Default port to execute the entrypoint (MongoDB)

CMD [“–port 27017”]

 

# Set default container command

ENTRYPOINT usr/bin/mongod

همانطور که می بینید اول با استفاده از دستورEXPOSE پورت پیش فرض را تعیین کردیم سپس با استفاده از CMD این دستور را به کانتینر درحال اجرا معرفی میکنیم و سپس با دستور ENTRYPOINT مسیر اجرای دستور را مشخص کردیم .

قدم هشتم : ذخیره داکرفایل

بعد از اینکه هرچیزی را در جای خودش قرار دادید زمان ذخیره و خروج از داکرفایل است .

قدم نهم: ساخت اولین ایمیج

همانطور که قبلا هم توضیح داده بودم حالا زمان آن رسیده که اولین ایمیج خود را از MongoDB با کمک داکرفایل ایجاد کنیم .

sudo docker build -t my_mongodb .

-t برای تگ زدن به ایمیج استفاده می شود .

قدم دهم : اجرای یک نمونه MongoDB

استفاده از ایمیج ساخته شده ؛ اخرین بخش کار ایجاد یک کانتینر برای اجرای یک نمونه MongoDB  است .

sudo docker run -name my_first_mdb_instance -i -t my_mongodb

به جای my_first_mdb_instance ما می توانیم هر اسمی که بخواهیم قرار بدیم اما اگر نامی تعیین نشه بعدا باید با شناسه ها کار کنیم که کار رو خیلی پیچیده تر می کنند .

کریمی
کریمی
کارشناس سخت افزار، ارشد معماری سیستم های موازی - دانشگاه فردوسی مشهد || محقق در زمینه رایانش ابری؛ زیرساخت به عنوان سرویس || مربی آزمایشگاه های ریزپردازنده، سیستم عامل ، معماری ، منطقی و معماری - دانشگاه بزرگمهر قائنات || آشنایی با انواع پلت فرم های زیرساخت | openstack | Eucalyptus | OpenNebula ||| تجربه کاری در زمینه شبکه : Linux | Debian | Ubuntu Cisco | CCNA | CCNP Microsoft | Server 2003

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *