وب سایت عباس باقری

وب سایت شخصی عباس باقریوب سایت شخصی عباس باقری

آموزش داکرایز کردن پروژه php

زمان مطالعه : 2 دقیقه

در این پست به این پرداخته می‌شود که یک پروژه ساده php را چگونه داکرایز کنیم؟

  1. ساخت ایمیج

 فرض کنید ما یک پروژه ساخته ایم و محتویات پروژه را در پوشه 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
 
 

امیدوارم مفید بوده باشه