Computer >> Hướng Dẫn Máy Tính >  >> Hệ Thống >> Linux

Tiếp tục thay đổi ngay lập tức đối với hình ảnh Docker mà không sửa đổi bản gốc

Hình ảnh Docker là bất biến. Sau khi được xây dựng, chúng không thay đổi. Điều này đảm bảo tính nhất quán, khả năng dự đoán và ổn định. Mọi vùng chứa được tạo từ cùng một hình ảnh đều hoạt động giống hệt nhau và việc tạo phiên bản trở nên an toàn và dễ dàng. Nhưng điều gì sẽ xảy ra nếu bạn cần điều chỉnh thứ gì đó bên trong vùng chứa đang chạy, chẳng hạn như cài đặt gói hoặc cập nhật cấu hình? Đó là lúc docker commit xuất hiện. Nó cho phép bạn nắm bắt các thay đổi trong vùng chứa đang chạy và tạo hình ảnh mới mà không cần chạm vào hình ảnh gốc. Điều này rất tốt cho việc thử nghiệm các bản sửa lỗi, lặp lại nhanh chóng và triển khai các hình ảnh tùy chỉnh mà không cần phải xây dựng lại từ đầu.

Mục lục

Tại sao hình ảnh Docker không thay đổi

Hình ảnh Docker bao gồm nhiều lớp chỉ đọc. Khi bạn chạy một vùng chứa, Docker sẽ thêm một lớp mỏng có thể ghi lên trên được gọi là lớp vùng chứa. Mọi thay đổi bạn thực hiện chỉ xảy ra ở lớp trên cùng này. Khi vùng chứa bị xóa, tất cả các thay đổi trong lớp đó sẽ biến mất, khiến hình ảnh gốc không thay đổi.

Thiết kế này đảm bảo một số lợi ích:

  • Mọi vùng chứa từ cùng một hình ảnh đều hoạt động giống nhau, đảm bảo tính nhất quán.
  • Những thay đổi trong một vùng chứa không ảnh hưởng đến những vùng chứa khác, mang lại khả năng dự đoán.
  • Bạn có thể gắn thẻ các phiên bản hình ảnh cụ thể một cách an toàn mà không gặp rủi ro.

Thiết kế này mang lại sự ổn định tuyệt vời nhưng lại hạn chế bạn khi bạn muốn thực hiện các thay đổi nhanh chóng đối với vùng chứa đang chạy. Đó là nơi docker commit giúp đỡ.

Tạo hình ảnh mới từ vùng chứa đang chạy

Khi bạn chạy docker commit lệnh, Docker nắm bắt trạng thái hiện tại của một container đang chạy và tạo một hình ảnh mới từ nó. Nó chụp nhanh hệ thống tệp của vùng chứa, lưu mọi thay đổi bạn đã thực hiện, như gói đã cài đặt, cấu hình được cập nhật hoặc tệp đã sửa đổi, dưới dạng lớp hình ảnh mới. Bằng cách này, hình ảnh gốc vẫn không bị ảnh hưởng, cho phép bạn thử nghiệm và lặp lại nhanh chóng.

Tiếp tục thay đổi ngay lập tức đối với hình ảnh Docker mà không sửa đổi bản gốc

Điều này lý tưởng cho việc lưu thiết lập cơ sở tùy chỉnh để sử dụng lại trong tương lai, áp dụng các bản sửa lỗi nhỏ hoặc thay đổi cấu hình trong quá trình thử nghiệm hoặc chia sẻ hình ảnh cập nhật với nhóm của bạn mà không cần phải xây dựng lại Dockerfile từ đầu.

Bạn có thể sử dụng docker commit lệnh với cú pháp sau để tạo hình ảnh mới từ vùng chứa đang chạy:

docker commit [OPTIONS] CONTAINER_ID NEW_IMAGE_NAME[:TAG]

Đây, CONTAINER_ID là ID hoặc tên của container bạn muốn chụp, NEW_IMAGE_NAME là tên bạn muốn cho hình ảnh mới và TAG là tùy chọn, với mặc định là mới nhất.

Lưu ý: docker commit là bí danh cũ của docker container commit; cả hai đều giống hệt nhau.

docker commit lệnh cung cấp một số tùy chọn cho phép bạn thêm siêu dữ liệu, áp dụng các thay đổi cấu hình và kiểm soát cách hoạt động của quy trình cam kết. Bảng bên dưới tóm tắt tất cả các tùy chọn được hỗ trợ:

