Tìm hiểu cơ bản về Docker [Phần 5]
Mình sẽ tiếp tục trình bày chủ đề tìm hiểu cơ bản về Docker.
Phần 5 – Triển khai LAMP sử dụng Docker
Mình demo phần này vì nó là cơ bản trước khi chúng ta tìm hiểu về docker file và docker compose
Mô hình của mình là khởi tạo 3 container trên images có sẵn để tạo thành LAMP stack ( Linux-Apache-Mysql-Php), nó là 1 stack cơ bản, đối với các bạn hãy tìm các images tương ứng cho môi trường.
Mình demo trên Host Centos7 có IP 45.117.80.228
- Php-fpm : port 9000
- Httpd : port 80 web
- Mysql :3306
1 – Pull image Php-fpm
docker pull php:8.1.16-fpm
Images php-fpm
Tạo 1 folder chứa dữ liệu web
mkdir -p /web/www
Run container php-fpm trong chế độ nền, sử dụng bind mount dữ liệu vào container
docker run -d --name p1 -h p1 -v /web/www:/data 587
Tạo 1 file info.php trong /web/www để check version php
Chúng ta sẽ di chuyển vào container đang chạy
[root@dock www]# docker exec -it p1 bash
cd vào /data trong container
File info.php đã có trong container ,bạn hãy chạy câu lệnh sau để kiểm tra các thông số của php 8.1.16 này.
php info.php
php --version
Chúng ta nhấn tổ hợp Ctl + P + Q để thoát terminal mà container vẫn chạy.
2- Pull image httpd
docker pull httpd
Copy file cấu hình của httpd trong container ra /web để chỉnh sửa mà không cần chạy container
docker run --rm -v /web:/data httpd cp /usr/local/apache2/conf/httpd.conf /data
cd /web
ls
Sửa file httpd.conf Dòng 142 và 146 bỏ #
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
Dòng 265 và 266 chúng ta sửa Document root của website ở đây mình sẽ để là /data của Host
Dòng 299 thêm index.php để tí mình tải wordpress chạy.
Dòng cuối cùng thêm vào
Addhandler "proxy:fcgi://172.17.0.2:9000" .php
Container php-fpm có IP là 172.17.0.2
Trả lại file cấu hình chỉnh sửa bên trên và chạy container httpd với tên h1
docker run -d --name h1 -h h1 -p 80:80 -v /web/www/:/data -v /web/httpd.conf:/usr/local/apache2/conf/httpd.conf httpd
Vào bên trong container h1 để kiểm tra.
docker exec -it h1 /bin/bash
Các bạn vào kiểm tra cấu hình file httpd.conf trong /usr/local/apache2/conf/httpd.conf đã được đẩy vào hay chưa
Sau đó chúng ta thoát tiến trình Ctr + P + Q
cd vào /web/www tạo thử 1 file index.html để xem container httpd có hoạt động
Kiểm tra
3 – Pull Mysql
docker pull mysql
Tạo 1 thư mục /web/db để map thư mục cấu hình của mysql trong container ,
Run container mysql , set pass root mysql ,cho container chạy trong nền
docker run --name m1 -h m1 -e MYSQL_ROOT_PASSWORD=123456 -v /web/db:/var/lib/mysql -d mysql
Kết nối vào bên trong container đang chạy mysql
docker exec -it m1 /bin/bash
Đăng nhập root mysql để tạo databse
mysql -u root -p
Tạo cơ sở dữ liệu
create database nhanhoa9999;
Sau khi tạo xong cơ sở dữ liệu, ta cần tạo người dùng cho cơ sở dữ liệu đó.
create user 'nhanhoa9999'@'%' identified by 'nhanhoa9999';
Tại thời điểm này, ta đã tạo một người dùng cơ sở dữ liệu, tuy nhiên ta vẫn chưa cấp cho người dùng đó quyền truy cập vào cơ sở dữ liệu. Có thể thêm các quyền đó bằng lệnh sau:
grant all privileges on nhanhoa9999.* to 'nhanhoa9999'@'%';
Bây giờ người dùng có quyền truy cập vào cơ sở dữ liệu, ta cần xóa các đặc quyền để MySQL biết về những thay đổi đặc quyền gần đây mà ta đã thực hiện
flush privileges;
Tải wordpress
mkdir /wordpress && cd /wordpress
wget http://wordpress.org/latest.tar.gz
Giải nén tệp vừa tải xuống
tar -xzvf latest.tar.gz
Chuyển wordpress vào /web/www
rsync -av /wordpress/wordpress/* /web/www
cd /web/www
cp wp-config-sample.php wp-config.php
Kết nối với cơ sở dữ liệu
vi wp-config.php
Khởi tạo tiến trình cho p1 kết nối m1
docker exec -it p1 bash
docker-php-ext-install mysqli
docker-php-ext-install pdo_mysql
php -m
Thoát khỏi container
docker restart p1
Chúng ta truy cập vào http://IP/index.php để cài đặt wordpress.
Như vậy Nhân Hòa đã giới thiệu với các bạn LAMP stack runing bằng container như thế nào, đây là các container tạo ra từ các images có sẵn, việc cấu hình thủ công này phần nào giúp chúng ta hiểu về cách thức hoạt động, thực tế chắc không ai triển khai như này vì nó khá dài và cồng kềnh.
Hẹn gặp lại các bạn tại bài viết tiếp theo Docker File và Docker Compose.