Một số điều đang xảy ra ở đây:
Đầu tiên, docker commit
là một mùi mã. Nó có xu hướng được sử dụng bởi những người tạo hình ảnh bằng quy trình thủ công, thay vì tự động hóa các bản dựng của họ bằng Dockerfile sẽ cho phép tạo lại dễ dàng. Nếu có thể, tôi khuyên bạn nên chuyển sang Dockerfile để tạo hình ảnh.
Tiếp theo, một docker commit
sẽ không ghi lại những thay đổi được thực hiện đối với một tập. Và vấn đề tương tự cũng xảy ra nếu bạn cố gắng cập nhật ổ đĩa bằng RUN
bước trong Dockerfile. Cả hai cách này nắm bắt các thay đổi đối với hệ thống tệp vùng chứa và lưu trữ những thay đổi đó dưới dạng một lớp trong hình ảnh docker và các ổ đĩa không phải là một phần của hệ thống tệp vùng chứa. Điều này cũng hiển thị nếu bạn chạy docker diff
chống lại một thùng chứa. Trong trường hợp này, hình ảnh ngược dòng đã xác định khối lượng trong Dockerfile của chúng:
VOLUME /var/lib/mysql
Và docker không có lệnh để hoàn tác một ổ đĩa đã tạo từ Dockerfile. Bạn sẽ cần phải trực tiếp sửa đổi định nghĩa hình ảnh từ bên ngoài docker (không được khuyến nghị) hoặc xây dựng hình ảnh ngược dòng của riêng bạn với bước đó đã bị loại bỏ (được khuyến nghị).
Những gì hình ảnh mysql cung cấp là khả năng đưa các tập lệnh tạo cơ sở dữ liệu của riêng bạn vào /docker-entrypoint-initdb.d
, mà bạn có thể thêm bằng hình ảnh của riêng mình để mở rộng mysql hoặc gắn kết dưới dạng một ổ đĩa. Đây là nơi bạn sẽ đưa vào lược đồ của mình hoặc khởi tạo từ một bản sao lưu đã biết để phát triển.
Cuối cùng, nếu mục tiêu là duy trì lâu dài, bạn nên lưu trữ dữ liệu của mình trong một ổ đĩa, không phải bằng cách lưu trữ các vùng chứa:
docker run -v mysql-data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql
Ổ đĩa cho phép bạn tạo lại vùng chứa, nâng cấp lên phiên bản mysql mới hơn khi các bản vá được phát hành (ví dụ:các bản sửa lỗi bảo mật) mà không làm mất dữ liệu của bạn.
Để sao lưu ổ đĩa, tệp này sẽ xuất sang tgz:
docker run --rm -v mysql-data:/source busybox tar -cC /source . >backup.tgz
Và để khôi phục một ổ, điều này tạo một ổ từ tgz:
docker run --rm -i -v mysql-data:/target busybox tar -xC /target <backup.tgz