Hướng dẫn tạo Docker Container mã nguồn WordPress qua docker-file và docker compose
- 08-01-2025
- Toanngo92
- 0 Comments
Như các bạn đã biết, wordpress có thể tiến hành cài đặt và sử dụng qua các môi trường cục bộ như XAMPP hay Laragon, ở bài viết này, chúng ta sẽ cùng tìm hiểu cách tạo môi trường Docker để có thể khởi chạy ứng dụng wordpress phù hợp chỉ thông qua 2 tệp dockerfile và docker-compose
Mục lục
Bước 1: tạo tệp dockerfile
FROM wordpress:latest
ENV WORDPRESS_DB_HOST=db:3306
ENV WORDPRESS_DB_USER=root
ENV WORDPRESS_DB_PASSWORD=abcd@1234
ENV WORDPRESS_DB_NAME=database_name
RUN apt-get update && apt-get install -y \
libpng-dev \
libjpeg-dev \
libfreetype6-dev \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install gd
RUN chown -R www-data:www-data /var/www/html
EXPOSE 80
ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["apache2-foreground"]
Trong đó:
1. FROM wordpress:latest
- Chức năng: Chỉ định image nền (base image) sẽ được sử dụng để tạo container. Ở đây, image
wordpress:latest
được sử dụng, nghĩa là phiên bản WordPress mới nhất.
2. ENV WORDPRESS_DB_HOST=db:3306
- Chức năng: Đặt biến môi trường
WORDPRESS_DB_HOST
để chỉ định địa chỉ host của cơ sở dữ liệu (database). - Ở đây
db:3306
chỉ định một container có têndb
đang chạy MySQL hoặc MariaDB trên cổng 3306.
3. ENV WORDPRESS_DB_USER=root
- Chức năng: Đặt biến môi trường
WORDPRESS_DB_USER
, nghĩa là container WordPress sẽ dùng tài khoảnroot
để kết nối với database.
4. ENV WORDPRESS_DB_PASSWORD=abcd@1234
- Chức năng: Đặt mật khẩu cho tài khoản database được sử dụng bởi WordPress.
5. ENV WORDPRESS_DB_NAME=abcd@1234
- Chức năng: Chỉ định tên database (
abcd@1234
) mà WordPress sẽ kết nối. Lưu ý: Tên database nên tránh sử dụng ký tự đặc biệt như@
vì có thể gây lỗi.
6. RUN apt-get update && apt-get install -y …
- Chức năng:
apt-get update
: Cập nhật danh sách gói trong hệ thống.apt-get install -y
: Cài đặt các thư viện cần thiết cho xử lý đồ họa trong WordPress:- libpng-dev: Hỗ trợ xử lý hình ảnh định dạng PNG.
- libjpeg-dev: Hỗ trợ xử lý hình ảnh định dạng JPEG.
- libfreetype6-dev: Hỗ trợ xử lý font chữ TrueType.
- docker-php-ext-configure gd –with-freetype –with-jpeg: Cấu hình extension
gd
để hỗ trợ hình ảnh. - docker-php-ext-install gd: Cài đặt extension
gd
sau khi đã cấu hình.
7. RUN chown -R www-data:www-data /var/www/html
- Chức năng: Đổi quyền sở hữu thư mục chứa mã nguồn WordPress (
/var/www/html
) sang người dùngwww-data
(người dùng mặc định của Apache). Điều này giúp Apache có quyền đọc/ghi dữ liệu tại đây.
8. EXPOSE 80
- Chức năng: Khai báo cổng 80 (cổng HTTP mặc định) mà container sẽ lắng nghe để phục vụ web.
9. ENTRYPOINT [“docker-entrypoint.sh”]
- Chức năng: Đặt tập lệnh mặc định được thực thi khi container khởi chạy. Tập lệnh này thiết lập môi trường WordPress.
10. CMD [“apache2-foreground”]
- Chức năng: Đặt lệnh mặc định là chạy Apache trong chế độ foreground (không chạy ngầm). Điều này giúp container không bị tắt ngay lập tức sau khi khởi chạy.
Tổng kết:
Tệp Dockerfile này:
- Sử dụng image WordPress mặc định.
- Cấu hình môi trường kết nối với database.
- Cài đặt các thư viện cần thiết để xử lý hình ảnh.
- Thiết lập quyền thư mục và cấu hình container để chạy WordPress qua Apache.
Bạn cần đảm bảo rằng:
- Container database (ví dụ MySQL/MariaDB) đã được thiết lập và có tên
db
. - Các giá trị như
WORDPRESS_DB_PASSWORD
vàWORDPRESS_DB_NAME
phải đúng để tránh lỗi kết nối.
Bước 2: Tạo tệp docker-compose.yml
version: '3.8'
services:
wordpress:
build: .
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: abcd@1234
WORDPRESS_DB_NAME: wordpress
volumes:
- ./project:/var/www/html
depends_on:
- db
db:
image: mariadb:10.5
environment:
MYSQL_ROOT_PASSWORD: abcd@1234
MYSQL_DATABASE: wordpress
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
Đây là tệp Docker Compose sử dụng phiên bản 3.8, giúp bạn định nghĩa và quản lý các container cần thiết cho một ứng dụng WordPress. Dưới đây là giải thích chi tiết:
1. version: '3.8'
- Chức năng: Chỉ định phiên bản của Docker Compose được sử dụng. Phiên bản
3.8
hỗ trợ nhiều tính năng mới và tương thích tốt với Docker Engine hiện đại.
2. services
- Chức năng: Khai báo các dịch vụ (services) sẽ chạy trong môi trường Docker Compose. Trong trường hợp này, có 2 dịch vụ:
wordpress
: Chạy WordPress.db
: Chạy cơ sở dữ liệu MariaDB.
3. Dịch vụ wordpress
a) build: .
- Chức năng: Xây dựng image từ tệp Dockerfile nằm trong thư mục hiện tại (
.
).
b) ports: "8080:80"
- Chức năng: Ánh xạ (map) cổng
80
trong container WordPress sang cổng8080
trên máy chủ.- Bạn có thể truy cập WordPress bằng
http://localhost:8080
.
- Bạn có thể truy cập WordPress bằng
c) environment
- Chức năng: Định nghĩa các biến môi trường được truyền vào container WordPress:
WORDPRESS_DB_HOST
: Địa chỉ host của database (db:3306
).WORDPRESS_DB_USER
: Tài khoản database (root
).WORDPRESS_DB_PASSWORD
: Mật khẩu của database (abcd@1234
).WORDPRESS_DB_NAME
: Tên database sẽ được sử dụng (wordpress
).
d) volumes: ./project:/var/www/html
- Chức năng: Liên kết thư mục trên máy chủ (
./project
) với thư mục trong container (/var/www/html
).- Tất cả dữ liệu trong thư mục
./project
sẽ được đồng bộ vào thư mục WordPress trong container.
- Tất cả dữ liệu trong thư mục
e) depends_on: - db
- Chức năng: Đảm bảo dịch vụ
wordpress
chỉ được khởi chạy sau khi dịch vụdb
(MariaDB) đã sẵn sàng.
4. Dịch vụ db
a) image: mariadb:10.5
- Chức năng: Sử dụng image
mariadb:10.5
để chạy database MariaDB.
b) environment
- Chức năng: Thiết lập biến môi trường cho MariaDB:
MYSQL_ROOT_PASSWORD
: Mật khẩu của tài khoản root trong MariaDB.MYSQL_DATABASE
: Tự động tạo một database có tênwordpress
khi container được khởi động lần đầu.
c) volumes: db_data:/var/lib/mysql
- Chức năng:
- Tạo volume tên
db_data
trên máy chủ và ánh xạ với thư mục/var/lib/mysql
trong container. - Dữ liệu database sẽ được lưu trữ trong volume này, giúp dữ liệu không bị mất khi container MariaDB bị xóa.
- Tạo volume tên
5. volumes
- Chức năng: Định nghĩa các volume được sử dụng trong project:
db_data
: Volume này lưu trữ dữ liệu database của MariaDB (được ánh xạ từ/var/lib/mysql
).
Tóm tắt hoạt động
- Dịch vụ WordPress phụ thuộc vào MariaDB để hoạt động.
- Khi chạy lệnh
docker-compose up
, hai container sẽ được khởi động:- Container
db
:- Chạy MariaDB với database tên
wordpress
. - Lưu trữ dữ liệu trong volume
db_data
.
- Chạy MariaDB với database tên
- Container
wordpress
:- Kết nối với database MariaDB.
- Dữ liệu mã nguồn WordPress được đồng bộ từ thư mục
./project
. - Website có thể được truy cập qua
http://localhost:8080
.
- Container
Lưu ý
- Bảo mật: Mật khẩu
abcd@1234
là ví dụ minh họa và nên thay thế bằng mật khẩu phức tạp hơn khi triển khai thực tế. - Kiểm tra thư mục
./project
: Nếu không có nội dung WordPress trong thư mục này, container có thể không hoạt động đúng.
Bước 3: build & start docker
docker-compose up -d
Bước 4: truy cập website thông qua cổng 8080
http://localhost:8080