Tùy chọn Dạng dài Mô tả Ví dụ -a–tác giảThêm tên tác giả vào siêu dữ liệu hình ảnh mới.docker commit -a "Anees" my-container my-image -c–changeÁp dụng các hướng dẫn của Dockerfile như ENV, LABEL hoặc CMD cho hình ảnh mới.docker commit -c "ENV APP_ENV=prod" my-container my-image -m–messageThêm một thông báo ngắn mô tả những thay đổi được thực hiện trong hình ảnh.docker commit -m "Installed curl" my-container my-image -p–pauseTạm dừng vùng chứa trong quá trình xác nhận để đảm bảo tính nhất quán (mặc định:true).docker commit --pause=false my-container my-image

Xem cách hoạt động của docker commit

Giả sử bạn muốn cài đặt Curl trong vùng chứa Alpine mà không cần xây dựng lại Dockerfile. Để thực hiện việc này, hãy chạy vùng chứa từ hình ảnh cơ sở:

docker run -it alpine:latest /bin/sh

Khi bạn đã ở trong vùng chứa, hãy thực hiện các thay đổi cần thiết:

apk update && apk add curl
Tiếp tục thay đổi ngay lập tức đối với hình ảnh Docker mà không sửa đổi bản gốc

Bây giờ hãy thoát khỏi vùng chứa:

exit

Sau đó, cam kết vùng chứa dưới dạng hình ảnh mới:

docker commit alpine-with-curl:1.0
Tiếp tục thay đổi ngay lập tức đối với hình ảnh Docker mà không sửa đổi bản gốc

Xác minh hình ảnh mới của bạn:

docker images

Bây giờ, bạn đã có một hình ảnh mới sẵn sàng để chạy ở mọi nơi với tính năng cuộn tròn được cài đặt sẵn.

Tiếp tục thay đổi ngay lập tức đối với hình ảnh Docker mà không sửa đổi bản gốc

Chạy hình ảnh mới của bạn để kiểm tra các thay đổi đã lưu

Sau khi tạo hình ảnh mới, bạn có thể chạy vùng chứa từ hình ảnh đó để xác minh rằng các thay đổi của bạn đã được lưu.

docker run -it alpine-with-curl:1.0 /bin/sh

Lệnh này mở một shell tương tác bên trong một container dựa trên alpine-with-curl:1.0 hình ảnh. Sau khi vào bên trong, bạn có thể kiểm tra xem các sửa đổi của mình có còn nguyên vẹn hay không.

curl --version

Điều này chứng tỏ rằng những thay đổi vẫn được duy trì trong hình ảnh mới.

Tiếp tục thay đổi ngay lập tức đối với hình ảnh Docker mà không sửa đổi bản gốc

docker commit vs Dockerfile:Khi nào nên sử dụng cái nào

Cả Dockerfile và docker commit đều cho phép bạn tạo hình ảnh Docker, nhưng chúng hoạt động theo những cách rất khác nhau và phù hợp với các tình huống khác nhau.

Dockerfile là lựa chọn tốt nhất khi bạn cần các bản dựng đáng tin cậy và có thể lặp lại, đặc biệt đối với các đường dẫn CI/CD và môi trường sản xuất. Nó giữ tất cả các thay đổi được xác định rõ ràng trong mã, giúp chúng dễ dàng theo dõi, đánh giá và kiểm soát phiên bản theo thời gian. Cách tiếp cận này đảm bảo rằng bất kỳ ai xây dựng hình ảnh sau này đều nhận được kết quả tương tự. Điều này rất quan trọng cho việc duy trì lâu dài và cộng tác nhóm.

Mặt khác, docker commit hoạt động tốt để sửa lỗi nhanh, kiểm tra hoặc điều chỉnh nhỏ mà bạn muốn thử mà không cần viết lại hoặc xây dựng lại toàn bộ Dockerfile. Tính năng này hữu ích khi bạn đang thử nghiệm, gỡ lỗi hoặc xác thực một thay đổi một cách nhanh chóng. Tuy nhiên, vì những thay đổi không được ghi lại trong tệp nên phương pháp này phù hợp hơn cho mục đích sử dụng ngắn hạn hơn là sản xuất.

Tóm lại, bạn có thể sử dụng docker commit chủ yếu để thử nghiệm hoặc sửa chữa tạm thời. Đối với hình ảnh sẵn sàng sản xuất, hãy luôn ưu tiên Dockerfile. Để tận dụng tối đa Docker, bạn nên khám phá các lệnh quan trọng khác giúp làm việc với vùng chứa, hình ảnh và quy trình công việc dễ dàng hơn.