Dockerfile과 함께 로컬 이미지를 기본 이미지로 사용하려면 어떻게해야합니까?


126

나는 dockerfile에서 일하고 있습니다. 나는 FROM색인 이미지를 계속 사용 하고 있다는 것을 깨달았습니다 .

그래서 궁금합니다.

  • 로컬 (사용자 지정) 이미지 중 하나를 인덱스에 포함 FROM하지 않고 기본 ( ) 이미지 pushing로 사용하려면 어떻게해야합니까?

답변:


148

특별한 작업을하지 않고도 사용할 수 있습니다. 라는 로컬 이미지가 blah있으면 할 수 있습니다 FROM blah. 당신이 경우에 FROM blah당신의 Dockerfile에,하지만 하지 않는다 라는 지역 이미지를 가지고 blah, 다음 도커는 레지스트리에서 당겨하려고합니다.

즉, Dockerfile이을 수행 FROM ubuntu하지만 ubuntu공식 이미지 와 다른 로컬 이미지가있는 경우 이미지가이를 재정의합니다.


5
나를 위해 작동하지 않습니다-boot2docker에 문제가 될 수 있습니까? 나는 최신 버전 1.3.1을 가지고있다 ... Docker는 먼저 로컬에서 확인하지 않는 것 같다 (또는 그것을보고하지 않을 수도있다) 그것은 레지스트리에서 가져 오기를 시도하는 곧바로 간다. stackoverflow.com/q/27046118/202168
Anentropic

@Anentropic 저는 boot2docker 1.5를 사용하고 있습니다. bash-4.3 $ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu1504gcc484 latest 0378ea1c0b6c 19 hours ago 1.36 GB And doing "FROM ubuntu1504gcc484"in my other Dockerfile, and this works just fine. (잘못된 형식에 대한 사과)
Pejvan 2015

더 이상 몰라요, 나도 지금 1.5
Anentropic

1
이미지를 생성하고 로컬 레지스트리에 태그를 지정했습니다. 그런 식으로 태그를 지정하면 이름만으로는 찾을 수 없으며 전체 이름에는 레지스트리가 포함되어 있으므로이 방식을 참조하면 태그를 가져옵니다. 간단한 형식의 이름으로 다시 태그를 지정할 수 있으며 레지스트리를 찾기 전에 검색됩니다. 나를 위해 일했습니다.
Gerry Gleason

1
아니요, 이것은 올바르지 않습니다. Docker는 로컬에 동일한 이름의 이미지가 있음에도 불구하고 원격 레지스트리에서 이미지를 가져 오려고 docker image list합니다.
John Smith 선택적

16

확인 됨 : Docker 1.7.0에서 잘 작동합니다.

BTW, 명령을 --pull=true실행할 때 지정하지 마십시오 docker build.

당신은 기본 이미지로 지역 이미지를 사용하려는 경우, 옵션없이하시기 바랍니다 --pull=true, --pull=true항상 이미지의 최신 버전을 끌어 시도합니다.

-https : //github.com/docker/docker/issues/14943


4
이미지 이름에 -문자 ( my-image-
:)가있는 경우도 커가이

1
에 하이픈으로 연결된 이름에는 문제가 없었지만 Docker version 17.06.2-ce, build cec0b72이미지에 태그를 지정했다면 태그를 이미지 사양의 일부로 포함했는지 확인하십시오 (FROM localimage : tag).
스콧

@deFreitas 사실 인 것 같습니다. 이름에 하이픈이있는 이미지가 있고 Docker는 해당 이름이 로컬로 존재하는 이미지에도 불구하고 원격 레지스트리에서 이미지를 가져 오려고합니다. 이름의 하이픈에 대한이 규칙이 사실로 밝혀지면 이것은 순수한 광기 일 것입니다.
John Smith 선택적

@deFreitas : 내 마지막 댓글에 따라 하이픈을 밑줄로 표시하고 동일한 문제가 발생했습니다. Docker는 로컬 이미지가 있음에도 불구하고 원격에서 이미지를 가져 오려고합니다. 제 경우에는 적어도 하이픈은 문제가 아닙니다.
John Smith 선택적

4

이미지에-문자가있을 수 있습니다. 7.3.1611 태그가있는 centos-base-image라는 로컬 이미지 (로컬 레지스트리가 아님)가 있다고 가정합니다.

docker version 
      Client:
       Version:         1.12.6
       API version:     1.24
       Package version: docker-common-1.12.6-16.el7.centos.x86_64
       Go version:      go1.7.4

      Server:
       Version:         1.12.6
       API version:     1.24
       Package version: docker-common-1.12.6-16.el7.centos.x86_64
       Go version:      go1.7.4

docker images
 REPOSITORY            TAG
 centos-base-image     7.3.1611

Dockerfile

FROM centos-base-image:7.3.1611
RUN yum -y install epel-release libaio bc flex

결과

Sending build context to Docker daemon 315.9 MB
Step 1 : FROM centos-base-image:7.3.1611
  ---> c4d84e86782e
Step 2 : RUN yum -y install epel-release libaio bc flex
  ---> Running in 36d8abd0dad9
...

위의 예에서 FROM로컬 이미지를 가져 오는 경우 사용자 지정 레지스트리 (예 :)에서 이미지를 가져 오기위한 추가 지침을 제공 할 수 있습니다 FROM localhost:5000/my-image:with.tag. 참조 https://docs.docker.com/engine/reference/commandline/pull/#pull-from-a-different-registryhttps://docs.docker.com/registry/#tldr

마지막으로 이름을 제공 할 때 이미지가 해결되지 않는 경우 이미지를 만들 때 이미지에 태그를 추가 해보세요.

이 GitHub 스레드는 이름으로 로컬 이미지를 찾지 못하는 유사한 문제를 설명합니다 .

특정 태그를 생략하면 docker가 "latest"태그가 지정된 이미지를 찾게되므로 : latest 태그로 이미지를 만들거나 FROM을 변경합니다.


0

다음과 같이 태그뿐만 아니라 해당 태그가있는 저장소도 입력해야합니다.

docker images
REPOSITORY                                TAG                       IMAGE ID            CREATED             SIZE
elixir                                    1.7-centos7_3             e15e6bf57262        20 hours ago        925MB

다음과 같이 참조해야합니다.

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