Lệnh docker-compose và chạy các dịch vụ docker
- 08-10-2024
- Toanngo92
- 0 Comments
Dưới đây là một bài viết tương tự mà bạn có thể đăng lên website, với nội dung hướng dẫn sử dụng docker-compose
để cài đặt PHP, Nginx, và MariaDB:
Mục lục
Hướng Dẫn Sử Dụng Docker-Compose Cài Đặt PHP, Nginx, và MariaDB
Giới thiệu
Trong bài viết này, chúng ta sẽ tìm hiểu cách sử dụng Docker Compose để thiết lập một môi trường phát triển web đơn giản gồm PHP, Nginx và MariaDB. Docker Compose
là một công cụ mạnh mẽ cho phép bạn định nghĩa và quản lý nhiều container Docker dưới dạng tệp cấu hình YAML. Điều này giúp tạo ra một môi trường phát triển nhất quán và dễ dàng triển khai.
Tại sao nên dùng Docker Compose?
Docker Compose giúp chúng ta:
- Tạo môi trường phát triển dễ dàng mà không cần cấu hình từng dịch vụ riêng lẻ.
- Đảm bảo tính đồng nhất giữa các môi trường (local, staging, production).
- Quản lý các container Docker dưới dạng tập tin duy nhất (docker-compose.yml).
- Tích hợp nhiều dịch vụ trong cùng một ứng dụng như Nginx, PHP, MariaDB, Redis, …
Chuẩn bị
Để bắt đầu, bạn cần cài đặt Docker và Docker Compose trên máy tính. Nếu bạn chưa cài đặt, có thể tham khảo hướng dẫn cài đặt từ trang chủ của Docker: Tải về và cài đặt Docker.
Cấu hình Docker Compose
Bước đầu tiên là tạo một tệp docker-compose.yml
trong thư mục dự án của bạn. Tệp này sẽ mô tả cách Docker khởi động các container cho PHP, Nginx và MariaDB.
Tạo tệp docker-compose.yml
với nội dung sau:
version: '3'
services:
# Dịch vụ Nginx
nginx:
image: nginx:latest
container_name: nginx
ports:
- "8080:80"
volumes:
- ./src:/var/www/html
- ./config/nginx:/etc/nginx/conf.d
depends_on:
- php
networks:
- mynetwork
# Dịch vụ PHP
php:
image: php:8.1-fpm
container_name: php
volumes:
- ./src:/var/www/html
networks:
- mynetwork
# Dịch vụ MariaDB
db:
image: mariadb:latest
container_name: mariadb
environment:
MYSQL_ROOT_PASSWORD: root_password
MYSQL_DATABASE: example_db
MYSQL_USER: user
MYSQL_PASSWORD: user_password
ports:
- "3306:3306"
volumes:
- ./data/db:/var/lib/mysql
networks:
- mynetwork
# Định nghĩa mạng lưới cho các container
networks:
mynetwork:
driver: bridge
Giải thích tệp docker-compose.yml
:
- version: Định nghĩa phiên bản của Docker Compose.
- services: Đây là nơi khai báo các dịch vụ (containers) cần sử dụng. Trong trường hợp này gồm
nginx
,php
vàdb
(MariaDB). - nginx: Sử dụng image
nginx:latest
, ánh xạ cổng 8080 của host với cổng 80 của container để truy cập trang web quahttp://localhost:8080
. - php: Sử dụng image
php:8.1-fpm
để chạy PHP với FastCGI Process Manager (FPM). - db (MariaDB): Chạy MariaDB, thiết lập các biến môi trường như
MYSQL_ROOT_PASSWORD
,MYSQL_DATABASE
,MYSQL_USER
, vàMYSQL_PASSWORD
. - networks: Các container được kết nối với cùng một mạng
mynetwork
để chúng có thể giao tiếp với nhau.
Cấu hình Nginx
Tiếp theo, chúng ta cần tạo cấu hình cho Nginx. Trong thư mục gốc của dự án, tạo thư mục config/nginx
và tạo tệp default.conf
với nội dung sau:
server {
listen 80;
server_name localhost;
root /var/www/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~ /\.ht {
deny all;
}
}
Cấu hình này thiết lập Nginx để phục vụ PHP qua FastCGI, định nghĩa tệp gốc (root) là thư mục /var/www/html
trong container PHP.
Cấu trúc thư mục dự án
Thư mục dự án của bạn sẽ có cấu trúc như sau:
project-root/
│
├── config/
│ └── nginx/
│ └── default.conf
├── src/
│ └── index.php
├── data/
│ └── db/ # Lưu trữ dữ liệu MariaDB
└── docker-compose.yml
- config/nginx/default.conf: Cấu hình cho Nginx.
- src/index.php: Thư mục chứa mã nguồn PHP của bạn.
- data/db/: Thư mục lưu trữ dữ liệu của MariaDB.
Tạo tệp PHP
Tạo tệp index.php
trong thư mục src/
để kiểm tra quá trình thiết lập:
<?php
phpinfo();
?>
Tệp này sẽ hiển thị thông tin cấu hình PHP khi bạn truy cập trang web.
Khởi động Docker Compose
Để khởi động các dịch vụ, bạn chỉ cần chạy lệnh:
docker-compose up -d
Lệnh này sẽ tải các image, khởi động các container Nginx, PHP, và MariaDB. Bạn có thể truy cập trang web tại http://localhost:8080
để xem kết quả.
Kiểm tra
- Truy cập
http://localhost:8080
để kiểm tra xem PHP đã hoạt động chưa. - Kết nối với MariaDB qua
localhost:3306
với các thông tin đăng nhập được cấu hình trong tệpdocker-compose.yml
.
Ngoài ra, mình giới thiệu cho các bạn một số ví dụ sử dụng docker-compose cho các tình huống server sử dụng Apache hoặc OneLiteSpeed:
Dưới đây là một ví dụ về tệp docker-compose.yml
sử dụng Apache và OpenLiteSpeed để chạy PHP và MariaDB. Bạn có thể chọn giữa Apache hoặc OpenLiteSpeed tùy thuộc vào nhu cầu của mình.
Ví dụ docker-compose.yml
với Apache:
version: '3'
services:
# Dịch vụ Apache
apache:
image: php:8.1-apache
container_name: apache
ports:
- "8080:80"
volumes:
- ./src:/var/www/html
networks:
- mynetwork
# Dịch vụ MariaDB
db:
image: mariadb:latest
container_name: mariadb
environment:
MYSQL_ROOT_PASSWORD: root_password
MYSQL_DATABASE: example_db
MYSQL_USER: user
MYSQL_PASSWORD: user_password
ports:
- "3306:3306"
volumes:
- ./data/db:/var/lib/mysql
networks:
- mynetwork
# Định nghĩa mạng lưới cho các container
networks:
mynetwork:
driver: bridge
Giải thích:
- Apache: Sử dụng image
php:8.1-apache
tích hợp PHP và Apache. Cổng 8080 của máy chủ được ánh xạ tới cổng 80 của Apache trong container. Mã nguồn của bạn sẽ được lưu trữ trong thư mục./src
và ánh xạ tới thư mục/var/www/html
của container. - MariaDB: Tương tự như ví dụ trước, MariaDB sử dụng thông tin đăng nhập từ biến môi trường.
Ví dụ docker-compose.yml
với OpenLiteSpeed:
version: '3'
services:
# Dịch vụ OpenLiteSpeed
openlitespeed:
image: litespeedtech/openlitespeed:latest
container_name: openlitespeed
ports:
- "8088:8088" # OpenLiteSpeed mặc định sử dụng cổng 8088
- "7080:7080" # Cổng quản lý OpenLiteSpeed
volumes:
- ./src:/var/www/vhosts/localhost/html
networks:
- mynetwork
# Dịch vụ PHP
php:
image: php:8.1-fpm
container_name: php
volumes:
- ./src:/var/www/vhosts/localhost/html
networks:
- mynetwork
# Dịch vụ MariaDB
db:
image: mariadb:latest
container_name: mariadb
environment:
MYSQL_ROOT_PASSWORD: root_password
MYSQL_DATABASE: example_db
MYSQL_USER: user
MYSQL_PASSWORD: user_password
ports:
- "3306:3306"
volumes:
- ./data/db:/var/lib/mysql
networks:
- mynetwork
# Định nghĩa mạng lưới cho các container
networks:
mynetwork:
driver: bridge
Giải thích:
- OpenLiteSpeed: Sử dụng image
litespeedtech/openlitespeed
. OpenLiteSpeed sử dụng cổng 8088 cho HTTP và cổng 7080 cho bảng điều khiển quản lý. Mã nguồn được ánh xạ tới thư mục/var/www/vhosts/localhost/html
. - PHP: Dịch vụ PHP với FastCGI (FPM) được ánh xạ tương tự như trong ví dụ Nginx.
- MariaDB: Giống như trong ví dụ trước, MariaDB được cấu hình với các biến môi trường tương tự.
Lưu ý khi sử dụng OpenLiteSpeed:
- Bạn có thể truy cập bảng quản lý của OpenLiteSpeed qua đường dẫn
http://localhost:7080
để điều chỉnh cấu hình. - Khi sử dụng OpenLiteSpeed, hãy đảm bảo mã nguồn PHP và tệp cấu hình được đặt đúng vị trí để container có thể truy cập.
Khởi động dịch vụ
Sau khi tạo tệp docker-compose.yml
, bạn chạy lệnh sau để khởi động các dịch vụ:
docker-compose up -d
Cả hai phiên bản đều sử dụng cấu trúc mạng bridge
để kết nối các container với nhau. Tùy thuộc vào nhu cầu, bạn có thể chọn Apache hoặc OpenLiteSpeed để cài đặt cho môi trường của mình.
Tổng kết
Sử dụng Docker Compose giúp bạn dễ dàng thiết lập một môi trường phát triển web với PHP, Nginx và MariaDB chỉ với vài bước đơn giản. Điều này đặc biệt hữu ích cho các dự án có nhiều thành viên hoặc khi bạn muốn giữ cho môi trường phát triển và môi trường sản xuất nhất quán.
Nếu bạn gặp bất kỳ vấn đề gì, hãy kiểm tra lại cấu hình và logs của các container bằng lệnh docker-compose logs
. Docker Compose là một công cụ mạnh mẽ và linh hoạt, giúp bạn quản lý và triển khai ứng dụng nhanh chóng và hiệu quả.