برای شروع ابتدا داکر را نصب میکنیم. فرض کنید ما پروژه خود را در پوشه php_project ذخیره کرده ایم.
اکنون یک پوشه جدید بنام php_docker_project میسازیم و پوشه php_project را به این پوشه منتقل میکنیم.
سپس پوشه php_docker_project یک فایل جدید بنام docker-compose.yaml اضافه میکنیم. سپس کدهای زیر را به آن اضافه میکنیم.
version: "3.8"
services: # adds 2 services: mysql and phpmyadmin to connect with
website:
container_name: php8.1-apache
build:
context: .
dockerfile: Dockerfile
environment:
- MYSQL_DBHOST=mysql
- MYSQL_DBPORT=3306
- MYSQL_DBUSER=root
- MYSQL_DBPASS=password
- MYSQL_DBNAME=mydatabase
ports:
- 80:80
- 443: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: mypassword
MYSQL_PASSWORD: mypassword
#MYSQL_DATABASE: ohif # 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 استفاده میکنیم. بجای این می توانیم یکی از سرویسهای دیگر از این صفحه را انتخاب کرد.
website:
container_name: php8.1-apache
build:
context: .
dockerfile: Dockerfile
environment:
- MYSQL_DBHOST=mysql
- MYSQL_DBPORT=3306
- MYSQL_DBUSER=root
- MYSQL_DBPASS=password
- MYSQL_DBNAME=
ports:
- 80:80
- 443:443
depends_on:
- db
ما مشخص کردیم که از php 8.1 استفاد خواهیم کرد.
با 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: mydatabase # 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 استفاده کنیم.
$db = new mysqli('db','root','password','password',3306);
نکته : بجای localhost نام سرویس دیتابیس را قرار میدهیم.
سپس در پوشه php_docker_project یک فایل جدید بنام Dockerfile ایجاد میکنیم و موارد زیر را در آن قرار میدهیم :
FROM php:8.1-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
RUN a2enmod rewrite
EXPOSE 80
EXPOSE 443
پس از اعمال تفییرات بالا در فایل Dockerfile میتوانید پروژه را روی داکر بالا بیاورید.
cd ~
cd php_docker_project
docker-compose up --build
پس از اجرای این دستورات پروژه روی ip شما در بستر وب قابل مشاهده خواهد بود.
برای غیرفعال کردن سایت دستورات زیر را اجرا میکنیم
cd ~
cd php_docker_project
docker-compose up --build
امیدوارم پست مفید بوده باشه
منابع بیشتر برای مطالعه :