— cloud, devops, tech, docker, feature — 1 min read
Hôm nay có bạn đồng nghiệp hỏi tôi, sao tao build lại image, restart lại rồi mà vẫn chạy "same shit", không thấy thay đổi gì? Tôi liền hỏi bạn rằng: "Thế bạn đã biết sự khác nhau giữa docker-compose up
& docker-compose restart
chưa?"
Đầu tiên, hãy nói về docker-compose restart theo tài liệu của docs.docker.com
Restarts all stopped and running services.
If you make changes to your docker-compose.yml configuration these changes are not reflected after running this command.
Hay nói cách khác, restart chỉ đơn thuần restart container, chạy lại từ entrypoint và giữ nguyên image, configuration, volume, container id...
Tiếp đến, hãy nói về docker-compose up
Builds, (re)creates, starts, and attaches to containers for a service.
If there are existing containers for a service, and the service’s configuration or image was changed after the container’s creation,
docker-compose up
picks up the changes by stopping and recreating the containers (preserving mounted volumes). To prevent Compose from picking up changes, use the--no-recreate
flag.
Tức là up sẽ tạo container mới và nếu đã tồn tại container đang chạy, thì kiểm tra sự thay đổi về image, configuration (dựa vào file cấu hình docker-compose.yml), sau đó recreate (stop and create) container, và đồng thời cũng chạy lại từ entrypoint.
Cùng xem ví dụ dưới đây để hiểu rõ hơn sự khác biệt này
docker-compose restart worker
chỉ restart container dummy_worker_1 và giữ nguyên image, configuration, volume, container id... nên container id vẫn là 449b0467fcea, nhưng status thay đổi thành Up 2 seconds
chứng tỏ container vừa mới được khởi động lạidocker-compose up -d worker
thực hiện re-creating (stop and create) container dummy_worker_1. Kết quả là container id đã đổi thành efa81e72c7a, created và status cũng được cập nhật tương ứng. Cuối cùng ta kiểm tra container đang chạy với image nào thì chính là Image hash mới nhất (854dc..)docker-compose restart
: restart service, dùng trong trường hợp cần khởi động lại container.
docker-compose up
: re-create service, dùng trong trường hợp cần cập nhật cấu hình & image mới nhất