Construção Dockerfile usando o processo de espelhamento e de construção, a instrução da operação em detalhes

Construção dos três métodos de espelhamento

Docker espelhamento construir três maneiras, foram baseadas no edifício espelhado existente, construído sobre um modelo para a construção do local e Dockerfile base.

Este artigo é principalmente sobre a construção espelhada por Dockerfile.

O que é Dockerfile?

Dockerfile arquivo de texto é usado para construir um espelho, o texto contém instruções e as instruções necessárias para construir uma imagem do artigo, em que cada instrução correspondente a um comando no Linux, programa de Docker lê a geração comando imagem Dockerfile especificado.

estrutura Dockerfile dividido em quatro partes: a informação da imagem base, efectuar uma manutenções, instruções e recipientes imagem comando iniciar . Cada suporte de uma linha de instrução Dockerfile, com cada instrução pode ser uma pluralidade de parâmetros, suporta o uso de números que começam com # comentários.

Um exemplo Dockerfile:

#基于centos镜像
FROM centos

#维护人的信息
MAINTAINER The CentOS Project <[email protected]>

#安装httpd软件包
RUN yum -y update
RUN yum -y install httpd

#开启80端口
EXPOSE 80

#复制网站首页文件至镜像中web站点下
ADD index.html /var/www/html/index.html

#复制该脚本至镜像中,并修改其权限
ADD run.sh /run.sh
RUN chmod 775 /run.sh

#当启动容器时执行的脚本文件
CMD ["/run.sh"]

Operação instrução Docker

DA comando RUN e

DE : DA imagem personalizada é baseado em um espelho, centos imagem personalizada base aqui é necessário. As operações subsequentes são baseados centos.

FUNCIONAMENTO : usado para executar os comandos da linha de comando seguido por trás. Existem dois formatos:

formato de shell:

RUN <命令行命令>
# <命令行命令> 等同于,在终端操作的 shell 命令。

formato exec:

RUN ["可执行文件", "参数1", "参数2"]
# 例如:
# RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offline

Nota : instrução Dockerfile será executada uma vez para cada nova camada na janela de encaixe. Tanto camada sentido fará com que a expansão da imagem é muito grande. Por exemplo:

FROM centos
RUN yum install wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN tar -xvf redis.tar.gz
以上执行会创建 3 层镜像。可简化为以下格式:
FROM centos
RUN yum install wget \
    && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"\
    && tar -xvf redis.tar.gz

Quanto ao && instrução ligação simbólica executado depois disso, apenas criar uma camada espelho.

Iniciar edifício Espelho

No arquivo Dockerfile diretório de armazenamento, execute a ação de compilação.

O exemplo que se segue, construída por um centos Dockerfile directório: teste (nome de imagem: tag de espelho).

Nota : Final . Em nome do caminho do contexto de execução.

docker build -t centos:test .

caminho do contexto

Em um, o último mencionado instruções. É o caminho do contexto, então qual é o contexto da pagina ele?

docker build -t centos:test .

meio caminho do contexto em imagem janela de encaixe construção, às vezes quiser usar o arquivo para a máquina (como copiar), o comando janela de encaixe compilação que este caminho, todo o conteúdo será embalado no caminho.

Analítica : Uma vez que o modo de operação de janela de encaixe é a relação C / S. A nossa máquina é C, motor janela de encaixe é S. O processo de compilação real é feito sob o motor janela de encaixe, por isso desta vez não podemos usar o arquivo da máquina. Isso precisa ser empacotado com arquivos no diretório especificado disponível para o nosso motor de janela de encaixe nativa.

Se o último argumento não especificado, o caminho do contexto padrão é o local onde o Dockerfile.

Nota : Não coloque inútil caminho do contexto de arquivos, como será embalado em conjunto para enviar motor de janela de encaixe, se muitos arquivos pode causar processo lento.

instruções detalhadas

