Giới thiệu Docker Compose

Nếu bạn tự hỏi Docker Compose là gì thì có nghĩa là bạn đã dùng qua Docker cũng như có biết chúc về nó, vì vậy trong bài viết này tôi sẽ hướng dẫn các bạn cách dùng nó cũng như khái niệm về nó

Chú ý nếu bạn muốn học Docker thì có thể xem qua khoá học này trên gsviec nó là miễn phí Docker cho ngưới mới bắt đầu

Toàn bộ mã nguồn demo bạn có thể tải qua đường dẫn này https://github.com/gsviec/docker-canban

Vậy Docker Compose là gì

Theo như định nghĩa trên trang chủ thì nó là một công cụ dùng để quảng lý các contianer cũng như liên kết các image đó với nnau tham khảo tại đây https://docs.docker.com/compose/

Còn theo giải thích mì ăn liền của tôi là như thế này khi bạn chạy một ứng dụng web wordpress bạn cần hệ điều hành đó là Linux cụ thể là Ubuntu, cơ sở dữ liệu là MySQL, ngôn ngử lập trình là PHP cuối cùng là máy chủ web Nginx hoặc Apache.

Chúng ta có thể đóng gói các thành phần đó lại với nhau gọi là LEMP hoặc LAMP vào một image rồi sau đó dùng nó để chạy wordpress thông qua dòng lệnh sau

[code lang=”text”]
docker run –name some-wordpress –link some-mysql:mysql -d wordpress

[/code]

hoặc

[code lang=”text”]
docker run –name wordpress –link mysqlwp:mysql -p 80:80 \
-e WORDPRESS_DB_NAME=wordpress \
-e WORDPRESS_DB_USER=wordpress \
-e WORDPRESS_DB_PASSWORD=wordpresspwd \
-d wordpress
[/code]

Nhưng bạn đã phạm phải một nguyên tắc căn bản trong Docker đó là mỗi một image trong Docker chỉ làm một công việc duy nhất đó chính là tính năng cơ bản trong MicroService mà Docker áp dụng vào, do đó thây vì dùng cêu lênh trên chúng ta có thể chạy câu lệnh thế này.

[code lang=”text”]
docker run –name nginx -p 80:80 -d nginx
docker run –name php-fpm -p 9000:9000 -d gsviec/php
docker run –name mysql -p 3600:3060 \
MYSQL_ROOT_PASSWORD=secret \
MYSQL_DATABASE=phanbook \
MYSQL_USER=phanbook \
MYSQL_PASSWORD=secret \
-d mysql

[/code]

Nhưng thế này thì mỗi lần deploy hay chạy lại thêm các tham số cấu hình rất là phức tạp do đó thằng Docker Compose nó được sinh ra giúp cho việc quản lý dễ dàng hơn.

Nói tóm lại công dụng của Docker Compose giúp cho việc quản lý và phát triển một dự án thông qua docker nhanh hơn và trực quan hơn

Các dùng

Như mọi khi dùng WordPress để demo là cách tốt nhất cho các bạn muốn học Docker 🙂 cảm ơn Wordpess một lần nữa.

Để dùng Docker Compose thì bạn chỉ việc tạo một tập tin có tên là docker-compose.yaml cú pháp nó theo định dạng YAML, nếu bạn chưa biết YAML là gì thì có thể xem qua bài viết YAML Format.

Tập tin docker-composer.yml có nội dung như sau:

[php]

version: ‘2’

services:
mysql:
image: mysql
restart: always
environment:
– variables.env
# volumes:
# – ./data/mysql:/docker-entrypoint-initdb.d
nginx:
depends_on:
– phpfpm
image: nginx
ports:
– 80:80
restart: always
working_dir: /var/www
volumes:
– ./wordpress:/var/www/
– ./conf/nginx/gsviec.conf:/etc/nginx/conf.d/default.conf
links:
– phpfpm

phpfpm:
image: phalconphp/php-apache:ubuntu-16.04
restart: always
working_dir: /var/www
ports:
-8080:80
volumes:
– ./wordpress:/var/www
depends_on:
– mysql
download:

image: nginx
restart: ‘no’
volumes:
– ./:/var/www
command: sh download-wp.sh

