برای شروع ابتدا داکر را نصب میکنیم. فرض کنید ما پروژه خود را در پوشه php_project
ذخیره کردهایم.
اکنون یک پوشه جدید بنام php_docker_project
میسازیم و پوشه php_project
را به این پوشه منتقل میکنیم. در ابتدا نیاز بهایجاد فایل Dockerfile برای پروژه خود داریم:
# استفاده از php8.3 و آپاچی برای سرو کردن پروژه
FROM php:8.3-apache
# نصب کتابخانه ها و افزونه های مورد نیاز برای اجرای پروژه
RUN apt-get update && apt-get install -y
RUN docker-php-ext-install mysqli pdo pdo_mysql && docker-php-ext-enable pdo_mysql
# کپی کردن سورس فایلهای پروژه
# در صورتی کهه از خاصیت ولوم استفاده میکنید نیازی نیست
COPY ./php_project
COPY ./.htaccess /var/www/html/
# دسترسی دادن به اپاچی برای دسترسی به سورس فایل
RUN chown -R www-data:www-data /var/www #this line after COPY
# فعال کردن rewriterule برای آپاچی
RUN a2enmod rewrite
EXPOSE 80
EXPOSE 443
سپس در پوشه php_docker_project
یک فایل جدید بنام docker-compose.yaml
اضافه میکنیم. سپس کدهای زیر را به آن اضافه میکنیم.
version: "3.8" #yml syntax version
services: # adds 2 services: mysql and phpmyadmin to connect with
website:
container_name: php8.3-apache #نام کانتینر دلخواه
build:
context: .
dockerfile: Dockerfile # اشارهه به اسم فایلی دارد که ایجاد کردیم
environment:
- MYSQL_DBHOST=mysql
- MYSQL_DBPORT=3306
- MYSQL_DBUSER=root
- MYSQL_DBPASS=password
- MYSQL_DBNAME=mydatabase
volumes: # با استفاده از خاصیت ولوم دیگر نیازی به بیلد مجدد پس از هربار تغییر کدها نیست
- ./php_project:/var/www/html
ports:
- 80:80
- 443:443
depends_on:
- db
db:
image: mariadb:latest # use latest version of mysql
container_name: db # add a name for the container
command: --default-authentication-plugin=mysql_native_password
restart: unless-stopped
environment: # add default values, see docs for more info.
MYSQL_USER: user
MYSQL_ROOT_PASSWORD: mypassword
MYSQL_PASSWORD: mypassword
#MYSQL_DATABASE: dbname # create this database on startup
volumes:
- my-db:/var/lib/mysql
ports:
- '3306:3306'
phpmyadmin:
container_name: phpmyadmin
image: phpmyadmin/phpmyadmin:latest
ports:
- "8082:80"
environment:
MYSQL_ROOT_PASSWORD: mypassword #(Required) set the password for the root superuser account.
PMA_HOST: db # define the address/hostname of the mysql server eg mysql container name.
PMA_USER: root # this is the root user to login on startup
PMA_PASSWORD: mypassword # use the root password to login on startup.
# Create a new user on startup (optional)
# MYSQL_USER: newuser
# MYSQL_PASSWORD: mypassword
volumes: # add persistent data even if container is removed.
my-db:
در ابتدا نسخه docker-compose را انتخاب میکنیم. در حال حاضر آخرین نسخه 3.8 می باشد :
version: "3.8"
در خط بعدی سرویسهای خودمان را معرفی میکنیم. در حال حاضر ما سه سرویس php ، mysql و phpmyadmin داریم :
services: # adds 2 services: mysql and phpmyadmin to connect with
website:
...
db:
...
phpmyadmin:
...
برای سرویس php از image نسخه 8.1 بهمراه apache استفاده میکنیم. بجای این می توانیم یکی از سرویسهای دیگر از این صفحه را انتخاب کرد.
با build ادرس Dockerfile را مشخص میکنیم که در همین پوشه جاری است.
با environment تعدادی متغیر قابل استفاده در php تعریف میکنیم. اینجا ما مشخصات دیتا بیس را ذخیره کردیم.
با ports هم مشخص کردیم که سایت ما روی پورت 80 و 443 قابل نمایش شود.
با depends_on هم مشخص کردیم که از سرویس db که پاییتر تعریف کرده ایم میخواهیم استفاده کنیم.
db:
image: mysql:latest # use latest version of mysql
container_name: db # add a name for the container
command: --default-authentication-plugin=mysql_native_password
restart: unless-stopped
environment: # add default values, see docs for more info.
MYSQL_USER: user
MYSQL_ROOT_PASSWORD: password
MYSQL_PASSWORD: password
MYSQL_DATABASE: mydatabasename # create this database on startup
volumes:
- my-db:/var/lib/mysql
ports:
- '3306:3306'
در این قسمت سرویس mysql را روی پورت 3306 تعریف کردیم.
phpmyadmin:
container_name: phpmyadmin
image: phpmyadmin/phpmyadmin:latest
ports:
- "8082:80"
environment:
MYSQL_ROOT_PASSWORD: mypassword #(Required) set the password for the root superuser account.
PMA_HOST: db # define the address/hostname of the mysql server eg mysql container name.
PMA_USER: root # this is the root user to login on startup
PMA_PASSWORD: mypassword # use the root password to login on startup.
# Create a new user on startup (optional)
# MYSQL_USER: newuser
# MYSQL_PASSWORD: password
در این قسمت هم ما پورت 8082 را به mysql اختصاص دادیم.
با توجه به تنظیمات بالا میتوانیم با مشخصات زیر از دیتابیس در php استفاده کنیم.
<?php
$db = new mysqli('db','root','password','password',3306);
نکته : بجای localhost نام سرویس دیتابیس را قرار میدهیم.
پس از اجرای این دستورات زیر پروژه روی ip شما در بستر وب قابل مشاهده خواهد بود
cd ~
cd php_docker_project
docker-compose up --build
درصورتی که قبلا build گرفته باشید:
cd ~
cd php_docker_project
docker-compose up
برای غیرفعال کردن سایت دستورات زیر را اجرا میکنیم:
cd ~
cd php_docker_project
docker-compose down
امیدوارم پست مفید بوده باشه
منابع بیشتر برای مطالعه :