Docker Compose: Cơ bản và Sử dụng

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ụ: webdb. 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.