Neste artigo vou apresentar os conceitos básicos relativos ao Docker sob o ponto de vista de um desenvolvedor .NET. |
Até o momento já sabemos criar contêineres a partir de imagens, compartilhar recursos de contêineres e baixar e tratar imagens. (artigo anterior)
|
Sabemos também que existem repositórios contendo imagens prontas que podemos baixar e usar conforme a nossa necessidade. Assim, o Docker Hub contém uma ampla variedade de imagens prontas.
Ocorre que nem sempre a imagem que desejamos usar esta pronta do jeitinho que queremos, e, muitas vezes, teremos que ter uma imagem customizada. Nestes casos não tem jeito: vamos ter que criar as nossas próprias imagens.
Veremos a seguir como podemos criar imagens.
Criando imagens usando Dockerfile
O Docker constrói imagens automaticamente lendo as instruções a partir de um arquivo texto chamado Dockerfile (esse processo é conhecido como processo de build) que contém todos os comandos em ordem necessários para criar uma imagem.
Assim, podemos criar a nossa própria imagem através do arquivo Dockerfile; ele é o responsável por criar as imagens no Docker, é nele que definimos todas as regras, informações e instruções que estarão contidas mas imagens.
Mas o que é esse tal de Dockerfile ?
O Dockerfile é um arquivo responsável por realizar a criação e construção de imagens no Docker, dentro dele são definidas instruções que o Docker vai seguir para conseguir realizar a criação de uma imagem. Essas instruções são interpretadas linha a linha pelo engine do Docker.
Para definir as regras e instruções que a imagem terá, devemos utilizar comandos que o Dockerfile entende. Pense no Dockerfile como um arquivo de lote que contém instruções/comandos com uma sintaxe definida (INSTRUÇAO argumento) que devemos seguir para que uma imagem seja criada.
Assim, uma imagem Docker consiste de camadas somente-leitura onde cada camada representa uma instrução do Dockerfile.
Para poder mostrar os comandos que o Dockerfile usa e como ele funciona, vamos usar o Dockerfile para criar uma imagem, e, depois, a partir dessa imagem, vamos criar um contêiner que, a partir do debian 8, instale e inicie o servidor web nginx.
A primeira tarefa que temos que fazer é definir o passos que vamos usar para criar a imagem.
Crie uma pasta chamada dockimg no seu host, entre na pasta, e, crie um arquivo com o nome Dockerfile sem extensão: (Eu vou usar o VS Code para criar o arquivo Dockerfile)
Nota: O nome do arquivo tem que ser exatamente Dockerfile
mkdir dockimg
cd dockimg
code .
Com o Visual Studio Code aberto crie o arquivo Dockerfile e inclua o código abaixo:
Os comandos definidos no arquivo Dockerfile foram:
FROM debian:8
LABEL version="1.0.1" description="Instalar e subir nginx"
MAINTAINER macoratti@yahoo.com
RUN apt-get update && apt-get install -y nginx && apt-get clean
EXPOSE 80
ENTRYPOINT ["/usr/sbin/nginx"]
CMD ["-g","daemon off;"]
Vamos entender cada uma das instruções usadas:
FROM - Podemos definir uma imagem base através da instrução FROM seguida pelo nome da imagem que queremos utilizar;
LABEL - Permite definir informações sobre a imagem como a versão, descrição, o criador, etc.;
MAINTAINER - Permite informar quem criou o arquivo;
RUN - Permite executar comandos conhecidos pelo shell ou linux. Em nosso exemplo definimos um comando para instalar o nginx e informamos o parâmetro -y para aceitar a instalação;
EXPOSE -
Expõe a
porta do contêiner. A instrução não faz o mapeamento de porta, apenas deixa
explícito que uma determinada porta pode ser mapeada durante a criação do
container que utilizar essa imagem. (Por padrão o nginx sobe na porta 80)
ENTRYPOINT -
Define um caminho onde o comando definido em CMD
deve ser executado;
CMD - Define um ou mais comandos que serão
executados. Necessita da informação do ENTRYPOINT.
Assim as duas instruções se complementam. Para o exemplo, a execução do comando
ficaria assim:
/usr/sbin/nginx -g daemon
off;
Para o nosso exemplo estamos executando o comando para iniciar o nginx na imagem no modo iterativo.
Nota: A instrução MAINTAINER esta sendo depreciada e a informação do autor pode ser definida na instrução LABEL com a palavra maintainer.
Dessa forma já temos o arquivo Dockerfile criado para gerar a imagem. Para fazer isso usamos o comando build e informamos o nome da imagem, a tag e um ponto(.). O comando fica assim:
docker build -t macoratti/nginx:1.0 .
onde:
docker build
-> O comando
-t
-> Parâmetro usado para informar que a imagem pertence ao meu usuário
macoratti/nginx:1.0 -> O nome da imagem e a
tag atribuída à imagem
.
-> significa o diretório atual (pois dei o build dentro da pasta do
Dockerfile)
Nota: O build não trabalha com o caminho do arquivo, apenas com o seu diretório, então é preciso 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.
O comando docker build constrói uma imagem a partir de um Dockerfile e de um contexto. O contexto do build é o conjunto de arquivos na localização especificada PATH ou URL. O PATH é o diretório no seu sistema de arquivos local e a URL é a localização do repositório GIT.
Obs: Um contexto é processado recursivamente, assim PATH inclui os subdiretórios e a URL inclui o repositório e seus submódulos.
Voltando ao host na pasta dockimg e executando o comando vemos o início do processamento acima, e, abaixo a conclusão indicando que nossa imagem foi criada com sucesso:
Exibindo as imagens: docker images
Vemos a imagem macoratti/nginx:1.0 criada com a TAG igual a 1.0, o ID, data de criação e tamanho.
Agora para concluir, podemos criar um contêiner com a nossa imagem usando o comando:
docker container create -p 8080:80 macoratti/nginx:1.0
Neste comando estamos criando o contêiner usando parâmetro -d de forma que ele será executando em segundo plano(daemon).
Para conferir basta abrir o navegador em http://localhost:8080.
Para exibir o contêiner criado em execução : docker container ps
Vemos assim o nosso contêiner criado a partir de uma imagem que geramos localmente contendo o debian e o nginx.
Depois de criar a imagem podemos subir a imagem para o Docker Hub mas para isso é preciso criar uma conta no site e fazer, login e usar o comando push para enviar a imagem.
docker login
docker push <nome_imagem>
A seguir os comandos que podemos usar no Dockerfile:
Na próxima aula vamos veremos como cria uma imagem para uma aplicação ASP .NET Core MVC.
"Com o ouvir dos meus
ouvidos ouvi, mas agora te vêem os meus olhos.
Por isso me abomino e me arrependo no pó e na cinza. "
Jó 42:5,6
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Entity Framework - Conceitos Básicos - Uma visão geral - Macoratti