Docker Compose là một công cụ mạnh mẽ và phổ biến dùng trong việc quản lý và triển khai các ứng dụng dựa trên Docker. Nó cho phép bạn định nghĩa, cấu hình và chạy nhiều container Docker như một dự án duy nhất, giúp đơn giản hóa việc triển khai ứng dụng và đảm bảo tính nhất quán giữa môi trường phát triển và triển khai.
Dưới đây là một số khái niệm và ví dụ về Docker Compose:
Định nghĩa dự án bằng tệp docker-compose.yml
Trong tệp docker-compose.yml
, bạn có thể định nghĩa các dịch vụ (services) cần thiết cho ứng dụng của mình. Ví dụ, để triển khai một ứng dụng web PHP và cơ sở dữ liệu MySQL, bạn có thể định nghĩa hai dịch vụ như sau:
version: "3"
services:
web:
image: php:7.4-apache
ports:
- "80:80"
volumes:
- ./app:/var/www/html
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: my_database
Trong đoạn mã trên, chúng ta định nghĩa hai dịch vụ: web
và db
. Dịch vụ web
sẽ sử dụng hình ảnh PHP phiên bản 7.4 với Apache, lắng nghe trên cổng 80 và chia sẻ thư mục ./app
từ máy host vào thư mục /var/www/html
trong container. Dịch vụ db
sẽ sử dụng hình ảnh MySQL phiên bản 5.7 và đặt một số biến môi trường cần thiết cho cơ sở dữ liệu.
Sử dụng lệnh Docker Compose
Sau khi đã định nghĩa dự án trong tệp docker-compose.yml
, bạn có thể sử dụng các lệnh Docker Compose để quản lý các dịch vụ.
-
Khởi chạy dự án:
docker-compose up
Lệnh này sẽ khởi chạy các container cho các dịch vụ đã được định nghĩa trong tệp
docker-compose.yml
. -
Dừng và xóa các container:
docker-compose down
Lệnh này dừng và xóa tất cả các container liên quan đến dự án.
-
Liệt kê các container đang chạy:
docker-compose ps
Lệnh này sẽ hiển thị trạng thái của các container trong dự án.
-
Xem log của các dịch vụ:
docker-compose logs
Lệnh này hiển thị log của các dịch vụ trong dự án.
Biến môi trường và tùy chỉnh
Docker Compose cho phép bạn sử dụng các biến môi trường để tùy chỉnh các cấu hình cho các môi trường khác nhau, chẳng hạn như môi trường phát triển và triển khai. Bạn có thể sử dụng các biến môi trường trong tệp docker-compose.yml
và định nghĩa các giá trị cho chúng trong các tệp .env
tương ứng.
Ví dụ, nếu bạn muốn định nghĩa một biến môi trường cho cổng kết nối của dịch vụ web
, bạn có thể thêm một dòng vào tệp .env
như sau:
WEB_PORT=8080
Sau đó, trong tệp docker-compose.yml
, bạn có thể sử dụng biến môi trường này như sau:
version: "3"
services:
web:
image: php:7.4-apache
ports:
- "${WEB_PORT}:80"
volumes:
- ./app:/var/www/html
Khi chạy lệnh docker-compose up
, dịch vụ web
sẽ lắng nghe trên cổng 8080 thay vì cổng 80.
Tích hợp với Docker Swarm
Nếu bạn muốn triển khai ứng dụng trên môi trường phân tán với nhiều máy chủ, Docker Compose có thể tích hợp với Docker Swarm. Điều này cho phép bạn quản lý các dịch vụ trên nhiều node trong một cụm Docker.
Để sử dụng tích hợp này, bạn chỉ cần thêm tùy chọn --orchestrate
hoặc --with-registry-auth
khi chạy các lệnh docker stack deploy
hoặc docker-compose up
trong môi trường Swarm.
Docker Compose là công cụ hữu ích cho việc phát triển, thử nghiệm và triển khai ứng dụng một cách dễ dàng và hiệu quả. Nó giúp giảm thiểu sự khác biệt giữa môi trường phát triển và triển khai, đảm bảo tính nhất quán trong quy trình phát triển phần mềm và nâng cao hiệu suất của các nhóm phát triển.