2017-04-14 5 views
0

최근에 도커에 대한 작업을 시작했습니다. 나는 도커 이미지를 다운로드했고 로컬에서 해당 이미지로 폴더 내용을 복사 할 수 있도록 이미지를 변경하거나 이미지의 모든 파일을 편집 할 수 있도록 변경하려고합니다.도커 이미지 수정

어떻게 든 이미지를 추출 할 수 있다면 변경하고 하나의 이미지를 만들 수있을 것이라고 생각했습니다. 그런 식으로 작동하는지 확실하지 않습니다. 옵션을 찾으려고했지만 유망한 솔루션을 찾을 수 없었습니다.

이미지에 대한 현재 Dockerfile는 다음과 같이 다소이다

FROM abc/def 
MAINTAINER Humpty Dumpty <@hd> 


RUN sudo apt-get install -y vim 

ADD . /home/humpty-dumpty 
WORKDIR /home/humpty-dumpty 
RUN cd lib && make 

CMD ["bash"] 

참고 : - 난 단지 기존의 이미지를 변경하는 쉬운 깨끗한 방법을 찾고 오전에 새로운 이미지를 만들 수 없습니다 변화들.

답변

0

기존의 도커 이미지를 변경할 수 없기 때문에 원래 도커 이미지를 기반으로 새 도커 이미지 용 도커 파일을 만들어 새로운 이미지의 로컬 테스트 폴더를 포함하도록 수정했습니다. 이 링크 Build your own image - Docker Documentation

FROM abc/def:latest 

도움이되었다 고정 표시기 파일에 위의 라인은 이미지의 기반이되는 이미지 도커를 알려줍니다.그래서, 부모 이미지의 내용은,

마지막으로 새로운 이미지로 복사 로컬 드라이브에 테스트 폴더를 포함에 대한 내 고정 표시기 파일

COPY test /home/humpty-dumpty/test 

의 명령 아래에 추가하고 테스트 폴더가 그 새로운에서 추가되었다된다 영상.

다음은 기존 이미지에서 새 이미지를 만드는 데 사용되는 도커 파일입니다.

FROM abc/def:latest 

# Extras 
RUN sudo apt-get install -y vim 

# copies local folder into the image 
COPY test /home/humpty-dumpty/test 

업데이트 : - 실행중인 고정 표시기 이미지에서 파일을 편집 할, 우리는

vim <filename> 

이제 위의 고정 표시기 파일을 통해 설치 정력 편집기를 사용하여 해당 파일을 열 수 있습니다, Vim은 명령이 될 수 있습니다 파일을 편집하고 저장하는 데 사용됩니다.

1

기존 이미지는 변경하지 않으며 이미지는 체크섬으로 표시되며 읽기 전용으로 간주됩니다. 이미지를 사용하는 컨테이너는 파일 시스템의 동일한 파일을 가리키고 컨테이너의 RW 레이어를 추가하므로 변경되지 않은 이미지에 의존합니다. 레이어 캐싱은이 종속성을 추가합니다.

계층화 된 파일 시스템 및 캐싱으로 인해 하나의 폴더 추가만으로 새 이미지를 만드는 경우 새 이미지의 전체 복사본이 아닌 추가 된 레이어 만 추가됩니다. 따라서 쉽고/깨끗한/올바른 방법은 Dockerfile을 사용하여 새 이미지를 만드는 것입니다.

+0

오크 크 (Ohkk ...) 이러한 이미지는 수정할 수 없습니다. 도커 이미지를 다운로드 할 때 이러한 이미지가 가리키는 구조가 없습니다. 그래서 내가 가지고있는 유일한 방법은 새로운 이미지를 만드는 것입니다. 그리고 파일 편집에도 똑같이 적용됩니다. – qwerty

+0

이미지는 ID (체크섬)로 참조됩니다. 태그는 ID를 가리키고 여러 태그가 동일한 ID를 가리킬 수 있으며 우분투와 같은 태그를 가리킬 수 있습니다. 최신 태그는 원하는 이미지가있는 ID를 가리킬 수 있습니다. – BMitch

2

우선, 다른 이미지를 어지럽히는 것이 좋습니다. 자신 만의 것을 만들 수 있다면 더 좋을 것입니다. 앞으로 나아가려면 copy 명령을 사용하여 호스트 컴퓨터의 폴더를 도커 이미지에 추가 할 수 있습니다.

COPY <src> <dest> 

유일한주의 사항은 <src>입니다. path는 빌드 컨텍스트 내에 있어야합니다. 도커 빌드의 첫 번째 단계는 컨텍스트 디렉토리 (및 하위 디렉토리)를 docker 데몬에 보내므로 복사 할 수 없습니다 (../something /something).

FROM abc/def 
MAINTAINER Humpty Dumpty <@hd> 


RUN sudo apt-get install -y vim 

// Make sure you already have /home/humpty-dumpty directory 
// if not create one 
RUN mkdir -p /home/humpty-dumpty 


COPY test /home/humpty-dumpty/ // This will add test directory to home/humpty-dumpty 
WORKDIR /home/humpty-dumpty 
RUN cd lib && make 

CMD ["bash"] 
1

나는 당신이 변경 사항을 적용 후 고정 표시기 이미지에서 구축하고있는 container을 변경할 수있는 docker cp 명령을 사용할 수 있다고 생각합니다. 여기

가 기준이며, 고정 표시기의 CP에 대한

가이드 : 고정 표시기에 대한 https://docs.docker.com/engine/reference/commandline/cp/

가이드 커밋 : 당신이 변경할 수 없습니다 만, 그래서 https://docs.docker.com/engine/reference/commandline/container_commit/

기억 docker image는 준비가되어 있습니다. 유일한 방법은 도커 파일을 수정하고 이미지를 다시 만들지 만이 경우에는 데이터가 손실됩니다 (docker volume에 마운트되지 않은 경우). 그러나 container을 변경할 수 있으며 준비가되지 않았습니다.