instrução significado
DE Espelho Especifica a nova imagem é baseada em um espelho, a primeira instrução deve ser
nome MAINTAINER A nova informação espelho mantenedor
comando RUN Executado com base do comando espelho, e submeter ao novo espelho
EXPOR número da porta Especifique a nova imagem para carregar quando o número da porta para abrir Docker
valores variáveis ​​ambiente variáveis ​​ENV Definido um valor variável de ambiente, vai ser usado mais tarde no RUN
arquivo de destino arquivo / diretório fonte ADD / diretório Copie o arquivo de origem para o arquivo de destino, o arquivo de origem para o Docker no mesmo diretório, ou um URL
COPY arquivo de origem / arquivo de destino diretório / diretório Copie o arquivo de origem no host / diretório local para o site de destino, os arquivos de origem / diretórios para ser no mesmo diretório sob o Dockerfile
VOLUME [ "diretório"] Criar um ponto de montagem no recipiente
USER nome do usuário / UID Quando o utilizador executa o recipiente especificado
caminho WORKDIR Para RUN posterior, CMD, EntryPoint especificar o diretório de trabalho
comando ONBUILD

O comando especifica a imagem gerada como base para executar o espelhamento

O CMD [ "programa a ser executado", "parâmetro 1", "parâmetro 2"] Especifique um comando ou script para executar em recipiente de inicialização apenas um comando CMD, apenas o último é executado quando o número de

CÓPIA DE

instrução de cópia, copie o arquivo do diretório de contexto ou diretórios especificado no caminho para o recipiente.

formato:

COPY [--chown=<user>:<group>] <源路径1>...  <目标路径>
COPY [--chown=<user>:<group>] ["<源路径1>",...  "<目标路径>"]

[--Chown = <Usuário>: <Grupo>] : parâmetros opcionais, alterar a cópia do usuário para o proprietário do recipiente e é um grupo de arquivos.

<Path Fonte> : arquivo de origem ou fonte de diretório, onde você pode ser uma expressão curinga que regras de curinga para atender às regras filepath.Match Go. Por exemplo:

COPY hom* /mydir/
COPY hom?.txt /mydir/

ADICIONAR

comando ADD COPY e formato consistente para uso (a mesma demanda, a cópia oficial recomendado). Funcionam de modo semelhante, excepto como se segue:

  • vantagens de ADD: executar <source> é comprimido arquivo tar, formato de compressão, copiado e extrato para <caminho de destino> para a próxima, e onde xz de bzip2 gzip automaticamente.
  • Lacuna da ADD: sem descompressão, arquivos tar compactados não podem ser copiados. Espelhado invalidação de cache fará com que o edifício, que pode levar à construção de imagem torna-se lenta. Especificamente se a utilização, que pode ser determinada de acordo com se a descompressão automática.

CMD

comando semelhante RUN para executar programas, mas ambos os diferentes pontos de tempo de execução:

  • CMD executado quando estivador prazo.
  • RUN é uma compilação janela de encaixe.

Papel : designado como o recipiente padrão começa a executar o programa, as extremidades do programa, o recipiente vai ser longo. comando CMD designa execução do programa janela de encaixe pode ser especificado nos parâmetros de linha de comando para executar o programa coberto.

Nota : Se Dockerfile Se houver mais de comando CMD, apenas o último deles irá funcionar.

formato:

CMD <shell 命令> 
CMD ["<可执行文件或命令>","<param1>","<param2>",...] 
CMD ["<param1>","<param2>",...]  # 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数

O segundo formato é recomendado, o processo de implementação é relativamente clara. O primeiro formato é realmente a segunda corrida será automaticamente convertido para o formato durante a corrida, o arquivo executável eo padrão é sh.

PONTO DE ENTRADA

comando CMD é semelhante, mas não vai ser estivador parâmetro de linha de comando de execução para especificar as instruções cobertas, e estes parâmetros de linha de comando são especificados como um parâmetro para o programa de instrução EntryPoint.

No entanto, usando a opção --entrypoint quando você executar janela de encaixe prazo, esta opção pode ser utilizada como parâmetros para executar um programa que abrange instruções EntryPoint programa especificados.

Vantagem : Você pode especificar parâmetros EntryPoint necessário executar na implementação da janela de encaixe prazo.

Nota : Se Dockerfile Se houver mais do que a instrução EntryPoint, apenas o último deles irá funcionar.

formato:

ENTRYPOINT ["<executeable>","<param1>","<param2>",...]

Com o comando CMD pode ser usado: geralmente só utilização é cada vez mais uma referência CMD CMD equivale aqui entryPoint passar parâmetros, os exemplos seguintes irão ser mencionadas.

exemplo:

Foi construído, assumindo Dockerfile nginx: imagem de teste:

FROM nginx

