ساخت ایمیج
فرض کنید ما یک پروژه ساخته ایم و محتویات پروژه را در پوشه pubic_html ذخیره کرده ایم. ابتدا یک پوشه بنام docker_public_html میسازیم و پوشه public_html را به آن منتقل میکنیم. سپس در پوشه docker_public_html یک فایل بنام Dockerfile میسازیم. و کدهای زیر را در این فایل مینویسیم.
FROM php:8.3-apache
# Install dependencies and PHP extensions
RUN apt-get update && apt-get install -y \
libpng-dev \
libjpeg-dev \
libfreetype6-dev \
&& docker-php-ext-configure gd \
&& docker-php-ext-install mysqli pdo pdo_mysql gd \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
#copy public_html to /var/www/html/
COPY ./public_html /var/www/html/
COPY ./.htaccess /var/www/html/
# Set permissions
RUN chown -R www-data:www-data /var/www/html \
&& chmod -R 755 /var/www/html
# Enable Apache rewrite module
RUN a2enmod rewrite
# Expose port
EXPOSE 80
دستور FROM:ایمیج پایه مورد نظر را از Docker hub دانلود میکند. هر ایمیج داکر شامل کتابخانه ها و نرم افزارهای مورد نیاز برای اجرای یک پروژه یا سیستم نرم افزاری خاص است. برای مثال php:8.1-apache
حاوی نرم افزار آپاچی
به همراه php
میباشد. و دیگر نیازی به نصب این دو نیست.
دستور COPY: این دستور فایل یا فولدر رو به مسیر مقصد درون ایمیج ساخته شده کپی میکند. مثلا در ایمیج ساخته شده بوسیله Dockerfile
بالا، آدرس فولدر public_html
میشود /var/www/html
COPY source_file target_file
دستور RUN: برای اجرای کامندهای shell میباشد. مثل اینکه ترمینال سیستم عامل را باز کنید و برخی دستورات را اجرا کنید.
بجای
php:8.1-apache
میتوان هرکدام از نسخه های موجود در این منبع را انتخاب نمود. بهتر از یکی از نسخه ها با پسوندapache
را انتخاب نمود.
به منظور ایجاد ایمیج نهایی پس از نوشتن فایل Dockerfile
در مسیر پوشه docker_public_html
ترمینال را باز میکنیم و دستورات زیر را وارد میکنیم.
docker build -t php_image .
php_image
بعنوان نام ایمیج تعیین کردیم و بجای آن میتوان هر نام دیگری قرار داد. و علامت . آخر کد هم به معنی مسیر Dockerfile
در همین پوشه است.
با دستور زیر چک میکنیم که image ساخته شده است.
docker image ls
2. ایجاد و اجرای کانتینر
پس از اطمینان از ساخته شدن docker image
فقط کافیست پروژه را روی پورت 80 (یا روی پورت دلخواه دیگر) ران کنیم.
docker run --name php_container -p 80:80 php_image
نام php_container
اختیاری بوده و میتوان از نام دیگری استفاده نمود. و php_image
هم نامdocker image
ساخته شده در مرحله 4 است.
درصورتی که قصد استفاده از پورت دیگری ماننده 8000 را دارید مانند نمونه زیر عمل میکنیم!
docker run --name php_container -p 8000:80 php_image
پورت 80
مربوط به آپاچی درون ایمیج میباشد و پورت 8000
مربوط به کانتینر که در سطح سیستم عامل باز میشود. به عبارت ساده تر با وارد کردن آدرس localhost:8000
در مرورگر به پروژه خود دسترسی خواهید داشت.
volume در داکر: با هر بار تغییر فایلهای php مجبور هستیم دوباره build بگیریم و کانتینر خود را ران کنیم. در صورتی که هنگام اجرای کانتینر نیاز به توسعه و ویرایش فایل داشتید، بجای copy
کردن سورس پروژه به ایمیج داکر، میتوان از خاصیت volume
استفاده کرد. در این صورت کانتینر به فایلهای بیرون از ایمیج دسترسی خواهد داشت و در صورت تغییر این فایلها بهروز میشود.
docker run --name php_container \
-p 8000:80 \
-v $(pwd)/public_html:/var/www/html \
--network php_mysql_network \
--rm \
-d php_image
متغیرهای محیطی: برایتنظیممتغیرهایمحیطی(EnvironmentVariables)درداخلکانتینر میتوان از پرچم e
استفاده کرد. مثلا به صورت زیر رمز و نام کاربری دیتابیس را به کانتینر میدهیم:
docker run --name php_container \
-e DB_USER=root \
-e DB_PASS=root \
-p 8000:80 \
-v $(pwd)/public_html:/var/www/html \
--network php_mysql_network \
--rm \
-d php_image
و در سورس کد php
به این صورت به آن دسترسی خواهیم داشت:
<?php
$dbPass = env('DB_PASS');
$dbUser = env('DB_USER');
تا اینجا اگر مشکلی پیش نیامده باشد وب سایت شما روی پورت 80 لانچ شده است. برای متوقف کردن کانتینر php میتوان از دستور زیر استفاده کرد.
docker stop php_container
docker rm php_container
و در صورت تمایل به حذف image ساخته شده میتوان از دستور زیر استفاده کرد.
docker rmi php_image
در صورت ارور مبنی بر اینکه قادر به حذف image نیستید از دستور زیر استفاده کنید
docker rmi php_project -f
امیدوارم مفید بوده باشه