Giới thiệu
Bài lab này chúng ta cài đặt môi trường lập trình Nginx - PHP bằng Docker.
Tại sao dùng Docker mà không dùng XAMPP hay WAMP?
Docker là công nghệ phổ biến, cấu hình thêm, bớt các thành phần được, có thể chạy trên cả 3 hệ điều hành Windows, Linux, Mac. Trong khi XAMPP, WAMP được đóng gói mặc định, khó thay đổi.
Giải thích một số từ / khai niệm trong bài viết
- Nginx: một web server mạnh mẽ mã nguồn mở. Nginx sử dụng kiến trúc đơn luồng, hướng sự kiện vì thế nó hiệu quả hơn Apache server
- Docker là một nền tảng dành cho developer và system administrator, cung cấp cho họ những thành phần để build, run và share những chương trình thông qua những container. Việc sử dụng container để triển khai chương trình được gọi là containerization.’
- Docker Compose: là một công cụ dùng để định nghĩa và chạy các chương trình Docker sử dụng nhiều container (multi-container). Với Docker Compose, chúng ta sử dụng một file YAML để thiết lập các service cần thiết cho chương trình. Cuối cùng, với một câu lệnh, chúng ta sẽ create và start tất cả service từ các thiết lập đó.
- PHP-FPM viết tắt của FastCGI Process Manager là chương trình có chức năng phiên dịch PHP khi chạy trang web cho web server. PHP-FPM được hình thành dựa trên sự mở rộng của CGI và hiện đang được đông đảo người dùng lựa chọn.
- Alpine Linux là bản phân phối Linux dựa trên musl và BusyBox, được thiết kế bảo mật, đơn giản và hiệu quả về tài nguyên. Nó sử dụng OpenRC cho hệ thống init. Alpine nổi lên sau khi Docker được phát triển bởi vì nó nhỏ và nhẹ, thường được sử dụng để làm docker image.
Cài đặt
Cài đặt Docker Desktop và đảm bảo Docker chạy thành công trước khi triển khai Docker compose.
Thư mục dự án
.
├── docker
│ ├── nginx
│ │ ├── Dockerfile
│ │ └── helloworld.nginx.conf
│ └── php
│ └── Dockerfile
├── src
│ ├── index.php
│ └── loop.php
├── docker-compose.yml
docker-compose.yml
File docker-compose.yml gồm 2 dịch vụ : nginx và php. Nginx là web server sẽ phục vụ các file tĩnh, với những file có đuôi php sẽ được chuyển qua dịch vụ php lắng nghe ở cổng 9000
version: "3.8"
services:
nginx:
container_name: nginx
build: ./docker/nginx
command: nginx -g "daemon off;"
links:
- php
ports:
- "80:80"
volumes:
- ./src:/var/www/html
php:
container_name: php
build: ./docker/php
volumes:
- ./src:/var/www/html
working_dir: /var/www/html
docker-compose.yml
Dịch vụ nginx
FROM nginx:stable-alpine
ADD helloworld.nginx.conf /etc/nginx/conf.d/default.conf
docker/nginx/Dockerfile
ADD helloworld.nginx.conf /etc/nginx/conf.d/default.conf
copy file docker/nginx/helloworld.nginx.conf thành file /etc/nginx/conf.d/default.conf
trong docker container
File cấu hình nginx
server { listen 80; index index.php index.htm index.html; root /var/www/html; error_log /var/log/nginx/error.log; access_log /var/log/nginx/access.log; location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass php:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } }
docker/nginx/helloworld.nginx.conf
Dịch vụ php
FROM php:8.1-fpm-alpine
docker/php/Dockerfile
src
Trong thư mục src chúng ta tạo 2 file mã nguồn index.php và loop.php để thử nghiệm dịch vụ nginx - php hoạt động có đúng không?
Trả về thông tin cấu hình của PHP
<?php
phpinfo();
?>
src/index.php
In ra từ 1 đến 10
<?php
for ($x = 0; $x <= 10; $x++) {
echo "The number is: $x <br>";
}
?>
src/loop.php
Các lệnh docker-compose
Build các docker image nếu chưa có docker image
docker-compose build
Khởi động Docker compose
docker-compose up
Ảnh chụp màn hình ứng dụng Portainer quản trị Docker ở đường dẫn http://localhost:9000. Bạn có thể cài đặt Portainer ở địa chỉ https://www.portainer.io/
Để dừng các dịch vụ
docker-compose down
Chạy thử
Lỗi thường gặp phải
Cổng 80 bị chiếm dụng, cần phải kill process ở cổng 80 trước khi chạy lệnh docker-compose up
Bình luận