Neste artigo vou apresentar os conceitos básicos relativos ao Docker mostrando como criar uma imagem usando o Dockerfile. |
Se você não conhece o Docker sugiro que acompanhe a série de artigos : Docker uma introdução básica
Já sabemos que podemos criar contêineres a partir de imagens prontas que podemos baixar do Docker registry.
Mas e se quisermos criar nossas próprias imagens ? Como podemos fazer ?
|
Para criar uma imagem podemos usar um arquivo Dockerfile.
Um Dockerfile é um arquivo texto que descreve as etapas que o Docker precisa para preparar uma imagem, incluindo a instalação de pacotes, criação de diretórios e definição de variáveis de ambiente entre outras coisas.
Vamos propor um exemplo bem simples: Você deseja criar uma imagem baseada na imagem do debian onde vai instalar o nginx e vai exibir uma página html.
Nota1: O Nginx é um servidor HTTP e proxy reverso, bem como um servidor para proxy de email IMAP/POP3, escrito por Igor Sysoev desde 2005.
Nota2: O Debin é uma Distribuição Linux.
Neste artigo eu vou usar o Docker no Linux e para isso eu usei o VirtualBox da Oracle no Windows 10 Pro e crie uma maáquina virtual Linux onde instalei o Ubuntu 18.04.
Para saber instalar o Docker e como criar um ambiente Linux no Windows 10 com o Ubuntu 18.04 veja este artigo: Instalando o Docker no Linux
Nota: Você também pode usar o Docker for Windows.(usando contêineres Linux)
Criando sua primeira imagem usando o Dockerfile
No ambiente Linux abra um terminal de comandos e crie uma pasta chamada demo1 que será nossa pasta de trabalho.
A seguir abra o seu editor de códigos preferido, eu vou usar o Visual Studio Code digitando: code .
Com o Visual Studio Code aberto na pasta do projeto crie um arquivo chamado DockerFile (sem extensão) com o seguinte conteúdo :
Abaixo temos o código usado no aquivo Dockerfile:
# define a imagem base
FROM debian:latest
# define o mantenedor da imagem
LABEL maintainer="Macoratti"
# Atualiza a imagem com os pacotes
RUN apt-get update && apt-get upgrade -y
# Instala o NGINX para testar
RUN apt-get install nginx -y
# Expoe a porta 80
EXPOSE 80
# Comando para iniciar o NGINX no Container
CMD ["nginx", "-g", "daemon off;"]
|
Observe que definimos comandos no arquivo Dockerfile que serão processados pelo Docker.
Vejamos:
FROM - 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.
LABEL: coloca um metadado para o container;
RUN: executa os comandos dentro do container;
EXPOSE: expõe a porta informada do container;
CMD: Informa o comando que será executado após a criação do container, e também pode ser usado para definir os parâmetros que serão usados no comando ENTRYPOINT.
Além dos comandos usados temos também os comandos :
ENTRYPOINT - Define o aplicativo padrão usado
toda vez que um contêiner é criado a partir da imagem.
Se usado em conjunto com o CMD, você pode remover o
aplicativo e apenas definir os argumentos no CMD.
ENV - Define/modifica as
variáveis de ambiente dentro dos Containers criados a
partir da imagem.
COPY - Copia arquivos do seu ambiente para o contâiner.Ex: COPY origem destino
Processando o arquivo Dockerfile
Muito bem já temos o arquivo Dockerfile que descreve as etapas que serão executadas para criar a imagem.
Para processar o arquivo Dockerfile usamos o comando : docker build -t <imagem> .
Vamos supor que quero criar a imagem com o nome : macoratti/nginx:1.0
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.
Executando o comando temos o processamento do Dockerfile:
E ao final teremos a imagem macoratti/nginx:1.0 criada:
Pronto !
Acabamos de criar nossa imagem customizada a partir da imagem do debian que contém o nginx instalado.
Para conferir digite o comando : docker images
Para testar a imagem vamos criar um contêiner:
docker container run --name teste -p 80:80 macoratti/nginx:1.0
Agora basta abrir um navegador e acessar
http://localhost para
visualizar a página padrão do
nginx sendo exibida:
Vemos assim nosso contêiner em execução a partir da nossa imagem criada usando o Dockerfile.
Para distribuir a sua imagem
basta fazer o login na sua conta
criada no Docker Hub usando o comando :
docker login
Roteiro
para criar a conta no Docker Hub
1- Acesse a
página do Docker Hub e clique na opção
Create Account |
Lembrando que antes de enviar a imagem você deve 'taguear' a imagem usando o comando : docker tag
docker tag <imagem_id> <sua_conta>/<nome_image>:tag
A seguir envie a sua imagem para repositório via comando :
docker push <nome_da_sua_conta>/sua_imagem:tag
"Porque Deus não nos destinou para a ira, mas para a aquisição da salvação, por nosso Senhor Jesus Cristo."
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
ASP .NET Core - Acesso ao MySQL c/ EF Core usando o Docker no Linux - I