2016-09-04 2 views
1

그것은 당신 run 기본 이미지가 커밋 파생 된 이미지에서 유지되지 않습니다 경우 (-v) 사용 바인딩에 볼륨처럼 보이는 볼륨 바인딩 옵션이어야한다 파생 된 이미지가 run 될 때마다 전달됩니다.도커 볼륨 바인딩 : 파생 상품 이미지 대 자료 이미지

예 (로컬/시험)

docker commit john_doe local/test 

새로운 이미지 커밋


docker run -it -v /opt/hostappsdir:/apps ubuntu 

하는 용기 변경할 (john_doe 명명) 그런 다음 호스트 디렉토리에있는 파일을 나열하지 않습니다. /opt/hostappsdir

docker run --rm local/test ls /apps 

그러나 이것은 내가 옵션마다 바인딩 볼륨을 통과 피할 수있는 방법이 있나요 그것은

docker run --rm -v /opt/hostappsdir:/apps local/test ls /apps 

합니까?

+0

내 질문에 대해 싫어하는 사람이 문제가 무엇인지 설명하는 것이 도움이됩니다. – devlent

+0

확인. 'commit' 명령의 구문 오류를 수정했습니다. 답변을 기다리는 중 ... – devlent

+0

나는 왜이 질문이 투표를 거쳤는지 전혀 알지 못합니다. 합법적 인 논쟁과 이에 대한 명확한 질문이므로 –

답변

3

볼륨은 정의 상 컨테이너의 일부가 아니므로 컨테이너에서 이미지를 만들 때 커밋하는 레이어의 일부가 아닙니다.

예를 들면 다음과 같습니다. 특정 구성을 추가하고, 확장을 추가하고, 일부 패키지를 추가하고, 기본 이미지에서 항상 파생되어야하며, 형식화 된 변경이 아닌 임의의 "커밋"만하지 않아야합니다. 즉 위험 더 이상 같은 결과를 매번 생산하지 않습니다 - 나는 나 자신 "커밋 이미지에 컨테이너를 변경"의 아이디어를 좋아하지 않는다 :

from <baseimage> 
COPY yourconfig /etc/somewhere 
COPY yourasset /var/www 

RUN sed ... \ // change some configuration 
    && apt-get update && apt-get install curl // some packages 

힌트와 Dockerfile 만들기 실제로 변경 한 내용을 공식화하지 않습니다. 힘든 시간을 보내십시오. 귀하가 모르는 사이, 기본 이미지의 업데이트로 인해 이미지를 업데이트 할 것입니다. 그리고 당신이 작성한 이미지 일지라도, 그것을 다시 할 수있는 많은 노력이 필요합니다. 다시.

+0

감사합니다. 답안의 첫 줄은 내가 원했던 대답입니다. 내가 말한 변경 사항은 apt 패키지를 추가하기위한 것입니다. 코드 변경은 컨테이너에 바인드 된 호스트 디렉토리에서만 수행됩니다. – devlent

+0

나는 바위 같은 곳에서 살았을 것이다. 그러나 나는 단지 docker-compose에 대해 배웠다. .. 와아! 이것은 제가 기대했던 것과 도커 - 작성한 것입니다. 제가 작성한 모든 bash 스크립트를 완전히 중복 시켰습니다! – devlent