Cách thực hiện thay đổi vĩnh viễn đối với Docker image ngay lập tức

Docker image là bất biến. Sau khi được build, 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à tính ổn định. Mọi container được tạo từ cùng một image đều hoạt động giống hệt nhau, giúp việc quản lý 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 một container đang chạy, chẳng hạn như cài đặt một gói hoặc cập nhật cấu hình? Đó là lúc lệnh `docker commit` phát huy tác dụng. Nó cho phép bạn ghi lại các thay đổi trong một container đang chạy và tạo một image mới mà không cần chạm vào image gốc. Điều này rất tuyệt vời để kiểm tra các bản sửa lỗi, lặp lại nhanh chóng và triển khai những image tùy chỉnh mà không cần build lại từ đầu.

Tại sao Docker image không thay đổi?

Docker image bao gồm nhiều lớp chỉ đọc. Khi bạn chạy một container, Docker sẽ thêm một lớp ghi mỏng ở trên cùng được gọi là lớp container. Bất kỳ thay đổi nào bạn thực hiện chỉ xảy ra trong lớp trên cùng này. Sau khi container bị xóa, tất cả các thay đổi trong lớp đó sẽ biến mất, giữ nguyên image gốc.

  • Thiết kế này đảm bảo một số lợi ích:
  • Mọi container từ cùng một image đều hoạt động giống nhau, đảm bảo tính nhất quán.
  • Các thay đổi trong một container không image hưởng đến những container khác, mang lại khả năng dự đoán.

Bạn có thể gắn thẻ các phiên bản image cụ thể một cách an toàn mà không gặp rủi ro. Thiết kế này cung cấp độ ổn định tuyệt vời, nhưng lại hạn chế bạn khi muốn thực hiện các thay đổi nhanh chóng đối với một container đang chạy. Đó là lúc lệnh `docker commit` phát huy tác dụng.

Tạo image mới từ container đang chạy

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

Cách lệnh Commit hoạt động
Cách lệnh Commit hoạt động

Điều này làm cho nó lý tưởng để lưu thiết lập cơ bản 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ẻ image đã cập nhật với nhóm của bạn mà không cần phải build lại Dockerfile từ đầu.

Bạn có thể sử dụng lệnh `docker commit` với cú pháp sau để tạo một image mới từ một container đ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 đặt cho image mới, và `TAG` là tùy chọn, mặc định là `latest`.

Lưu ý: `docker commit` là một alias cũ cho `docker container commit`; cả hai đều giống nhau.

Lệnh `docker commit` 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 thức hoạt động của quá trình cam kết. Bảng dưới đây tóm tắt tất cả các tùy chọn được hỗ trợ:

Tùy chọn Dạng dàiMô tảVí dụ
-a-authorThêm tên tác giả vào siêu dữ liệu của image mớidocker commit -a "Anees" my-container my-image
-c-changeÁp dụng các chỉ thị trong Dockerfile như ENV, LABEL hoặc CMD cho Docker image mớidocker 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 trên imagedocker commit -m "Installed curl" my-container my-image
-p-pauseTạm dừng quá trình commit trong container để đảm bảo tính nhất quán (mặc định: true)docker commit --pause=false my-container my-image

Xem cách lệnh `docker commit` hoạt động

Giả sử bạn muốn cài đặt curl trong một container Alpine mà không cần build lại Dockerfile. Để làm điều này, hãy chạy một container từ image gốc:

docker run -it alpine:latest /bin/sh

Sau khi vào container, hãy thực hiện các thay đổi cần thiết:

apk update && apk add curl
Thực hiện các thay đổi cần thiết trước khi Commit
Thực hiện các thay đổi cần thiết trước khi Commit

Bây giờ hãy thoát khỏi container:

exit

Sau đó, hãy commit container dưới dạng một image mới:

docker commit <container_id> alpine-with-curl:1.0
Commit container image mới
Commit container image mới

Xác minh image mới của bạn:

docker images

Bây giờ, bạn đã có một image mới sẵn sàng để chạy ở bất cứ đâu, với curl được cài đặt sẵn.

Image mới với các thay đổi container đã lưu
Image mới với các thay đổi container đã lưu

Chạy image mới để kiểm tra các thay đổi đã lưu

Sau khi tạo image mới, bạn có thể chạy một container từ đó để xác minh rằng các thay đổi đã đượ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 container dựa trên image `alpine-with-curl:1.0`. Sau khi vào bên trong, bạn có thể kiểm tra xem các thay đổi của mình có còn nguyên vẹn hay không.

curl --version

Lệnh này chứng minh rằng các thay đổi đã được lưu giữ trong image mới.

Xác minh và cam kết thay đổi
Xác minh và cam kết thay đổi
Thứ Hai, 02/02/2026 10:53
31 👨
Xác thực tài khoản!

Theo Nghị định 147/2024/ND-CP, bạn cần xác thực tài khoản trước khi sử dụng tính năng này. Chúng tôi sẽ gửi mã xác thực qua SMS hoặc Zalo tới số điện thoại mà bạn nhập dưới đây:

Số điện thoại chưa đúng định dạng!
Số điện thoại này đã được xác thực!
Bạn có thể dùng Sđt này đăng nhập tại đây!
Lỗi gửi SMS, liên hệ Admin
0 Bình luận
Sắp xếp theo
    ❖ Linux