[Docker] Criando Dockerfiles

Até agora explicamos como o Docker funciona, como instalar, criar um container e administrá-lo. Agora veremos como colocar todas as informações de uma imagem em um único arquivo chamado Dockerfile.

 

Vamos fazer uma imagem para subir um container com o Debian 8.7 e instalar o NGINX.
Primeiramente devemos criar, no host Docker, um diretório onde ficará esse Dockerfile.

cd ~

mkdir Docker && cd Docker && mkdir Nginx && cd Nginx


Após isso, vamos criar um arquivo chamado Dockerfile. Atentar para a grafia com a primeira letra maiúscula. 
Dentro desse arquivo, vamos colocar as seguintes informações:

 

FROM debian:8.7

MAINTAINER contato@161.35.238.43

RUN apt-get update && apt-get install -y nginx

EXPOSE 80

 

Ao colocar essa informação, salve e feche o arquivo. Feito isso, vamos agora executar o Dockerfile com o seguinte comando:

# docker build .

O Docker Build não trabalha com o caminho do arquivo, apenas com o seu diretório, então é necessário informar o caminho do diretório ou, no nosso caso, como estamos no diretório onde se localiza o Dockerfile, apenas um ponto para identificar que o Dockerfile está no diretório atual.

Caso todas as informações estejam corretas, sua imagem será criada e podemos atestar isso com o “docker images”.

 

 

A imagem está criada, mas sem o REPOSITORY e a TAG, pois não repassamos essa informação. Caso queira preencher os campos, basta usar o parâmetro “-t”.

# docker build -t brunoizidorio/nginx:1.0

Utilizamos a nomenclatura repositório/nome e tag. Agora vamos detalhar o nosso primeiro Dockerfile:

  • O Dockerfile funciona no formato: INSTRUÇÃO argumento.
  • O campo FROM é o nome da imagem que utilizamos, nesse caso o Debian 8.7.
  • MAINTAINER é a informação de quem criou o Dockerfile.
  • RUN são os comandos que queremos executar na imagem que escolhemos. Aqui informamos a instalação do Nginx. Lembre-se de sempre colocar o parâmetro para aceitar automaticamente a instalação, caso contrário o Dockerfile apresentará erro, pois estará esperando uma interação.
  • Como o Nginx funciona na porta 80, vamos expor essa porta do container usando o EXPOSE.

 

O primeiro argumento do Dockerfile deve ser sempre o FROM, seguido da imagem e versão que será utilizada. Caso não seja informada a versão, o Docker vai procurar a mais atual do seu repositório oficial. Abaixo, outros argumento utilizados no Dockerfile:

  • MAINTAINER: quem escreve o dockerfile;
    Ex: MAINTAINER contato@161.35.238.43
  • RUN: executa os comandos dentro do container;
    Ex: apt-get update && apt-get install -y nginx
  • ADD: adiciona arquivos, diretórios do host ou de uma url para dentro de um diretório do container, mas não funciona com arquivos compactados;
    Ex: ADD arquivo.txt /home/bruno/
  • CMD: informa os parâmetros que serão usados no ENTRYPOINT. Também pode ser utilizado para informar qual comando será executado após a criação do container, mas pode ser sobrescrito caso seja passada algum parâmetro de execução de algum comando na hora de executar o container;
    Ex: CMD [“nginx”, “-g”, “daemon off;”]
  • LABEL: coloca um metadado para o container;
    Ex: LABEL description=”Container do Nginx”
  • COPY: copia arquivos e diretórios do host para dentro de um diretório do container. Funciona com com arquivos compactados;
    Ex: COPY arquivo.txt /home/bruno/
  • ENTRYPOINT: informa qual será a aplicação principal do container, sendo executada após a inicialização do container. Diferente do CMD, não será sobrescrita. Caso a seja finalizada a execução do programa definido no ENTRYPOINT, o container será encerrado;
    Ex: ENTRYPOINT [“nginx”, “-D”, “FOREGROUND”]
  • ENV: cria uma variável de ambiente;
    Ex: meunome=”Bruno Izidório”
  • EXPOSE: expõe a porta informada do container;
    Ex: EXPOSE 80
  • USER: define qual será o usuário padrão para o container. Caso não seja definido, o padrão é o usuário root;
    Ex: USER bruno
  • WORKDIR: determina qual diretório será o padrão ao fazer o login;
    Ex: WORKDIR /home/bruno/downloads
  • VOLUME: permite a criação de um diretório no host onde fica armazenado os dados do container;
    Ex: VOLUME /home/docker/nginx:/usr/share/nginx/html

 

Ao som de The Neal Morse Band – So Far Gone

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.