Dockerfile - explicação detalhada da instrução ADD

Resuma ADD em um parágrafo

  • Função: Adicionar conteúdo à imagem
  • Formato: ADICIONAR
  • Explicação detalhada: Este comando copiará o conteúdo do caminho especificado para o caminho da imagem.
  • <src>: pode ser um caminho relativo (arquivo ou diretório) para o diretório onde o Dockerfile está localizado; também pode ser uma URL; também pode ser um arquivo tar (descompactado automaticamente em um diretório)
  • <dest>: pode ser um caminho absoluto dentro da imagem ou um caminho relativo relativo ao diretório de trabalho (WORKDIR)
  • Caminho: suporta expressões regulares, ADD *.c /code/
    dois formatos

ADICIONAR [–chown=:]… ADICIONAR
[–chown=:] [“”,… “”]

–chown
só é aplicável ao dockerfile no Linux. Não há conceito de usuários e grupos no Windows.

Função ADICIONAR

  • A instrução ADD copia novos arquivos, diretórios ou URLs de arquivos remotos e os adiciona ao caminho
  • Vários recursos podem ser especificados, mas se forem arquivos ou diretórios, seus caminhos serão resolvidos em relação à origem do contexto de construção
  • Cada um pode conter curingas e a correspondência será feita usando as regras filepath.Match do Go.

Castanha simples

  • Wildcard
    adiciona todos os arquivos começando com hom ao diretório /mydir/ do sistema de arquivos espelhado
ADD hom* /mydir/
  • ?Cartão curinga
    ?corresponde a 0 ou 1 caracteres, por exemplo, o arquivo home.txt será adicionado ao diretório /mydir/
ADD hom?.txt /mydir/

O ponto importante
é o caminho absoluto, ou um caminho relativo ao WORKDIR, para o qual a origem será copiada dentro do contêiner de destino

Castanha usando caminhos relativos

ADD test.txt relativeDir/

Equivalente a

ADD test.txt <WORKDIR>/relativeDir/

Castanha usando caminho absoluto

Adicione test.txt ao diretório /absoluteDir/

ADD test.txt /absoluteDir/

Arquivos contendo caracteres especiais

Adicione um arquivo chamado arr[0].txt

ADD arr[[]0].txt /mydir/

ADICIONE regras a seguir

O caminho deve estar no contexto da construção

Você não pode adicionar .../something , /something porque a primeira etapa da construção do docker é enviar o diretório de contexto (e subdiretórios) para o daemon do docker

## test.txt 是相对路径,相对于构建上下文
ADD test.txt /mkdir/
 
# 错误写法,文件均不在上下文目录中,并不会被找到
# 这个找的就是构建上下文的上级目录的 test.txt
ADD ../test.txt /mkdir/
 
# 这个找的是本机根目录下的 test.txt
ADD /test.txt /mkdir/

<src> é uma URL

  • <dest> não termina com uma barra, então o arquivo será baixado da URL e copiado para
  • <dest> termina com uma barra, o nome do arquivo é inferido da URL e o arquivo é baixado para /
ADD http://example.com/foobar/

Isto criará o arquivo /foobar, a URL deve ter um caminho importante para que o nome do arquivo possa ser encontrado neste caso (http://example.com não funcionará)

<src> é um diretório

em seguida, copia todo o conteúdo do diretório, incluindo os metadados do sistema de arquivos.
O diretório em si não é copiado, apenas seu conteúdo.

ADD dir /mydir/

<src> é um arquivo tar local em formato compactado (gzip, bzip2, identidade, xz)

irá descompactá-lo automaticamente como um diretório, mas os recursos de URLs remotos não serão descompactados.
Quando um diretório é copiado ou descompactado, ele se comporta da mesma forma que tar -x

NOTA: Se um arquivo é reconhecido como um formato compactado reconhecido depende inteiramente do conteúdo do arquivo, não do nome do arquivo; por exemplo, se um arquivo vazio terminar em .tar.gz, ele não será reconhecido como um arquivo compactado, nem será reconhecido como um arquivo compactado. Qualquer tipo de mensagem de erro de descompactação será gerada, mas o arquivo só será copiado para o local de destino

<src> é qualquer outro tipo de arquivo

então ele será copiado separadamente junto com seus metadados
. Terminando com uma barra /, ele será tratado como um diretório e o conteúdo será gravado em /base().
Vários recursos são especificados ou
deve ser um diretório devido ao uso de curingas. e deve terminar com uma barra/

ADD test1.txt test2.txt /mydir/

<dest> não termina com barra

Ele será tratado como um arquivo normal e o conteúdo de

ADD test.txt /mytext

não existe

Quaisquer diretórios ausentes no caminho são criados automaticamente

ADD test.txt /dir/test/my/

Observe
que a primeira instrução ADD encontrada invalidará o cache de todas as instruções subsequentes do Dockerfile. Isso inclui invalidar o cache da instrução RUN.

Dockerfile de exercício completo

FROM centos
# 添加文件到目录下
ADD test.txt /mydir/
 
# 将文件内容写入 mytest
ADD test.txt /mytest
 
# 压缩文件,自动解压
ADD jmeter.log.zip /myzipdir/
 
# 添加目录
ADD TeamFile /
 
# 其他文件
ADD jmeter.log /mydir/
 
# 多个文件
ADD test1.txt test2.txt /mydir/
 
# 通配符,dest 不存在自动创建
ADD test*.txt /mydir/test/
 
# 特殊字符串
ADD add[[]0].txt /mydir/
 
WORKDIR /data
 
# 相对路径
ADD test.txt test/

A diferença e os cenários de uso entre ADD e COPY

  • ADD suporta adição de URLs remotos e extração automática de arquivos em formato compactado. COPY permite apenas copiar arquivos da máquina local.
  • COPY suporta a cópia de arquivos de origem de outras fases de construção (–from)
  • De acordo com as práticas recomendadas oficiais do Dockerfile, use ADD, a menos que você realmente precise adicionar arquivos de um URL remoto ou extrair automaticamente arquivos compactados. Em outros casos, use COPY.
    Observação
  • ADD buscar o arquivo do URL remoto e copiá-lo não é o ideal porque o arquivo aumentará o tamanho final da imagem Docker. Em vez disso, use curl huo wget para obter o arquivo remoto e exclua-o quando não precisar dele

Acho que você gosta

Origin blog.csdn.net/tian830937/article/details/132526303
Recomendado
Clasificación