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