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

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

docker run a8asd8f9asdf0

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

docker start

하다?

매뉴얼에는

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



답변

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

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

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

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

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


답변

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

docker run문서는 언급을한다 :

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

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

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


답변

예를 들어 설명 :

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

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

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

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

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


답변

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

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

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


답변

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.


답변