Docker 용 기본 이미지를 어떻게 만들 수 있습니까?


97

Docker 문서 에 따르면 자체 이미지를 빌드하려면 항상 FROM지침을 사용하여 기본 이미지를 지정해야합니다 .

당연히 Docker index 에서 선택할 수있는 이미지가 많이 있지만 직접 만들고 싶다면 어떻게해야합니까? 가능합니까?

base올바르게 이해하면 이미지 가 Ubuntu에서 빌드되고 Debian 이미지로 실험하고 싶습니다. 또한 Docker가 어떻게 작동하는지 정말로 이해하고 싶고 base이미지는 여전히 저에게 블랙 박스입니다.


편집 : 기본 이미지 생성에 대한 공식 문서


상관 없습니다. :-) 여기에있는 질문은 사이트 가이드 라인에 따라 주제와 관련이 있어야합니다. 도움말 센터둘러보기 페이지 에서 다룹니다 . (링크는 Docker 컨테이너 개발자에게도 관련된 것 같습니다.) 자신의 컨테이너 이미지에 대해 문의 하는 경우 해당 사이트에 해당
Ken White

@KenWhite : 관련 메타 질문 : meta.stackexchange.com/questions/179249/...
Flimm

:-) 이 시점에서 관련 메타 답변 으로, 귀하의 답변 바로 위에 있습니다. (귀하의 질문에 물어 무엇의 선명도에 대해, 내가 링크 대답 특히 두 번째 주석을 참조하십시오.)
켄 화이트에게

9
@Ken White : 문제는 '이미지'를 배포하는 방법이 아니라 기본 이미지를 '만드는'방법입니다. Flimm은 나중에 그 사람이나 다른 사람이 배포 할 수있는 무언가를 프로그래밍하려고합니다. Amazon EC2는 배포와 관련이 있지만 여전히 프로그래머가 프로그래밍 작업을 프로그래밍하고 있다고 생각합니다. :). 기본 이미지를 만드는 것은 내가 말하는 프로그램의 예입니다.
qkrijger

@qkrijger : 이것은 링크 된 메타 질문에서 논의되고 있습니다. 토론이 열려 있으므로 주제에 대한 토론을 게시하십시오 (컨센서스가 "프로그램 관련 주제"주제가 아닌 것으로 보이는 경우).
Ken White

답변:



32

Solomon Hykes 인용 :

"docker import"를 사용하여 모든 tarball에서 새 컨테이너를 쉽게 만들 수 있습니다. 예를 들면 :

debootstrap raring ./rootfs
tar -C ./rootfs -c . | docker import - flimm/mybase

대신 댓글에 수정 / 업데이트를 게시하면 다른 사람이 볼 수 있고 다른 사람이 수정을 다시 제출할 수 있습니다.
Bdoserror 2010 년

1
@Flimm이 경우 왜 sudo를 사용해야합니까? 사용자 디렉터리에서 이러한 명령을 실행하면 권한 상승에 대한 이유가 없어야합니다. 이미지를 설치하는 것이 아니라 만드는 중입니다.
rancidfishbreath

일반적인 Docker 사용을 위해 루트가 필요하지도 않습니다. docker그룹 에 자신을 추가하기 만하면 됩니다.
tekknolagi 2014 년

1
그러나 Flimm 추천 가져 오기 명령에 하이픈이 필요하다 : docker import - flimm/mybase대신docker import flimm/mybase
다니엘 알더

tar에있는 파일의 소유권은 루트로 실행 중인지 여부에 따라 영향을받습니다. 루트가 아닌 경우 debootstraptar최소한에서 실행되어야합니다 fakeroot.
clacke

21

(fatherlinux에 대한 크레딧) http://developerblog.redhat.com/2014/05/15/practical-introduction-to-docker-containers/ 에서 정보를 얻으십시오.

  1. 파일 시스템에 대한 tar 파일을 만듭니다.

    tar --numeric-owner --exclude=/proc --exclude=/sys -cvf centos6-base.tar /
    
  2. 로컬에 설치되지 않은 경우 다른 고정 표시기 시스템에 tar 파일을 전송하고 import그것을

    cat centos6-base.tar | docker import - centos6-base
    
  3. 이제 실행하여 확인할 수 있습니다.

    docker run -i -t centos6-base cat /etc/redhat-release
    

dotcloud스크립트 는 처음 두 단계를 결합하여 처음에는 혼란스럽고 복잡해 보입니다.

도커 공식 가이드 라인을 사용하여 debootstrap깨끗한 파일 시스템을 만들려고합니다.

1 단계를 수행하는 방법을 스스로 판단 할 수 있습니다.


14

처음부터 자신의 이미지 빌드를 시작하려면 이미지를 사용할 수 있습니다 scratch.

스크래치 "이미지"를 사용하면 Dockerfile의 다음 명령이 이미지의 첫 번째 파일 시스템 계층이되기를 원하는 빌드 프로세스에 신호를 보냅니다.

FROM scratch
ADD hello /
CMD ["/hello"]

http://docs.docker.com/engine/articles/baseimages/#creating-a-simple-base-image-using-scratch


1
importtar 파일 의이 플러스 는 두 가지 표준 답변이며 해당 링크가 표준 리소스입니다.
clacke 2016-04-30

7

자신 만의 기본 이미지를 만들고 싶다면 먼저 공식 이미지 , 특히 stackbrew해당 저장소 내부를 살펴 보겠습니다 .

그렇지 않으면 docker repo 자체 에 최소 OS 이미지에 대한 훌륭한 참조가 있습니다.

예를 들어 여기 에 최소한의 아치 이미지를 만들기 위한 스크립트 가 있으며 여기 에 더 있습니다 .

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