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 <其它指令>