programing

도커 파일에서 이미지 이름을 설정하는 방법은 무엇입니까?

muds 2023. 8. 24. 22:29
반응형

도커 파일에서 이미지 이름을 설정하는 방법은 무엇입니까?

다음과 같은 사용자 정의 이미지를 작성할 때 이미지 이름을 설정할 수 있습니다.

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

도커 파일에서 이미지의 이름을 정의할 수 있는 방법이 있습니까? 그래서 나는 그것을 언급할 필요가 없습니다.docker build명령?

사용 방법docker-compose

도커 파일 내에서는 이미지 태그 지정이 지원되지 않습니다.이 작업은 빌드 명령에서 수행해야 합니다.해결 방법으로 대상 이미지 이름을 식별하고 다음을 실행하는 docker-compose.yml을 사용하여 빌드를 수행할 수 있습니다.docker-compose build샘플 도커-compose.yml은 다음과 같습니다.

version: '2'

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

그렇긴 하지만, 스웜 모드 배포에서는 작동하지 않기 때문에 컴포지트로 빌드하는 것에 대한 압박이 있습니다.이제 질문에서 제시한 대로 명령을 실행하는 것으로 돌아갑니다.

docker build -t dude/man:v2 .

저는 개인적으로 폴더(build)에 작은 셸 스크립트로 빌드하는 경향이 있습니다.sh) 모든 인수를 통과하고 입력을 저장하기 위해 이미지의 이름을 포함합니다.또한 프로덕션의 경우 파이프라인 스크립트 내부에 이미지 이름이 있는 ci/cd 서버에서 빌드를 처리합니다.

사용 방법docker-compose

특정 도커 파일을 참조해야 하는 경우 다음 버전이 있습니다.

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

그럼 그냥 도망가

docker-compose build

나의Dockerfile유일한 솔루션은 셰방 라인을 추가하는 것입니다.

#!/usr/bin/env -S docker build . --tag=dude/man:v2 --network=host --file

FROM ubuntu:22.04
# ...

그리고나서chmod +x Dockerfile그리고../Dockerfile가는 것입니다.더 추가합니다.docker build호스트 네트워크 지정과 같은 명령줄 인수.

참고:env와 함께-S/--split-string최신 coreutils 버전에 대해서만 지원을 사용할 수 있습니다.

특정 도커 파일을 사용하여 다음을 시도할 수 있습니다.
docker build --tag <Docker Image name> --file <specific Dockerfile> .
예를들면
docker build --tag second --file Dockerfile_Second .

터미널로 이동하여 다음을 지나갑니다.

도커 빌드 - t 이미지 이름 여기: 태그 여기.

ENTER를 누르면 이미지 파일 이름이 변경되었습니다.

도커(및 Makefile)를 사용한 해결 방법

일반적으로 도커에서는 이미지에 태그를 지정할 내용을 말할 수 없습니다.Dockerfile그래서 당신이 하는 일은

  • 작성Dockerfile
  • 작성Makefile
    .PHONY: all
    all: docker build -t image_name .
    
  • 사용하다make호출하는 대신docker build직접적으로

또는 사용buildah

하지만 여기 더 좋은 생각이 있습니다...도커로 이미지를 빌드하지 마십시오!대신으로 그것들을 구축하는 것은, 쉘(또는 어떤 언어)을 사용하는 포드맨 크루에 의해 제공되는 새로운 빌드 도구로, 클라우드에서 쉽게 구축할 수 있습니다.kaniko), 그리고 이미지를 루트 없이 구축할 수 있습니다!빌드 스크립트가 끝나면 이미지를 내부에 저장합니다.buildah commit이것은 이렇게 생겼습니다.

#!/bin/sh

# Create a new offline container from the `alpine:3` image, return the id.
ctr=$(buildah from "alpine:3")
# Create a new mount, return the path on the host.
mnt=$(buildah mount "$ctr")

# Copy files to the mount
cp -Rv files/* "$mnt/"

# Do some things or whatever
buildah config --author "Evan Carroll" --env "FOO=bar" -- "$ctr"

# Run a script inside the container
buildah run "$ctr" -- /bin/sh <<EOF
  echo "This is just a regular shell script"
  echo "Do all the things."
EOF

# Another one, same layer though
buildah run "$ctr" -- /bin/sh <<EOF
  echo "Another one!"
  echo "No excess layers created as with RUN."
EOF

# Commit this container as "myImageName"
buildah commit -- "$ctr" "myImageName"

이제 당신은 그것을 가지고 해킹할 필요가 없습니다.Makefile은 모든을 할 수 셸, 모든것수는하있으가며트셸다립이립, ▁a보다 훨씬 더 합니다.Dockerfile.


노트, 사드노트이,,buildah또한 다음을 기반으로 구축 가능성Dockerfile(s) 사용)buildah bud), 이 은 , , , 에 Dockerfile그래서 도움이 안 됩니다.

언급URL : https://stackoverflow.com/questions/38986057/how-to-set-image-name-in-dockerfile

반응형