[/php]

hãy để tôi giải thích vài tham số cho bạn hiểu dòng đầu tiên chỉ là định nghĩa version docker compose thôi hiện tại nó đã có phiên bản là 3 nhưng tôi vẫn thích dùng 2

còn dưới dòng server tôi định nghĩa các image cần thiết để chạy wordpress bao gồm nginx, mysql, php-fpm khi bạn chạy lệnh docker-compose up nó sẽ tạo các container tương ứng từ các image mà bạn định nghĩa.

Còn tập tin variables.env là các tham số cấu hình MySQL bạn có thể thay đổi nó nếu bạn muốn, sau này bạn muốn thêm cấu hình thì chỉ việc thêm vào thôi, rất tiện lợi để quản lý do với cách gõ trực tiếp từ bash shell như ở trên, chẳn hạn sau này bạn muốn thêm một dịch vụ phpmyadmin để quản lý mysql thì chỉ cần đoạn code này vào tập tin docker-compose.yml` dưới chỗ service

[php]

phpmyadmin:
restart: always
image: phpmyadmin/phpmyadmin:4.6
depends_on:
– mysql
ports:
– 9080:80
env_file:
– variables.env

[/php]

Còn trong tập tin variables.env bạn có thể thêm vào thông số cấu hình PHPmyadmin như sau:

[code lang=”text”]
# phpMyAdmin settings
PMA_ARBITRARY=1
PMA_HOST=mysql
PMA_PORT=3306
PMA_USER=phalcon
PMA_PASSWORD=secret

[/code]

Còn dòng code

[php]
ports:
– 8080:80
[/php]

có nghĩa là tôi cho web server apache lắng nghe ở cổng 8080, nếu bạn muốn lắng nghe ở cổng 80 thì chỉ việc thay đổi lại thành như sau:

Kế đến bạn chạy lệnh bên dưới này để pull(kéo) 4 cái image định nghĩa bên trên rồi nó sẽ tự khởi tạo 3 cái container sau vài phút bạn chờ đợi.

[code lang=”text”]
docker-compose up -d

[/code]

trong 4 cái image tôi định nghĩa ở trên có 1 cái là restart: ‘no’ nên nó không khởi động, do đó khi bạn chạy lệnh:

[code lang=”text”]
docker ps

[/code]

bạn chỉ thấy kết quả như thế này thôi:

cuối cùng bạn sau khi nó chạy xong kết quả sẽ có dạng như thế này nếu như bạn truy cập vào đường dẫn http://you-ip:port trong trường hợp của tôi là http://localhost

chú ý mặc định docker compose nó sẽ lấy tên thư mục làm tên project cho bạn như hình trên nó là khoahocdockercanban, nếu bạn muốn thây đổi nó thì bạn thêm tham số -p

Ngoài ra nếu bạn muốn restart và stop nó thì dùng lệnh sau:

[code lang=”text”]
docker-compose restart
docker-compose stop

[/code]

tất nhiên bạn cũng có thể chạy lệnh docker-compose help để thấy các dòng lệnh nó hỗ trợ dưới đây là một kết quả trên máy tôi

[code lang=”text”]
Commands:
build Build or rebuild services
bundle Generate a Docker bundle from the Compose file
config Validate and view the compose file
create Create services
down Stop and remove containers, networks, images, and volumes
events Receive real time events from containers
exec Execute a command in a running container
help Get help on a command
kill Kill containers
logs View output from containers
pause Pause services
port Print the public port for a port binding
ps List containers
pull Pull service images
push Push service images
restart Restart services
rm Remove stopped containers
run Run a one-off command
scale Set number of containers for a service
start Start services
stop Stop services
top Display the running processes
unpause Unpause services
up Create and start containers
version Show the Docker-Compose version information

[/code]

Kêt luận

Trên đây tôi đã hướng dẫn bạn cách sử dụng Docker Compose và cũng như cách cài đặt WordPress thông qua Docker Compose.

Như mọi khi nếu thấy bài viết hay thì các bạn có thể chia sẽ và like, các bạn đã dùng Docker chưa nếu có hãy để bình luận bên dưới chia sẽ những kinh nghiệm của bạn.

Leave a Comment

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Scroll to Top