BÀi viết này sẽ dùng docker compose version 3 để làm việc với các service tạo nên môi trường phát triển php
2022-03-20 774 lượt xem
- Trang Chủ
- docker
- Cài đặt môi trường phát triển php với docker
bài viết được viết bởi trương thanh hùng //ebudezain.com/
bài viết được viết bởi trương thanh hùng //ebudezain.com/
đọc dữ liệu hộ bố
hùng ebudezain
bài viết được viết bởi trương thanh hùng //ebudezain.com/
bài viết được viết bởi trương thanh hùng //ebudezain.com/
hùng đẹp trai
hùng thông minh lắm
hùng ebudezain
ahihi đồ ngốc trương thanh hùng nè
Một máy chủ web thường bao gồm nhiều chương trình khác nhau - chẳng hạn như NGINX, PHP và MySQL. Theo thuật ngữ của Docker, mỗi chương trình bạn muốn cài đặt là một service. Và trong bài viết này chúng ta sẽ thiết lập php chạy nginx làm máy chủ chạy php-fpm
tôi thích vậy đó
đọc dữ liệu hộ bố
hùng thông minh lắm
tôi thích vậy đó
ahihi đồ ngốc trương thanh hùng nè
hùng ebudezain
tôi thích vậy đó
Bắt đầu thôi!
hùng ebudezain
bài viết được viết bởi trương thanh hùng //ebudezain.com/
đọc dữ liệu hộ bố
hùng ebudezain
đọc dữ liệu hộ bố
Cài máy chủ nginx
bài viết được viết bởi trương thanh hùng //ebudezain.com/
hùng thông minh lắm
hùng thông minh lắm
tôi thích vậy đó
tôi thích vậy đó
ahihi đồ ngốc trương thanh hùng nè
hùng thông minh lắm
tôi thích vậy đó
hùng thông minh lắm
Đầu tiên, hãy thêm một máy chủ web Nginx với việc tạo 1 file thực thi docker compose: docker-compose.yml
hùng thông minh lắm
bài viết được viết bởi trương thanh hùng //ebudezain.com/
bài viết được viết bởi trương thanh hùng //ebudezain.com/
hùng thông minh lắm
hùng thông minh lắm
bài viết được viết bởi trương thanh hùng //ebudezain.com/
đọc dữ liệu hộ bố
Nội dung file docker-compose.yml:
hùng thông minh lắm
ahihi đồ ngốc trương thanh hùng nè
version: '3'
services:
web:
image: nginx:latest
ports:
- "80:80"
hùng đẹp trai
ahihi đồ ngốc trương thanh hùng nè
ahihi đồ ngốc trương thanh hùng nè
hùng đẹp trai
tôi thích vậy đó
hùng đẹp trai
hùng thông minh lắm
hùng thông minh lắm
Khúc này bạn tạm hiểu là nó build image nginx:latest về rồi tạo 1 service với việc bind port trong docker là 80 ra port ngoài là 80. nếu bạn nghịch 8080:80 thì ý nghĩa là bind port trong docker là 80 ra port thực tế máy bạn là 8080 😄
tôi thích vậy đó
bài viết được viết bởi trương thanh hùng //ebudezain.com/
đọc dữ liệu hộ bố
Chạy service
đọc dữ liệu hộ bố
bài viết được viết bởi trương thanh hùng //ebudezain.com/
hùng thông minh lắm
Để chạy service thì bạn gọi lệnh : docker-compose up
hùng đẹp trai
hùng ebudezain
ahihi đồ ngốc trương thanh hùng nè
hùng đẹp trai
hùng đẹp trai
hùng đẹp trai
hùng thông minh lắm
hùng thông minh lắm
khi đó bạn gõ vào trình duyệt dòng : //127.0.0.1 thì sẽ hiện thị như sau:
bài viết được viết bởi trương thanh hùng //ebudezain.com/
tôi thích vậy đó
hùng đẹp trai
hùng đẹp trai
bài viết được viết bởi trương thanh hùng //ebudezain.com/
Bây giờ server đã được cài đặt và chạy qua Docker, chúng tôi có thể hiển thị các file của mình trên máy chủ.
hùng ebudezain
hùng ebudezain
ahihi đồ ngốc trương thanh hùng nè
hùng đẹp trai
Bind code và cài đặt nginx
hùng đẹp trai
hùng ebudezain
hùng ebudezain
Docker có thể cho phép bạn chia sẽ 1 file hoặc 1 folder lên container. Vậy nên bạn sẽ tạo ra 1 file config nginx là app.conf trong folder nginx và folder code của bạn là app
hùng thông minh lắm
hùng thông minh lắm
Ta có việc binding volumn như sau:
ahihi đồ ngốc trương thanh hùng nè
đọc dữ liệu hộ bố
đọc dữ liệu hộ bố
version: '3'
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx:/etc/nginx/conf.d/
- ./app:/app
hùng thông minh lắm
tôi thích vậy đó
Bây giờ bất kỳ thay đổi nào thuộc folder /app và /nginx đều được bind liên tục vào trong container đang chạy!
ahihi đồ ngốc trương thanh hùng nè
Bạn vào document của //hub.docker.com/_/nginx có nói về
việc nginx này config ở thư mục nào: outputs to /etc/nginx/conf.d/default.conf
like this ...
bài viết được viết bởi trương thanh hùng //ebudezain.com/
ahihi đồ ngốc trương thanh hùng nè
tôi thích vậy đó
=> Mọi file config đều được nạp từ folder /etc/nginx/conf.d
tôi thích vậy đó
Điều đó giải thích cho việc chúng ta vừa code ở trên là bind
từ ./nginx vào /etc/nginx/conf.d/
đọc dữ liệu hộ bố
đọc dữ liệu hộ bố
Ok hiểu là thế, vậy giờ chúng ta sẽ tạo file nginx/app.conf config như sau:
hùng ebudezain
hùng ebudezain
đọc dữ liệu hộ bố
server {
listen 80 default_server;
root /app/public;
}
ahihi đồ ngốc trương thanh hùng nè
đọc dữ liệu hộ bố
hùng ebudezain
bài viết được viết bởi trương thanh hùng //ebudezain.com/
hùng thông minh lắm
hùng ebudezain
tôi thích vậy đó
hùng thông minh lắm
hùng thông minh lắm
Khi bạn viết như vậy là bạn đang thông báo cho nginx chạy trong cái container đó là: hey nginx, cứ có truy cập nào mày cũng cho nó lấy code trong folder /app/public nha!
hùng đẹp trai
hùng đẹp trai
tôi thích vậy đó
bài viết được viết bởi trương thanh hùng //ebudezain.com/
bài viết được viết bởi trương thanh hùng //ebudezain.com/
ahihi đồ ngốc trương thanh hùng nè
hùng ebudezain
đọc dữ liệu hộ bố
hùng ebudezain
Mà cái code trong folder app/public thì chả có 😄 nhưng chúng ta cũng từng khai báo với nginx là binding cái folder code app ở ngoài với cái app trong container rồi nên là giờ chúng ta chỉ viẹc tạo file app/public/index.html với nội dung như sau:
đọc dữ liệu hộ bố
hùng ebudezain
test thử nha
đây là trang tao mới thử tạo code html chưa có liên quan gì php
hùng ebudezain
tôi thích vậy đó
hùng thông minh lắm
hùng đẹp trai
Ta được kết quả như sau:
bài viết được viết bởi trương thanh hùng //ebudezain.com/
bài viết được viết bởi trương thanh hùng //ebudezain.com/
bài viết được viết bởi trương thanh hùng //ebudezain.com/
bài viết được viết bởi trương thanh hùng //ebudezain.com/
bài viết được viết bởi trương thanh hùng //ebudezain.com/
hùng đẹp trai
hùng thông minh lắm
hùng ebudezain
hùng đẹp trai
hùng ebudezain
hùng đẹp trai
bài viết được viết bởi trương thanh hùng //ebudezain.com/
Cài đặt PHP-FPM
hùng thông minh lắm
bài viết được viết bởi trương thanh hùng //ebudezain.com/
tôi thích vậy đó
hùng thông minh lắm
đọc dữ liệu hộ bố
hùng ebudezain
ahihi đồ ngốc trương thanh hùng nè
1 file docker compose có thể chạy nhiều cái service cùng 1 lúc nên nhiệm vụ chúng ta là thêm service php vào trong file docker compose tiếp như sau:
hùng ebudezain
hùng đẹp trai
hùng đẹp trai
version: '3'
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx:/etc/nginx/conf.d/
- ./app:/app
php:
image: php:fpm
volumes:
- ./app:/app
ahihi đồ ngốc trương thanh hùng nè
hùng ebudezain
hùng đẹp trai
hùng đẹp trai
Cái đoạn: image: php:fpm
là sử dụng image php:fpm. Đối với NGINX, bạn sẽ cần sử dụng gói fpm. Hiện tại mình ghi vậy là không chỉ định phiên bản và chỉ sử
dụng php: fpm, nó sẽ sử dụng phiên bản mới nhất - tại thời điểm viết bài, là 8.0.
đọc dữ liệu hộ bố
tôi thích vậy đó
bài viết được viết bởi trương thanh hùng //ebudezain.com/
Nếu bạn muốn chỉ định cụ thể thì dùng: php:7.4-fpm, php:7.3-fpm, php:8.0-fpm Tuỳ ý và có thể xem chi tiết ở đây: //hub.docker.com/_/php
ahihi đồ ngốc trương thanh hùng nè
tôi thích vậy đó
đọc dữ liệu hộ bố
hùng đẹp trai
hùng đẹp trai
hùng ebudezain
hùng ebudezain
tôi thích vậy đó
bài viết được viết bởi trương thanh hùng //ebudezain.com/
Như bạn đã biết hay không biết thì bạn cũng phải biết: nginx muốn chạy php phải config cho nó chạy file đuôi php 😄 nãy chưa config đâu giừo sửa lại file nginx/app.conf 1 tí:
hùng đẹp trai
hùng ebudezain
hùng đẹp trai
server {
listen 80;
index index.php index.html;
root /app/public;
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;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
gzip_static on;
}
}
hùng đẹp trai
hùng ebudezain
hùng ebudezain
hùng thông minh lắm
bài viết được viết bởi trương thanh hùng //ebudezain.com/
hùng ebudezain
hùng ebudezain
hùng ebudezain
hùng đẹp trai
Cuối cùng muốn thực thi file php thì phải có file php mà thực thi chứ 😄 vậy trong folder app/public tạo file index.php với nội dung như sau:
tôi thích vậy đó
bài viết được viết bởi trương thanh hùng //ebudezain.com/
hùng ebudezain