2014-10-11 29 views
6

Tôi đang viết một Dockerfile để thiết lập hình ảnh để thử nghiệm một ứng dụng web. Tôi dựa trên hình ảnh tutum/đèn (https://github.com/tutumcloud/tutum-docker-lamp/blob/master/Dockerfile) bởi vì đó có vẻ là một cơ sở tốt để bắt đầu.Làm thế nào để "undeclare" khối lượng trong hình ảnh docker?

Là một phần của dockerfile, tôi muốn tạo một cơ sở dữ liệu mysql và thiết lập một số nội dung trong đó. Tuy nhiên, hình ảnh tutum/lamp tuyên bố VOLUME ["/etc/mysql", "/var/lib/mysql" ], vì vậy nếu tôi hiểu chính xác, mọi thay đổi mà tôi thực hiện đối với cơ sở dữ liệu MySQL trong Dockerfile sẽ không được duy trì.

  • Tôi có hiểu chính xác không?

Nếu có,

  • Có cách nào để "undeclare" những khối lượng để những thư mục sẽ là một phần của hệ thống tập tin công đoàn như mọi thứ khác?

Cảm ơn!

+1

Tôi thực sự đang cố gắng làm điều tương tự. Tôi đã chỉnh sửa khối lượng ra khỏi tutum/đèn nhưng khi tôi cố gắng xây dựng nó, tôi nhận được: 'start-apache2.sh: không có tập tin hoặc thư mục nào như vậy ' – pguardiario

+0

@pguardiario: Bạn đã sao chép tất cả các tệp từ thư mục tutit/lamp git ? Bạn cũng cần phải nhận tất cả các tệp hỗ trợ, không chỉ là Dockerfile. Ngoài ra, hãy chắc chắn rằng bạn chạy 'docker build' trong thư mục bên phải. – Mikkel

+0

vâng tôi cũng hiểu điều đó. Tôi có cả hai để xây dựng nhưng tôi vẫn gặp sự cố khi di chuyển vùng chứa. – pguardiario

Trả lời

3

Bạn có thể không thực sự undeclare một khối lượng, nhưng bạn có thể xây dựng phiên bản riêng của bạn của hình ảnh gốc bằng cách sửa đổi nó là dockerfile.

3

Không thể thay đổi một vùng chứa hiện tại, vì vậy bạn có hai lựa chọn:

  1. Hãy container Tutum và xây dựng biến thể của riêng bạn
  2. Quản lý bền bỉ của container tutum sử dụng một nơi chứa dữ liệu.

container liệu

Tạo một container mà tạo ra một tham chiếu khối lượng dữ liệu:

docker run -it --name dbvol -v /var/lib/mysql ubuntu env 

này sau đó có thể được sử dụng khi chạy cơ sở dữ liệu mysql để tồn tại dữ liệu:

docker run -d --volumes-from dbvol -p 3306:3306 tutum/mysql:5.6 

Dữ liệu vẫn tồn tại miễn là vùng chứa "dbvol" tồn tại. Nó có thể được xóa ở bất kỳ giai đoạn:

docker rm dbvol 

tham khảo:

+0

Cảm ơn bạn đã trả lời. Tôi nhận thức được nguyên tắc "data container", nhưng tôi không biết làm thế nào tôi sẽ sử dụng nó kết hợp với kịch bản Dockerfile? Tôi muốn tạo một cơ sở dữ liệu và thực hiện một số bổ sung và thay đổi nó trong kịch bản lệnh. – Mikkel

+3

@Mikkel Sau đó lấy dockerfile được sử dụng bởi Tutum và chạy nó cục bộ để tạo ra hình ảnh của riêng bạn. Sử dụng khối lượng cục bộ cho dữ liệu cũng hiệu quả hơn rất nhiều từ quan điểm hiệu năng (Aufs chậm). Mẫu chứa dữ liệu đơn giản là một mẹo hữu ích để đảm bảo khối lượng dữ liệu không bị xóa với vùng chứa (khối lượng chỉ bị xóa khi tất cả các tham chiếu vùng chứa đã biến mất) –

+0

Tôi cũng đã tự mình kết luận hình ảnh). Tôi chỉ tự hỏi nếu có một cách để "undeclare" một khối lượng. Nếu bạn đăng đề xuất xây dựng hình ảnh của riêng mình làm câu trả lời, tôi sẽ đánh dấu nó là câu trả lời đúng. – Mikkel

Các vấn đề liên quan