Tìm hiểu cơ bản về Docker [Phần 5]

Tác giả: 24/05/2023

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.

Trả lời