Docker-Hub를 사용하지 않고 Docker-Image를 공유하는 방법은 무엇입니까?


257

Docker의 이미지가 로컬 호스트 컴퓨터에 정확히 어디에 저장되어 있는지 궁금합니다. 나는 사용하지 않고 내 도커 이미지를 공유 할 수 Docker-Hub또는 Dockerfile하지만 '진짜'도커 - 이미지? Docker-Image를 Docker-Hub에 '푸시'할 때 정확히 무슨 일이 있습니까?


2
나중에 참조 할 수 있도록 : 도커 이미지
Mifeet

답변:


243

Docker 이미지는 파일 시스템 계층으로 저장됩니다. Dockerfile의 모든 명령은 레이어를 만듭니다. docker commit명령 행에서 일부를 변경 한 후 ( docker run아마도) 레이어를 작성할 수도 있습니다 .

이 레이어는 기본적으로에 저장됩니다 /var/lib/docker. 거기에서 (이론적으로) 체리 파일을 선택하여 다른 도커 서버에 설치할 수는 있지만 Docker가 사용하는 내부 표현을 가지고 노는 것은 좋지 않은 생각 일 것입니다.

이미지를 푸시하면이 레이어가 레지스트리 (기본적으로 도커 허브 레지스트리로 전송됩니다. 다른 레지스트리 접두어로 이미지에 태그를 지정하지 않는 한 ...)에 저장됩니다. 푸시 할 때 레이어 ID는 이미 레이어가 로컬에 있는지 또는 다운로드해야하는지 확인하는 데 사용됩니다. docker history어떤 레이어 (다른 이미지)가 사용되는지 (그리고 어느 명령으로 레이어를 만들 었는지) 엿볼 수 있습니다 .

도커 허브 레지스트리로 푸시하지 않고 이미지를 공유하는 옵션의 경우 가장 좋은 옵션은 다음과 같습니다.

  • docker save이미지 또는 docker export컨테이너. tar 파일을 표준 출력으로 출력하므로 다음과 같은 작업을 수행하려고 docker save 'dockerizeit/agent' > dk.agent.latest.tar합니다. 그런 다음 docker load또는 docker import다른 호스트를 사용할 수 있습니다 .

  • 개인 레지스트리를 호스팅하십시오. - 구식, 설명 참조 docker registry 이미지를 참조하십시오 . 필요에 따라 시작하고 중지 할 수 있는 s3 백업 레지스트리 를 만들었습니다 (모든 상태는 선택한 s3 버킷에 유지됨). 이것은 또한 레지스트리로 푸시 할 때 발생하는 일을 관찰하는 흥미로운 방법입니다.

  • docker hub와 관련하여 우려되는 사항이 여기에도 적용될 수 있지만 quay.io 와 같은 다른 레지스트리를 사용하십시오 (개인적으로 시도하지는 않았습니다).


6
나중에 참조 할 수 있도록 docker 레지스트리 이미지에 대한 링크가 오래되었습니다. 이제 Docker Registry 2.0github / docker / distribution
사용해야합니다.

1
Registry 2.0이 원본을 대신 할 준비가되었는지 확실하지 않습니다. 여기에는 검색으로 몇 가지 기본적인 기능을 놓칠 것 같다 stackoverflow.com/questions/30113726/docker-registry-2-0-api-v2
JoshRivers

1
에 대한 질문 docker save: 다른 이미지 (예 :)에서 파생 된 이미지를 python:2.7레지스트리로 푸시하면 변경되지 않는 한 상위 이미지를 두 번 이상 업로드 할 필요가 없습니다. 유사한 파일 크기 최적화를 위해 부분 이미지를 저장할 수 있습니까? 나는 여러 이미지를 가진 애호가이며 개인 레지스트리 비용을 지불하고 싶지 않기 때문에이 농구 대를 뛰어 넘고 있습니다.
Pieter

4
Dockerfile을 포함한 git repo 및 docker build호스트 에서 src 파일을 가져올 수 있습니까?
jshxe

1
내 빌드의 @Jishaxe 부분은 npm install... 메모리가 적고이 단계가 항상 실패하기 때문에 호스트에서 빌드 할 수 없습니다 ( github.com/npm/npm/issues/5021 참조 )
Soft Bullets

46

이 블로그를 기반으로 다음 을 실행하여 도커 레지스트리없이 도커 이미지를 공유 할 수 있습니다.

docker save --output latestversion-1.0.0.tar dockerregistry/latestversion:1.0.0

이 명령이 완료되면 이미지를 서버에 복사하여 다음과 같이 가져올 수 있습니다.

docker load --input latestversion-1.0.0.tar

18

도커 이미지를 원격 서버로 보내는 것은 간단한 3 단계로 수행 할 수 있습니다.

  1. 로컬로 docker 이미지를 .tar 로 저장하십시오 .
docker save -o <path for created tar file> <image name>
  1. 로컬에서는 scp 를 사용 하여 .tar 를 원격 으로 전송하십시오.

  2. 원격 서버에서 이미지를 docker에로드하십시오.

docker load -i <path to docker image tar file>

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