- Service
- Lệnh docker-compose
- Tạo Image HTTPD
- Tạo Image PHP [FPM]
- Chuẩn bị my.cnf cho MySQL
- Biên tập docker-compose.yml
- Cài đặt Joomla
Chia nhỏ ứng dụng của bạn thành các Service Docker
Khi phân phối các ứng hoàn thành, từng phần của ứng dụng đó ở dạng sản phẩm gọi nó là các service [dịch vụ], hãy nhớ lại ví dụ của phần trước bạn đã cài đặt một ứng dụng Wordpress
, hãy xem nó để trang web đó chạy được bạn đã tạo ra những thành phần gì:
- Một container chạy HTTPD Apache là webserver.
- Một container chạy PHP để thi hành code các file PHP.
- Một container chạy MySQL làm CSDL cho trang web.
Những thành phần này khi phân phối ứng dụng chúng đều được gọi là các dịch vụ service. Như vậy các service thực chất là các container chạy đáp ứng chức năng thành phần tạo nên ứng dụng. Bạn cần hiểu sơ qua về khái niệm này vì ta sẽ sử dụng nó trong docker-compose
giúp tạo ra các service trên một cách tự động.
File docker-compose.yml
gần giống ý nghĩa với file
Dockerfile
đã tìm hiểu trong Sử dụng Dockerfile, là một file text, viết với định dạng YAML [Ain’t Markup Language, đọc nhanh định dạng Định dạng YML] là cấu hình để tử đó lệnh docker compose
sinh ra và quản lý các service [container], các
network, các ổ đĩa ... cho một ứng dụng hoàn chỉnh.
Lệnh docker-compose
Về nội dung bên trong file docker-compose.yml
sẽ tìm hiểu phía sau, giờ giả sử đang có file này, từ thư mục chứa file này gõ lệnh docker-compose
với tham số phù hợp để thi hành những tác vụ như:
- Tạo và chạy các thành phần định nghĩa trong
docker-compose.yml
[các dịch vụ, image, container, mạng, đĩa ...].docker-compose up
- Dừng và xóa: image, container, mạng, đĩa tạo ra bởi
docker-compose up
docker-compose down
- Theo dõi Logs từ các
dịch vụ
docker-compose logs [SERVICES]
- Ngoài ra còn có các lệnh nhỏ khác như
exec
ps
restart
... sẽ tìm hiều dần khi cần dùng đến.
Nội dung - Bài thực hành với docker-compose
Trong phần này, cơ bản thực hiện lại ví dụ ở phần Network, cài đặt PHP, APACHE, MYSQL, MEMCACHE, WORDPRESS với Docker nhưng sẽ sử dụng đến kỹ thuật triển khai product với docker-compose.yml
, kết
quả của ví dụ này đó là:
- Tạo được image chứa Server Memcache để sử dụng cached dữ liệu cho PHP cũng như SESSION PHP
- Tạo được một image chạy HTTPD APACHE
httpd
, cài và cấu hình lại phù hợp với ứng dụng web Wordpress, đặt tên làw-httpd:version2
- Tạo được một image chạy PHP-FPM, đã cấu hình lại: đặt tên image là
w-php:version2
- Tạo được file
docker-compose.yml
nó thiết lập để tạo ra các dịch vụ: chạy Apache, PHP từ 2 image trên, tạo dịch vụ chạy MySQL, tạo network để nối các dịch vụ trên vào, ánh xạ thư mục web chứa code WordPress vào dịch vụ Apache và PHP. - Chạy
docker-compose
để chạy các dịch vụ, tiến hành cài đặt Joomla: Có một website chạy Joomla!
Bây giờ sẽ tiến hành từng bước một để có được kết quả trên!. Trước tiên tạo ra một thư mục đặt tên là appproject
nơi đó lưu các file cấu hình, dữ liệu của dự án trên.
Tạo Image chạy Apache HTTPD
Tạo thư mục appproject/httpd
để lưu dữ liệu. Image này xây dựng từ image cơ sở httpd:latest
, chỉnh sửa lại httpd.conf
, cài đặt thêm htop
, vim
. Trước tiên chạy lệnh sau để lấy ra file httpd.conf
nằm trong image httpd:latest
để mà chỉnh sửa.
Chuẩn bị dữ liệu
docker run -it --rm -v /mycode/:/home/conf httpd cp conf/httpd.conf /home/conf/httpd.conf
Như phần trước, lệnh
trên chạy httpd:latest
, chạy xong xóa luôn container. Khi chạy nó copy httpd.conf
trong container ra thư mục host /mycode/
[bạn có thể đặt thư mục khác của bạn].
Sau lệnh này bạn có file /mycode/httpd.conf
, hãy copy nó vào dự án tại appproject/httpd/httpd.conf
, mở file này ra và chỉnh sửa các nội dung, bỏ comment #
để nạp các module cần thiết như:
LoadModule proxy_module modules/mod_proxy.so # hỗ trợ proxy LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so # để gọi PHP qua Proxy LoadModule deflate_module modules/mod_deflate.so # để apache nén dữ liệu trả về LoadModule rewrite_module modules/mod_rewrite.so # để sử dụng .htaccess, rewrite url LoadModule ssl_module modules/mod_ssl.so # để hỗ trợ SSL [https, port 443] Include conf/extra/httpd-vhosts.conf # để nạp các Virtual Host từ file httpd-vhosts.conf #Thêm vào AddHandler "proxy:fcgi://php-product:9000" .php # để chạy Script PHP qua Proxy
Tạo file appproject/httpd/httpd-vhosts.conf
và cập nhật nội dung sau, để tạo ra một HOST chạy với domain mywordpressblog.com
cổng 80, thư mục web là /home/sites/default/
ServerName mywordpressblog.com ServerAdmin DocumentRoot /home/sites/default/ CustomLog /dev/null combined #LogLevel Debug ErrorLog /home/sites/default/error.log Options -Indexes -ExecCGI +FollowSymLinks -SymLinksIfOwnerMatch DirectoryIndex index.php index.html Require all granted AllowOverride None
Tạo file index.html
TEST HTML APACHEApache HTTML đang chạy ...
Tương tự tạo một file index.php