در این مقاله به بررسی dockerfile و چگونگی ساختن آن می پردایم.
dockerfile چیست؟
dockerfile ها در واقع فایل های تنظیمات داکر میباشند که با استفاده ار آنها میتوانیم به داکر بگوییم که یک container را چگونه بالا بیاورد و آن را تنظیم کند. مثلا چه سرویس هایی روی ان بالا بیاید و چه پورت هایی را باز کند و چه اجازه دسترسی به آنها دهد.
در زیر جدولی آورده ایم که کلمات کلیدی مورد استفاده در این فایل را توضیح داده است.
توضیح |
دستور مورد استفاده |
مشخص کردن image مورد استفاده در Container |
FROM |
سازنده و توصیحاتContainer |
MAINTAINER |
اجرا کردن دستور هنگام ساخته شدن Container |
RUN |
اجرا کردن یک دستور بعد از ساخته شدن Container |
CMD |
اجرا کردن یک دستور بعد از ساخته شدن Container |
ENTERYPOINT |
اضافه کردن متادیتا به Container |
LABEL |
مشخص کردن پورت هایی که Container بعد بالا آمدن اجازه دسترسی به آن را می دهد |
EXPOSE |
اضافه کردن متغییرهای محلی به Container |
ENV |
اضافه یا کپی یا لینک کردن فایل یا دایرکتوری به Container |
ADD |
اضافه یا کپی فایل یا دایرکتوری به Container بدون لینک کردن |
COPY |
اضافه کردن یک mount point در ماشین میزبان یا Containerهای دیگر |
VOLUME |
ست کردن یک user یا UID در Container |
USER |
ست کردن دایرکتوری اجرایی در Container |
WORKDIR |
بعد از معرفی دستورات موجود در dockerfile نوبت به آموزش ساختن آن و چگونگی اجرای ان میرسد.
در اینجا ما با مثالی درک این موضوع را برای شما آسان تر میکنیم .
در مثال ما میخواهیم یک container ایجاد کنیم که روی آن سرویس httpd بالا بیاید و همچنین یک فایل index.html در آن باشد و پورت httpd شماره ۸۰ باشد.
برای این منظور ابتدا یک فایل ایجاد میکنیم
vi nowlearn.ir-container
سپس اطلاعاتی مانند زیر را در ان کپی می کنیم
FROM centos
MAINTAINER nowlearn <admin@nowlearn.ir>
RUN yum -y install httpd
RUN echo “Hello DockerFile” > /var/www/html/index.html
EXPOSE 80
CMD [“-D”, “FOREGROUND”]
ENTRYPOINT [“/usr/sbin/httpd”]
نکته: شما میتوانید با توجه به جدول و نیاز خودتان dockerfile خودتان را بسازید
سپس برای بالا آوردن Container دستوری مانند زیر را اجرا میکنیم
docker build -t web_server:latest .
نکته: توجه کنید که باید در دایرکتوری که dockerfile خود را ساختیم باشیم تا عملیات با موفقیت انجام شود.
در صورتی که همه کارها را درست انجام داده باشیم خروجی مانند زیر میبینیم
Sending build context to Docker daemon 10.24 kB
Step 0 : FROM centos
—> 7322fbe74aa5
Step 1 : MAINTAINER nowlearn <admin@nowlearn.ir>
—> Running in fa5364b3d41f
—> 57d8fd36b7f7
…..
…..
Removing intermediate container 3efa8e1dcae9
Successfully built 7c39aaa338b4
حالا اگر ما docker image بگیریم باید خروجی مانند زیر ببینیم
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
web_server latest 7c39aaa338b4 24 seconds ago 283.9 MB
docker.io/centos latest ce20c473cd8a 8 weeks ago 172.3 MB
برای اینکه ببینیم آیا container ما درست بالا آمده ااست یا نه دستور زیر را اجرا میکنیم
curl http://localhost/
اگر خروجی مانند زیر دیدید کارهای انجام شده درست بوده است
Hello DockerFile
نکته: در دفعه های بعدی برای اینکه containerی که ساختیم سریع بالا بیاوریم بصورت زیر عمل میکنیم
docker run -d -p 80:80 web_server
عالی و سپاس
لطفا بیشتر در مورد یخزنثق بهمث و Yaml کاربرد های آن توضیح دهید
با تشکر