Hướng dẫn php mysql docker-compose

  • 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 APACHE 

    

Apache HTTML đang chạy ...

Tương tự tạo một file index.php

Chủ Đề