ENTRYPOINT ["nginx", "-c"] # 定参
CMD ["/etc/nginx/nginx.conf"] # 变参 

1, não passe parâmetros para executar

 docker run  nginx:test

Execute o seguinte comando será o padrão para um contentor no processo principal.

nginx -c /etc/nginx/nginx.conf

2, operação passagem de parâmetro

docker run  nginx:test -c /etc/nginx/new.conf

Execute o seguinte comando será o padrão para um contentor no processo principal (/etc/nginx/new.conf: Este documento foi assumido que o recipiente)

nginx -c /etc/nginx/new.conf

ENV

Definir variáveis ​​de ambiente, defina a variável de ambiente, então a instrução posterior, você pode usar essa variável de ambiente.

formato:

ENV <key> <value>
ENV <key1>=<value1> <key2>=<value2>...

O exemplo seguinte é fornecido NODE_VERSION = 7.2.0, nas instruções subsequentes $ NODE_VERSION por referência:

ENV NODE_VERSION 7.2.0

RUN curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz" \
  && curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc"

ARG

parâmetros de construção, de acordo com o papel ENV. Mas o escopo não é o mesmo. ARG variáveis ​​de ambiente configuração dentro Dockerfile só é válida, que só é eficaz na janela de encaixe construção processo, construir esta variável de ambiente não está presente na imagem boa.

docker construção comando de compilação pode ser usado --build-arg <parâmetro name> = <valor> coberto.

formato:

ARG <参数名>[=<默认值>]

VOLUME

A definição de volumes de dados anónimos. Esqueça quando se inicia um recipiente montado volumes de dados automaticamente montar volumes anónimos.

papel:

  • Evite dados importantes, perdidos devido ao reinício do recipiente, o que é muito mortal.
  • recipiente Evite torna-se cada vez maiores.

formato:

VOLUME ["<路径1>", "<路径2>"...]
VOLUME <路径>

Contentores Docker executar em tempo de inicialização, podemos modificar o ponto de montagem pelo parâmetro -v.

EXPOR

Apenas declarar porto.

papel:

  • O espelhamento de portas para ajudar os usuários a entender o guardião desta serviços de imagem para facilitar o mapeamento de configuração.
  • No tempo de execução quando utilizando o mapeamento da porta aleatória, isto é, quando a janela de encaixe prazo -P, irá ser automaticamente mapeados EXPOR porta aleatória.

formato:

EXPOSE <端口1> [<端口2>...]

WORKDIR

Especifique o diretório de trabalho. WORKDIR trabalho com o diretório especificado existirá em cada edifício camada espelhada. (WORKDIR diretório especificado, você deve criar uma boa antecedência).

Construção processo de construção espelho janela de encaixe, cada nova camada é comando RUN. Apenas diretório será criado por WORKDIR sempre existiu.

formato:

WORKDIR <工作目录路径>

DO UTILIZADOR

Ele é usado para especificar os usuários e grupos de usuários executar comandos subseqüentes, mas aqui as subsequentes usuário interruptor de comando (usuários e grupos de usuários devem existir com antecedência).

formato:

USER <用户名>[:<用户组>]

EXAME DE SAÚDE

Ele é usado para especificar um programa ou comando de monitorar os serviços de contêiner janela de encaixe status operacional.

formato:

HEALTHCHECK [选项] CMD <命令>:设置检查容器健康状况的命令
HEALTHCHECK NONE:如果基础镜像有健康检查指令,使用这行可以屏蔽掉其健康检查指令

HEALTHCHECK [选项] CMD <命令> : 这边 CMD 后面跟随的命令使用,可以参考 CMD 的用法。

ONBUILD

Para atrasar a execução do edifício de comando. Simplificando, não há comando Dockerfile com ONBUILD especificado no processo de construção deste espelho não irá executar (assumindo que o espelho é o teste-build). Quando um novo uso Dockerfile refletido da construção test-build antes, esta é a implementação da nova imagem do tempo Dockerfile para construir, irá realizar Dockerfile test-build de ONBUILD no comando especificado.

formato:

ONBUILD <其它指令>

 

Publicado 109 artigos originais · Louvor obteve 101 · vista 360 000 +

Acho que você gosta

Origin blog.csdn.net/Alen_xiaoxin/article/details/105120408
Recomendado
Clasificación