docker run : --rm을 사용하는 이유 (docker newbie)


104

나는 처음으로 도커를 시도하고 있으며 아직 "정신적 모델"이 없습니다. 총 초보자.

내가보고있는 모든 예제에는 --rm실행할 플래그 가 포함되어 있습니다.

docker run -it --rm ...
docker container run -it --rm ...

질문:

이러한 명령에 --rm플래그가 포함 된 이유는 무엇 입니까? 좋은 내용이 들어있는 컨테이너를 설정하거나 다운로드하는 문제를 겪게된다면 왜 제거해야할까요? 다시 사용하기 위해 보관하고 싶습니다.

그래서 나는 도커에 대한 잘못된 생각을 알고 있습니다.


5
--rmdocker run다운로드 한 이미지의 기반이 아닌 중지 된 컨테이너 ( 생성 한 컨테이너)를 제거합니다 .
Ry-

docker run --help유용해야합니다. 당신이 제거하지 않을 경우 용기를 , 당신은 그것을 전달할 수 있습니다
indapublic

1
그것은해야 --rm컨테이너가 종료하고 컨테이너에서 물건을 제거하는 것을 의미하지 않을 때 자동으로 파일 시스템을 컨테이너를 정리하고 제거 할 수 있습니다.
Mahattam

2
컨테이너를 다운로드하지 않고 이미지를 다운로드합니다. 이미지와 용기 사이의 차이를 알아 보려면 여기를 읽어 docs.docker.com/engine/docker-overview/#docker-objects을
axiac

답변:


94

컨테이너는 실행하는 데 사용하는 이미지의 인스턴스 일뿐입니다. 컨테이너화 된 앱을 만들 때 마음의 상태는 예를 들어 신선하고 깨끗한 우분투 컨테이너를 가져 와서 원하는 앱과 구성을 다운로드 한 다음 실행하는 것이 아닙니다.

컨테이너를 애플리케이션의 인스턴스로 취급해야하지만 애플리케이션은 이미지에 포함됩니다. 적절한 사용법은 모든 파일, 구성, 환경 변수 등을 이미지에 포함하는 사용자 지정 이미지를 만드는 것입니다. Dockerfile에 대해 자세히 알아보고 여기에서 수행 방법

일단 그렇게하면 모든 것을 포함하는 이미지가 있고 애플리케이션을 사용하려면 적절한 포트 설정이나 기타 동적 변수를 사용하여 이미지를 실행하기 만하면됩니다. docker run <your-image>

--rm플래그를 사용하여 컨테이너를 실행 하는 것은 매우 짧은 시간 동안 사용하는 컨테이너에 유용합니다. 예를 들어 컨테이너 내부에서 애플리케이션을 컴파일하거나 작동하는 것을 테스트하고 나면 그 컨테이너가 수명이 짧다는 것을 알고 있습니다. Docker 데몬에게 실행이 완료되면 관련된 모든 것을 지우고 디스크 공간을 절약하십시오.


환경 변수를 docker run에 전달하는 것이 더 나은 대안입니다. 이렇게하면 다른 구성 (예 : 프로덕션 대 사전 프로덕션)으로 시작할 수 있습니까?
SCO

테스트 환경 대 생산성이 있지만, 각 ENV 다른 설정으로, 당신은 아마 ENV는 분리하고 같은 이미지에서 실행할 수있는 응용 프로그램을 얻을 바르 사용할 것이 좋은 예이다
buddy123

--rm사용자가 터미널 창을 닫을 때 사용하기 시작한 컨테이너를 자동으로 삭제하는 방법이 있습니까? 즉 exit, 컨테이너 쉘에서 의도적으로 실행하지 않고 터미널 GUI 창을 닫습니다. 이 경우 컨테이너가 삭제되지 않는 것으로 나타났습니다.
venkrao

20

--rm작업이 완료된 후 컨테이너를 삭제해야 할 때 플래그 가 사용됩니다.

이것은 소규모 테스트 또는 POC 목적에 적합하며 집안일의 골칫거리를 줄여줍니다.


16

에서 https://docs.docker.com/engine/reference/run/#clean-up---rm

기본적으로 컨테이너의 파일 시스템은 컨테이너가 종료 된 후에도 유지됩니다. 이렇게하면 디버깅이 훨씬 쉬워지고 (최종 상태를 검사 할 수 있기 때문에) 기본적으로 모든 데이터를 유지합니다. 그러나 단기 포 그라운드 프로세스를 실행하는 경우 이러한 컨테이너 파일 시스템이 실제로 쌓일 수 있습니다. 대신 Docker가 컨테이너를 자동으로 정리하고 컨테이너가 종료 될 때 파일 시스템을 제거하도록하려면 --rm 플래그를 추가 할 수 있습니다.

간단히 말해서, 중지되거나 사용되지 않는 컨테이너로부터 호스트를 깨끗하게 유지하는 것이 유용합니다.


1

--rm실행중인 컨테이너에 연결할 때 데이터베이스 백업 또는 파일 복사와 같은 일부 작업을 수행 할 때 사용 합니다. 다음은 예입니다.

docker run -v $(pwd):/mnt --link app_postgres_1:pg --rm postgres:9.5 pg_dump -U postgres -h pg -f /mnt/docker_pg.dump1 app_db

위의 방법은 'app_postgres_1'이라는 실행중인 컨테이너를 연결하고 백업을 생성합니다. 백업 명령이 완료되면 컨테이너가 완전히 삭제됩니다.

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