docker run: tại sao sử dụng --rm (docker newbie)


101

Tôi đang thử docker lần đầu tiên và chưa có "mô hình tinh thần". Tổng số người mới bắt đầu.

Tất cả các ví dụ mà tôi đang xem đều có --rmcờ để chạy, chẳng hạn như

docker run -it --rm ...
docker container run -it --rm ...

Câu hỏi:

Tại sao các lệnh này bao gồm --rmcờ? Tôi sẽ nghĩ rằng nếu tôi gặp khó khăn khi thiết lập hoặc tải xuống vùng chứa có nội dung tốt trong đó, tại sao lại xóa nó? Tôi muốn giữ lại để sử dụng lại.

Vì vậy, tôi biết tôi có ý tưởng sai về docker.


4
--rmloại bỏ vùng chứa đã dừng (cái được docker runtạo) chứ không phải hình ảnh mà nó dựa trên (thứ bạn đã tải xuống).
Ry-

docker run --helpnên hữu ích. Nếu bạn không muốn xóa vùng chứa , bạn có thể chuyển nó
indapublic

1
nó phải có --rmvà nó tự động dọn dẹp vùng chứa và xóa hệ thống tệp khi vùng chứa thoát ra và không có nghĩa là xóa nội dung khỏi vùng chứa.
Mahattam

2
Bạn không tải xuống vùng chứa, bạn tải xuống hình ảnh. Đọc ở đây để tìm hiểu sự khác biệt giữa hình ảnh và vùng chứa: docs.docker.com/engine/docker-overview/#docker-objects
axiac

Câu trả lời:


92

Vùng chứa chỉ là một ví dụ của hình ảnh mà bạn sử dụng để chạy chúng. Lưu ý khi tạo một ứng dụng được chứa trong vùng chứa không phải bằng cách lấy một vùng chứa ubuntu mới, sạch và tải xuống các ứng dụng và cấu hình bạn muốn có trong đó, rồi để nó chạy.

Bạn nên coi vùng chứa như một bản sao của ứng dụng, nhưng ứng dụng của bạn được nhúng vào một hình ảnh. Cách sử dụng thích hợp sẽ là tạo một hình ảnh tùy chỉnh, nơi bạn nhúng tất cả các tệp, cấu hình, biến môi trường, v.v. của mình vào hình ảnh. Đọc thêm về Dockerfile và cách nó được thực hiện tại đây

Khi bạn đã làm điều đó, bạn có một hình ảnh chứa mọi thứ và để sử dụng ứng dụng của mình, bạn chỉ cần chạy hình ảnh với cài đặt cổng thích hợp hoặc các biến động khác, sử dụng docker run <your-image>

Chạy các vùng chứa với --rmcờ là tốt cho những vùng chứa mà bạn sử dụng trong thời gian rất ngắn trong khi chỉ để hoàn thành một việc gì đó, ví dụ: biên dịch ứng dụng của bạn bên trong một vùng chứa hoặc chỉ thử nghiệm một thứ gì đó mà nó hoạt động, và sau đó bạn biết nó là một vùng chứa tồn tại trong thời gian ngắn và bạn nói với daemon Docker của bạn rằng sau khi nó chạy xong, hãy xóa mọi thứ liên quan đến nó và tiết kiệm dung lượng đĩa.


Chuyển các biến môi trường để docker chạy có phải là một giải pháp thay thế tốt hơn không. Bằng cách này, bạn có thể bắt đầu với các cấu hình khác nhau (ví dụ: sản xuất so với tiền sản xuất)?
SCO

Prod vs môi trường thử nghiệm là một ví dụ điển hình, nơi bạn có lẽ sẽ muốn sử dụng env VAR để làm cho việc tách và nhận ứng dụng của bạn để chạy từ các hình ảnh tương tự, nhưng với các thiết lập khác nhau cho mỗi env
buddy123

Có cách nào để tự động xóa các vùng chứa được bắt đầu sử dụng --rmkhi người dùng đóng cửa sổ đầu cuối. tức là không cố tình chạy exittrong vỏ chứa mà chỉ đóng cửa sổ GUI của thiết bị đầu cuối. Tôi nhận thấy rằng các vùng chứa không bị xóa trong trường hợp này.
venkrao

20

Cờ --rmđược sử dụng khi bạn cần xóa vùng chứa sau khi tác vụ hoàn tất.

Điều này phù hợp cho các mục đích thử nghiệm nhỏ hoặc POC và giúp tiết kiệm công sức cho việc trông nhà.


16

từ https://docs.docker.com/engine/reference/run/#clean-up---rm

Theo mặc định, hệ thống tệp của vùng chứa vẫn tồn tại ngay cả sau khi vùng chứa thoát. Điều này làm cho việc gỡ lỗi dễ dàng hơn rất nhiều (vì bạn có thể kiểm tra trạng thái cuối cùng) và bạn giữ lại tất cả dữ liệu của mình theo mặc định. Nhưng nếu bạn đang chạy các quy trình tiền cảnh ngắn hạn, các hệ thống tệp vùng chứa này thực sự có thể chồng chất lên nhau. Thay vào đó, nếu bạn muốn Docker tự động dọn dẹp vùng chứa và xóa hệ thống tệp khi vùng chứa thoát, bạn có thể thêm cờ --rm

Nói cách nhỏ: thật hữu ích khi giữ cho máy chủ sạch sẽ khỏi các vùng chứa đã dừng và không được sử dụng.


1

Tôi sử dụng --rmkhi kết nối với các vùng chứa đang chạy để thực hiện một số hành động như sao lưu cơ sở dữ liệu hoặc sao chép tệp. Đây là một ví dụ:

docker run -v $(pwd):/mnt --link app_postgres_1:pg --rm postgres:9.5 pg_dump -U postgres -h pg -f /mnt/docker_pg.dump1 app_db

Ở trên sẽ kết nối vùng chứa đang chạy có tên 'app_postgres_1' và tạo bản sao lưu. Khi lệnh sao lưu hoàn tất, vùng chứa sẽ bị xóa hoàn toàn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.