Jak ustawić nazwę obrazu w Dockerfile?

299

Nazwę obrazu można ustawić podczas budowania obrazu niestandardowego, na przykład:

docker build -t dude/man:v2 . # Will be named dude/man:v2

Czy istnieje sposób na zdefiniowanie nazwy obrazu w Dockerfile, więc nie muszę o tym wspominać w docker buildpoleceniu?

Gvlasov
źródło
1
Dla każdego, kto jest ciekawy, używając FROM ... AS nazwa NIE działa
Rufus

Odpowiedzi:

265

Oznaczanie obrazu nie jest obsługiwane w pliku Docker. Trzeba to zrobić w poleceniu kompilacji. Aby obejść ten problem, możesz wykonać kompilację za pomocą narzędzia docker-compose.yml, które identyfikuje nazwę obrazu docelowego, a następnie uruchom plik docker-compose build. Przykładowy wygląd docker-compose.yml

version: '2'

services:
  man:
    build: .
    image: dude/man:v2

To powiedziawszy, istnieje nacisk na robienie kompilacji z komponowaniem, ponieważ nie działa to w przypadku wdrożeń w trybie roju. Powrócisz do uruchamiania polecenia podanego w pytaniu:

docker build -t dude/man:v2 .

Osobiście staram się budować za pomocą małego skryptu powłoki w moim folderze (build.sh), który przekazuje wszelkie argumenty i zawiera nazwę obrazu, aby zapisać pisanie. W przypadku produkcji kompilacja jest obsługiwana przez serwer ci / cd, który ma nazwę obrazu w skrypcie potoku.

BMitch
źródło
302

Jak zbudować obraz o niestandardowej nazwie bez użycia pliku yml:

docker build -t image_name .

Jak uruchomić kontener o niestandardowej nazwie:

docker run -d --name container_name image_name
salehinejad
źródło
78
Nie zamierzam dalej komentować, ale pytanie brzmiało: „Jak ustawić nazwę obrazu w Dockerfile?”. Nie „Jak ustawić nazwę obrazu dokera?” Ta odpowiedź była w samym pytaniu.
Novaterata
68
Wróciłem do tego kilka razy, a ta odpowiedź pomogła, mimo że
jestem
7
Jeśli jesteś konsekwentny, umieszczając Dockerfilekatalog o takiej samej nazwie, jak chcesz dla swojego obrazu, możesz użyć go docker build -t $(basename $PWD) .jako polecenia kompilacji. Następnie możesz użyć wyszukiwania CTRL-R z „kompilacji”, aby znaleźć i ponownie użyć polecenia i nigdy nie trzeba go edytować. Możesz również ustawić go jako alias, jeśli chcesz.
Bruno Bronosky
W każdym razie dziękuję za tę odpowiedź. spędziłem kilka godzin, aby uzyskać to przez Internet. Nie mogłem znaleźć właściwej odpowiedzi, ponieważ ten, kto nada imię swojemu wizerunkowi, nie może pójść dalej bez niego, jeśli potrzebuje również swojego pojemnika.
Susaj S Nair
38

Oto kolejna wersja, jeśli musisz odwoływać się do określonego pliku dokera:

version: "3"
services:
  nginx:
    container_name: nginx
    build:
      context: ../..
      dockerfile: ./docker/nginx/Dockerfile
    image: my_nginx:latest

Więc po prostu biegnij

docker-compose build
David Dehghan
źródło
1
Podoba mi się, że ta odpowiedź pokazuje różnicę między nazwą_kontenera a nazwą obrazu: tag. Gdyby tylko było trochę więcej wyjaśnienia tego, co się dzieje: „nazwa_kontenera” nazywa nazwę kontenera, który ostatecznie został wyodrębniony z obrazu. „image” nazywa i otacza utworzony obraz, z którego zbudowany jest kontener. Jak wspomnieli inni, nie można podać nazwy obrazu z pliku Docker, jak poprosił OP, więc zamiast tego używamy pliku docker-compose.yml i uruchamiamy go za pomocą polecenia „docker-compose up -d --build”
Sean McCarthy
-7

Możesz to zrobić za pomocą „AS” z Ubuntu: 16.04 AS FooImage

Richard
źródło
6
ASSkładnia określa nazwę docelową używany w produkcji wielostopniowy, a nazwa ta może być również stosowany w miejsce obrazu dla COPY --fromskładni w tej kompilacji wielostopniowym. Jednak nie określa wynikowej nazwy / znacznika dla samej kompilacji.
BMitch