Docker 컨테이너 실행과 시작의 차이점


307

실제로 컨테이너 를 시작 하려면 다음을 수행하십시오.

docker run a8asd8f9asdf0

그렇다면, 무엇을 하는가 :

docker start

하다?

매뉴얼에는

하나 이상의 중지 된 컨테이너 시작


101
실행 = 작성 + 시작
Fumisky Wells

4
OP에도 '실행'도 포함
되었으면


@MonicaHeddneck도 커가 execute있습니까?
Koray Tugay

이전 에이 컨테이너를 중지 한 경우 컨테이너 시작 을 사용 합니다 . ealier 가이 이미지의 컨테이너를 제거한 경우 이미지에 실행 을 사용 합니다 . 이것이 내가 생각하는 기본 사용법입니다.
CodeSlave

답변:


350

이것은 매우 중요한 질문이며 대답은 매우 간단하지만 근본적입니다.

  1. 실행 : 이미지의 새 컨테이너를 만들고 컨테이너를 실행합니다. 동일한 이미지의 N 복제본을 만들 수 있습니다. 명령은 다음 같습니다. docker run IMAGE_ID docker run CONTAINER_ID

여기에 이미지 설명을 입력하십시오

  1. 시작 : 이전에 중지 된 컨테이너를 시작합니다. 예를 들어, 명령을 사용하여 데이터베이스를 중지 한 경우 명령을 사용 docker stop CONTAINER_ID하여 동일한 컨테이너를 다시 시작할 수 docker start CONTAINER_ID있으며 데이터와 설정이 동일합니다.

여기에 이미지 설명을 입력하십시오


1
데이터가 지속 되려면 중지 된 컨테이너에 대해 볼륨을 만들어야합니까?
로건 필립스

@LoganPhillips 컨테이너의 기본 통합 파일 시스템 계층에 기록 된 파일과 볼륨에 기록 된 파일 의 수명주기 차이 는 다음과 같습니다. 컨테이너를 제거하면 컨테이너의 통합 파일 시스템 계층 데이터가 항상 손실됩니다 ( docker rm container_id). 반면 -v에, 명령 행에 옵션이 명시 적으로 제공 되지 않으면 볼륨 데이터는 컨테이너 제거 후에도 유지 됩니다. 호스트 시스템의 볼륨 위치를 직접 검사 할 수 있습니다. 이 기사 참조
Stphane

프로세스 & 에 대해 run명령 줄 끝에 필요 합니까? 나는 countinous (24 시간) 서비스로 필요
피터 크라우스에게

그렇다면 "docker create"의 목적은 무엇입니까? 언제 어떻게 사용됩니까?
조셉 Gagnon

100
  • run이미지를 실행
  • start컨테이너를 시작합니다 .

docker run문서는 언급을한다 :

docker run명령은 먼저 생성 지정된 이미지 위에 기록 가능한 콘테이너 층 후 시작 지정된 명령을 사용한다.

즉 고정 표시기의 인 실행이 API에 해당합니다 /containers/create다음 /containers/(id)/start.

당신은 당신이 그것 (고정 표시기 1.3 이후) 간부 고정 표시기, 기존의 컨테이너를 실행하지 마십시오 . 종료 된 컨테이너를 다시 시작할
수 있습니다 .


@Tarik 대화식 프로세스 -idocker run위해 추가 할 필요가 없습니까? 도커 실행에는 컨테이너를 실행하기위한 이미지가 필요합니다.
VonC

10
좀 더 정교한 답변을 작성할 수있는 여지가있는 것 같습니다. 대답은 그다지 설명되어 있지 않습니다.
qartal

4
나를 위해 다음 질문은 뭐죠 - 더 - 차이 - - 사이 - 컨테이너 및-AN-이미지였다 stackoverflow.com/questions/21498832/...
알렉스 Punnen

18

예를 들어 설명 :

컴퓨터에 게임 (iso) 이미지가 있다고 가정하십시오.

당신이 할 때 run(가상 드라이브로 이미지를 마운트), 가상 드라이브가 모든 가상 드라이브에 게임 내용과 게임 설치 파일이 만들어집니다 자동으로 시작됩니다. [Docker 이미지 실행-컨테이너를 만든 다음 시작하십시오.]

그러나 stop(도커 중지와 유사) 가상 드라이브는 여전히 존재하지만 모든 프로세스를 중지합니다. [컨테이너가 삭제되지 않을 때까지 존재 함]

그리고 당신이 할 때 start(도커 시작과 유사) 가상 드라이브에서 게임 파일이 실행을 시작합니다. [기존 컨테이너 시작]

이 예에서-게임 이미지는 Docker 이미지이고 가상 드라이브는 컨테이너입니다.


8

daniele3004 의 답변은 이미 꽤 좋습니다.

그냥 신속하고 더러운 최대 믹스 나 같은 사람을위한 공식 runstart수시로 :

docker run [...]= docker pull [...]+docker start [...]


2
이것은 사실이 아닙니다. 공식 문서에 따르면 "...docker run is equivalent to the API /containers/create then /containers/(id)/start.(source : docs.docker.com/engine/reference/commandline/run )
sshh

2

run명령은 이미지에서 컨테이너를 만든 다음이 컨테이너에서 루트 프로세스를 시작합니다. run --rm플래그 와 함께 실행하면 나중에 쓸모없는 죽은 컨테이너를 제거하는 문제가 발생하지 docker start않으며 존재하지 않고 docker remove완전히 무시할 수 있습니다 .

여기에 이미지 설명을 입력하십시오

run 명령은 몇 가지 다른 작업을 수행합니다.

docker run --name dname image_name bash -c "whoami"
  1. 이미지에서 컨테이너를 만듭니다. 이 시점에서 컨테이너는 ID를 가지며 이름이 주어지면 이름이 나타날 수 있습니다.docker ps
  2. 컨테이너의 루트 프로세스를 시작 / 실행합니다. 위의 코드에서 실행 bash -c "whoami"됩니다. docker run --name dname image_name컨테이너를 실행하라는 명령없이 실행하면 즉시 중지 상태가됩니다.
  3. 루트 프로세스가 완료되면 컨테이너가 중지됩니다. 이 시점에서 그것은 거의 쓸모가 없습니다. 더 이상 아무것도 실행하거나 컨테이너를 부활시킬 수 없습니다. 기본적으로 중지 상태를 벗어나는 두 가지 방법이 있습니다. 컨테이너를 제거하거나 중지 된 컨테이너에서 검사 점 (예 : 이미지)을 만들어 다른 것을 실행합니다. docker remove같은 이름으로 컨테이너를 시작하기 전에 실행 해야합니다.

컨테이너가 자동으로 정지되면 어떻게 제거합니까? 명령에--rm플래그를추가하십시오run.

docker run --rm --name dname image_name bash -c "whoami"

단일 컨테이너에서 여러 명령을 실행하는 방법은 무엇입니까? 루트 프로세스가 죽지 않도록합니다. --detached플래그로 시작할 때 쓸모없는 명령을실행 한 다음 "execute"를 사용하여 실제 명령을 실행하면됩니다.

docker run --rm -d --name dname image_name tail -f /dev/null
docker exec dname bash -c "whoami"
docker exec dname bash -c "echo 'Nnice'"

왜 우리는 필요 docker stop합니까? 끝없는 명령으로 이전 스 니펫에서 시작한이 느린 컨테이너를 중지합니다tail -f /dev/null.

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