Chế độ tách rời Docker


84

Chế độ tách rời trong thế giới docker là gì? Tôi đọc liên kết bài viết này , nhưng nó không giải thích chính xác chế độ tách rời nghĩa là gì.

Câu trả lời:


141

Bạn có thể khởi động bộ chứa docker ở chế độ tách rời với một -dtùy chọn. Vì vậy, vùng chứa khởi động và chạy trong nền. Điều đó có nghĩa là, bạn khởi động vùng chứa và có thể sử dụng bảng điều khiển sau khi khởi động cho các lệnh khác.

Đối lập với chế độ tách rời là chế độ tiền cảnh. Đó là chế độ mặc định, khi -dtùy chọn không được sử dụng. Trong chế độ này, bảng điều khiển bạn đang sử dụng để thực thi docker runsẽ được gắn với đầu vào, đầu ra và lỗi tiêu chuẩn. Điều đó có nghĩa là bảng điều khiển của bạn được gắn vào quy trình của vùng chứa.

Trong chế độ tách rời, bạn có thể theo dõi đầu ra tiêu chuẩn của bộ chứa docker của bạn với docker logs -f <container_ID>.

Chỉ cần thử cả hai tùy chọn. Tôi luôn sử dụng chế độ tách rời để chạy các vùng chứa của mình. Tôi hy vọng tôi có thể giải thích nó rõ ràng hơn một chút.


Xin chào, điều khó hiểu về những gì bạn đã nói - và tài liệu của docker nói là "bạn ... có thể sử dụng thùng chứa hte sau khi khởi động cho các lệnh khác". Rõ ràng, ở phía trước, bạn đang sử dụng vùng chứa cho các lệnh khác nếu bạn có -it và bạn đang ở một dấu nhắc. Vẫn đang tìm kiếm một định nghĩa của -d ...
Brian Bulkowski

3
@BrianBulkowski - đó không phải là điều mà câu trả lời này nói. Cụm từ "... có thể sử dụng bảng điều khiển sau khi khởi động ..." có nghĩa là thiết bị đầu cuối mà từ đó bạn khởi chạy bộ chứa docker vẫn có thể sử dụng như một trình bao thông thường trong khi bộ chứa docker chạy trong nền.
Vô dụng

bạn cũng có thể chuyển đầu ra nhật ký thành một tệp không? Nếu tôi gọi nhật ký docker -f <container_ID>, thiết bị đầu cuối của tôi đang chạy in điên cuồng chỉ hết dòng này đến dòng khác.
Jürgen K.

@ JürgenK. Tôi phát hiện ra rằng bạn có thể đơn giản làm docker logs -f [container_ID] > logs.txt. Nếu nó không hoạt động, hãy thử thêm cờ '-it' khi khởi động vùng chứa docker theo đề xuất của @BMitch bên dưới.
Sanlok Lee

@Sanlok Lee. Cảm ơn. Có thể đặt giới hạn cho số dòng của tệp nhật ký docker không? Kích thước tăng yên tĩnh nhanh chóng, tôi cần phải làm rõ nó
Jürgen K.

29

Tùy chọn tách trên dòng lệnh docker chỉ ra rằng máy khách docker ( docker) sẽ thực hiện một yêu cầu đến máy chủ ( dockerd), và sau đó máy khách sẽ thoát trong khi yêu cầu đó tiếp tục trên máy chủ. Một phần của sự nhầm lẫn có thể là do docker trông giống như một quy trình duy nhất, trong thực tế, nó là một ứng dụng máy khách / máy chủ trong đó máy khách chỉ là một giao diện người dùng mỏng trên API REST để gửi mọi lệnh đến máy chủ.

Với a docker container run --detach, điều này có nghĩa là vùng chứa sẽ được tạo, máy chủ sẽ phản hồi bằng id vùng chứa nếu thành công và vùng chứa sẽ tiếp tục chạy trên máy chủ trong khi bạn có thể tự do chạy các lệnh khác. Điều này thường được sử dụng cho một máy chủ (ví dụ: nginx) bạn muốn khởi động ở chế độ nền trong khi bạn tiếp tục chạy các lệnh khác. Lưu ý rằng bạn vẫn có thể định cấu hình vùng chứa với các tùy chọn --interactive-tty(thường được viết tắt -it) và sau đó chạy a docker container attachđể kết nối với một vùng chứa đã chạy. (Lưu ý, cho đến khi bạn đính kèm vào vùng chứa đang chạy cùng -itd, bất kỳ nỗ lực nào của vùng chứa để đọc từ stdin sẽ bị treo, thay vì nhìn thấy kết thúc của đầu vào thường kích hoạt thoát ngay lập tức nếu bạn vừa đi qua -d.)

Nếu bạn chạy mà không có tùy chọn tách, ứng dụng khách sẽ ngay lập tức chạy lệnh gọi API đính kèm sau khi vùng chứa được tạo để bạn có thể xem đầu ra và tùy chọn cung cấp đầu vào cho quá trình đang chạy trên vùng chứa. Điều này hữu ích nếu vùng chứa của bạn đang chạy thứ gì đó tương tác (ví dụ /bin/bash:).

Một số lệnh khác cho phép tùy chọn tách, bao gồm tùy chọn docker-compose up -dsẽ bắt đầu toàn bộ dự án và để nó chạy trên máy chủ ở chế độ nền. Cũng có nhiều docker servicelệnh sẽ tách ra sau khi gửi thay đổi tới máy chủ để tạo hoặc cập nhật trạng thái đích của dịch vụ hoặc nếu bạn không tách ra, máy khách sẽ đợi cho đến khi trạng thái hiện tại của dịch vụ khớp với trạng thái đích và bạn có thể thấy tiến độ triển khai. Lưu ý với docker servicecác lệnh, bạn có thể phải vượt qua --detach=falseđể tiếp tục đính kèm, hành vi đã thay đổi trong năm qua tùy thuộc vào phiên bản của bạn.


1
IMO, cũng có ý nghĩa khi đề cập đến cách tách ra khỏi vùng chứa được đính kèm một cách tương tác ( CTRL-p CTRL-q , --detach-keys)
Leon

@Leon lời khuyên tốt, nhưng hãy đảm bảo rằng bạn được gắn vào vùng chứa có cả hai --interactive--tty(hay còn gọi là -it) để điều đó hoạt động.
BMitch

1
Cảm ơn @BMitch! Tôi nghĩ bây giờ tôi đã hiểu.
VSO

1
@BMitch được giải thích một cách độc đáo, ước gì tài liệu có thể giải thích cặn kẽ điều này!
Ravi Tiwari

-6
docker run -d -t ubuntu:14.04

docker run - Tạo một thể hiện từ hình ảnh docker làm vùng chứa docker. (nếu hình ảnh không có sẵn cục bộ, nó sẽ kéo từ trung tâm docker) ubuntu - Tên hình ảnh

14.04 - Thẻ

-d, --detach - Chế độ tách

-t, --tty - Phân bổ TTY giả


13
Đây không phải là một câu trả lời cho câu hỏi.
0xc0de
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.