Docker compose watch là gì?
Trong docker compose, thuộc tính watch cho phép bạn có thể sử dụng docker-compose watch thay vì docker-compose up và tự động đồng bộ hóa mã nguồn cục bộ với mã trong vùng chứa Docker mà không cần sử dụng volumes.
Chúng ta sẽ thử tính năng này với project sau. Các bạn clone project sample tại đây https://github.com/dockersamples/avatars/
git clone https://github.com/dockersamples/avatars.git
cd avatars
File compose.yaml sẽ như sau:
services: api: image: avatars-api build: context: . dockerfile: ./deploy/api.dockerfile ports: - 5734:80 develop: watch: - path: api/requirements.txt action: rebuild - path: api/ target: /app/api/ action: sync web: image: avatars-web build: context: . dockerfile: ./deploy/web.dockerfile ports: - 5735:5173 develop: watch: - path: web/package.json action: rebuild - path: web/yarn.lock action: rebuild - path: web/ target: /app action: sync
Thuộc tính watch chứa danh sách các quy tắc, mỗi quy tắc chứa một đường dẫn mà chúng watch và một action được thực thi khi tệp trong đường dẫn thay đổi. Có 2 action có thể thực hiện:
- sync - Sao chép các tệp đã thay đổi vào các service container đang chạy.
- rebuild - Kích hoạt image build và recreate service container đang chay.
Trong file compose.yaml, bất cứ khi nào file trong thư mục web/ được thay đổi, Compose sẽ sao chép tệp đó vào vị trí tương ứng trong /src/web bên trong container. Vì Webpack hỗ trợ Hot Module Reload nên các thay đổi sẽ tự động được phát hiện và áp dụng.
Việc thêm các thư viện mới không thể được thực hiện nhanh chóng, vì vậy bất cứ khi nào package.json được thay đổi, Compose sẽ build image và tạo lại container web.
Chạy các lệnh sau:
docker compose up -d
docker compose watch
Mở dường dẫn http://localhost:5735, ta sẽ thấy mỗi khi thay đổi file source code, các thay đổi tự động được áp dụng vào các container.
Việc sử dụng docker compose watch sẽ giúp tạo môi trường phát triển một cách nhanh chóng và thuận tiện. Nếu gặp khó khăn hãy để lại bình luận cho mình ở bên dưới.
Nguồn tham khảo: https://docs.docker.com/compose/file-watch/