programing

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

css3 2023. 11. 1. 22:30

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

컨테이너를 시작하기 위해 하는 일은 다음과 같습니다.

docker run a8asd8f9asdf0

이 경우 다음과 같은 기능이 있습니다.

docker start

하다뇨?

설명서에는 다음과 같이 나와 있습니다.

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

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

  1. 실행: 이미지의 새 컨테이너를 만들고 컨테이너를 실행합니다.동일한 이미지의 클론 N개를 생성할 수 있습니다.명령은 다음과 같습니다.docker run IMAGE_ID 아닌 docker run CONTAINER_ID

enter image description here

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

enter image description here

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

의사는 다음과 같이 언급합니다.

docker runcommand는 먼저 지정된 이미지 위에 쓰기 가능한 컨테이너 레이어를 만든 다음 지정된 명령을 사용하여 시작합니다.

즉, 도커 은 API와 동등합니다./containers/create그리고나서/containers/(id)/start.

기존 컨테이너를 실행하지 않고 도커 1.3 이후로 도커를 실행합니다.
종료된 컨테이너를 다시 시작할 수 있습니다.

예를 들어 설명:

컴퓨터에 게임(iso) 이미지가 있다고 가정합니다.

당신이run(이미지를 가상 드라이브로 마운트), 가상 드라이브에 있는 모든 게임 콘텐츠와 함께 가상 드라이브가 생성되고 게임 설치 파일이 자동으로 실행됩니다.[도커 이미지 실행 - 컨테이너 생성 후 시작]

하지만 당신이stop(도커 중지와 유사) 가상 드라이브는 여전히 존재하지만 모든 프로세스를 중지합니다.[삭제되지 않을 때까지 용기가 존재하므로]

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

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

runcommand는 이미지에서 컨테이너를 생성한 다음 이 컨테이너에 대한 루트 프로세스를 시작합니다.실행 중run --rm플래그는 나중에 쓸모없는 죽은 컨테이너를 제거하는 수고를 덜어줄 것이고 당신이 존재하는 것을 무시할 수 있게 해줄 것입니다.docker start그리고.docker remove다같이.

enter image description here

run명령어는 다음과 같은 몇 가지 작업을 수행합니다.

docker run --name dname image_name bash -c "whoami"
  1. 이미지에서 컨테이너를 만듭니다.이 시점에서 컨테이너에는 ID가 있고, 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'"

그럼 왜 필요하죠?이전 토막글에서 endless 명령으로 시작한 이 미해결 컨테이너를 멈추려면tail -f /dev/null.

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

나 같은 사람들이 섞이는 빠르고 더러운 공식일 뿐입니다.run그리고.start수시로:

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

명령어 이름을 "run" 대신 "new"로 지정하는 것이 더 현명했을 것입니다.

실행은 기존(또는 다운로드 가능) 이미지의 컨테이너 인스턴스를 만들고 시작합니다.

언급URL : https://stackoverflow.com/questions/34782678/difference-between-running-and-starting-a-docker-container