Docker 분리 모드


84

Docker 세계에서 분리 모드는 무엇입니까? 이 기사 Link를 읽었 지만 분리 모드가 무엇을 의미하는지 정확히 설명하지 않습니다.

답변:


141

-d옵션을 사용하여 분리 모드에서 Docker 컨테이너를 시작할 수 있습니다 . 따라서 컨테이너가 시작되고 백그라운드에서 실행됩니다. 즉, 컨테이너를 시작하고 시작 후 다른 명령에 콘솔을 사용할 수 있습니다.

분리 모드의 반대는 전경 모드입니다. -d옵션을 사용하지 않는 경우 기본 모드 입니다. 이 모드에서 실행하는 데 사용하는 콘솔은 docker run표준 입력, 출력 및 오류에 연결됩니다. 즉, 콘솔이 컨테이너의 프로세스에 연결되어 있습니다.

분리 모드에서는 .NET을 사용하여 도커 컨테이너의 표준 출력을 따를 수 있습니다 docker logs -f <container_ID>.

두 가지 옵션을 모두 시도하십시오. 컨테이너를 실행하려면 항상 분리 모드를 사용합니다. 좀 더 명확하게 설명 할 수 있기를 바랍니다.


안녕, 당신이 말한 것에 대해 혼란스러워하는 것-그리고 도커 문서에서 말하는 것은 "당신은 ... 다른 명령을 위해 시작 후에 hte 컨테이너를 사용할 수있다"입니다. 분명히 포 그라운드에서 -it이 있고 프롬프트에있는 경우 다른 명령에 컨테이너를 사용하고 있습니다. 여전히 -d의 정의를 찾고 있습니다 ...
Brian Bulkowski 2011

3
@BrianBulkowski-이 답변이 전혀 말하는 것이 아닙니다. "... 시작 후 콘솔 을 사용할 수 있습니다 ..."라는 문구 는 Docker 컨테이너가 백그라운드에서 실행되는 동안 Docker 컨테이너를 시작한 터미널을 일반 셸로 계속 사용할 수 있음을 의미합니다.
쓸모 없음

로그 출력을 파일로 파이프 할 수도 있습니까? docker logs -f <container_ID>를 호출하면 터미널이 연속해서 한 줄만 인쇄하면서 미친 듯이 실행됩니다.
Jürgen K.

@ JürgenK. 나는 당신이 단순히 할 수 있다는 것을 알았다 docker logs -f [container_ID] > logs.txt. 작동하지 않으면 아래 @BMitch가 제안한대로 도커 컨테이너를 시작할 때 '-it'플래그를 추가해보십시오.
Sanlok Lee

@Sanlok Lee. 감사. Docker 로그 파일의 줄 번호에 제한을 설정할 수 있습니까? 크기가 조용히 빠르게 증가합니다. 정리해야합니다
Jürgen K.

29

docker 명령 줄의 detach 옵션은 docker 클라이언트 ( docker)가 서버 ( dockerd)에 요청한 다음 해당 요청이 서버에서 계속되는 동안 클라이언트가 종료 됨을 나타냅니다 . 혼란의 일부는 docker가 단일 프로세스처럼 보이며 실제로는 클라이언트가 모든 명령을 서버로 보내는 REST API의 씬 프론트 엔드 인 클라이언트 / 서버 애플리케이션이라는 점일 수 있습니다.

를 사용 docker container run --detach하면 컨테이너가 생성되고 서버가 성공하면 컨테이너 ID로 응답하며 다른 명령을 자유롭게 실행할 수있는 동안 컨테이너가 서버에서 계속 실행됩니다. 다른 명령을 계속 실행하는 동안 백그라운드에서 시작하려는 서버 (예 : nginx)에 자주 사용됩니다. --interactive-tty옵션 (종종 약어 -it)을 사용하여 컨테이너를 구성 하고 나중에 a docker container attach를 실행하여 이미 실행중인 컨테이너에 연결할 수 있습니다. (로 실행되는 컨테이너에 연결할 때까지 -itd컨테이너가를 통과 한 경우 즉시 종료를 트리거하는 입력 끝을 보는 대신 stdin에서 읽는 모든 시도가 중단됩니다 -d.)

분리 옵션없이 실행하는 경우 클라이언트는 컨테이너가 생성 된 후 즉시 연결 API 호출을 실행하므로 출력을보고 선택적으로 컨테이너에서 실행중인 프로세스에 입력을 제공 할 수 있습니다. 컨테이너가 대화 형 (예 :)을 실행하는 경우 유용합니다 /bin/bash.

다른 몇 가지 명령 docker-compose up -d은 전체 프로젝트를 시작하고 백그라운드에서 서버에서 실행되도록하는 것을 포함하여 분리 옵션을 허용합니다 . 또한 docker service서비스의 대상 상태를 생성하거나 업데이트하기 위해 서버에 변경 사항을 제출 한 후 분리되는 명령 도 많이 있습니다. 분리하지 않으면 클라이언트는 서비스의 현재 상태가 대상 상태와 일치 할 때까지 기다릴 것입니다. 배포 진행 상황. 와 주 docker service명령, 당신은 통과 할 수 있습니다 --detach=false부착 된 상태로 유지, 동작은 버전에 따라 지난 한 해 동안 변경되었습니다.


1
IMO, 연결된 컨테이너에서 대화식으로 분리하는 방법을 언급하는 것도 의미가 있습니다 ( CTRL-p CTRL-q , --detach-keys)
Leon

@Leon은 좋은 충고를하지만 그것이 작동하려면와 (일명 ) 둘 다 --interactive와 함께 컨테이너에 연결되어 있는지 확인하십시오 . --tty-it
BMitch

1
감사합니다 @BMitch! 이제 이해할 것 같아요.
VSO

1
@BMitch를 멋지게 설명했습니다. 문서가 이렇게 철저 할 수 있기를 바랍니다!
Ravi Tiwari

-6
docker run -d -t ubuntu:14.04

docker run-docker 이미지에서 docker 컨테이너로 인스턴스를 만듭니다. (로컬에서 이미지를 사용할 수없는 경우 Docker 허브에서 가져옴) ubuntu-이미지 이름

14.04-태그

-d, --detach-분리 모드

-t, --tty-의사 TTY 할당


13
이것은 질문에 대한 답 이 아닙니다 .
0xc0de
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.