Docker - Trabalhando com contêineres (revisitado)

 Neste artigo vou apresentar um resumo dos conceitos básicos relativos ao Docker para trabalhar com contêineres.

Vamos iniciar com a definição de contêiner:

"Um contêiner é uma unidade padrão de software que empacota o código e todas as suas dependências para que o aplicativo seja executado de maneira rápida e confiável de um ambiente de computação para outro."

Os Contêineres do Docker que são executados no Docker Engine e possuem as seguintes características:

Os contêineres Docker são criados a partir de imagens que podem estar prontas e disponíveis em um repositório como o Docker Hub ou podem ser criadas de forma customizadas.

Assim, uma imagem de um contêiner do Docker é um pacote de software leve, autônomo e executável que inclui tudo o que é necessário para executar um aplicativo: código, runtime, ferramentas do sistema, bibliotecas do sistema e configurações.

A imagem é como se fosse a classe e o contêiner como se fosse uma instância dessa classe.

Definindo o ambiente

O Docker esta em toda a parte e podemos usar o Docker no Linux, no Windows, no MacOs, na Nuvem, em um DataCenter, etc.

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

Assim vamos usar o Docker no Linux em uma máquina virtual no Windows 10.

Criando o seu primeiro Contêiner Docker

O principal objetivo do Docker é criar e gerenciar contêineres. Vamos então criar o nosso primeiro contêiner Docker.

Estamos usando o modo Client do Docker e vamos usar o modo iterativo do Docker como um usuário.(Existe também o modo daemon no qual o contêiner fica rodando como processo em background)

E a primeira pergunta é : Como criar um contêiner ?

Se você abrir um terminal de comandos e digitar :  docker container --help

Vai ver todos os comandos disponíveis para gerenciar contêineres no Docker. Dentre esses comandos destacamos dois comandos que podemos usar para criar um contêiner:

  • docker container create <opçoes> <imagem> <comandos>

  • docker container run <opções> <imagem> <comandos>

Obs: Para saber detalhes do comando digite: docker container create/run  --help

Note que ambos os comandos precisam de uma imagem para poder criar o contêiner.

Então para criar um contêiner precisamos de uma imagem, e,  felizmente temos centenas de imagens prontas para uso disponíveis no Docker Hub.

Então vamos acessar o Docker Hub e escolher uma imagem para criar o nosso contêiner.

Acessando o Docker Hub e clicando em explore digite: microsoft/dotnet ou acesse diretamente este link: https://hub.docker.com/r/microsoft/dotnet

Você verá as tags das imagens das Microsoft disponíveis e a documentação das imagens.

Vamos usar a imagem microsoft/dotnet:2.1-sdk que contém o .NET Core SDK e vamos criar um contêiner chamado netcore1.

Para poder usar a imagem teremos que baixá-la localmente e isso pode ser feito pelo comando create ou podemos baixar a imagem antes de emitir o comando create usando o comando :
 
docker image pull <nome-imagem>

Abra o terminal e digite o comando:  docker image pull microsoft/dotnet:2.1-sdk

Ao final para ver a imagem local digite:  docker images

Note que a imagem possui um tamanho de 1.73 GB, é identificada pelo IMAGE ID 2668beec2c38 e possui o nome microsoft/dotnet e a tag 2.1-sdk.

Agora que temos a imagem podemos criar o contêiner digitando o seguinte comando no terminal:

docker container create --name netcore1 microsoft/dotnet:2.1-sdk

Ao final da execução do comando será emitido um hash do contêiner criado:

Para visualizar o contêiner criado podemos usar os comandos:

docker container ls -a  ou docker container ps -a

Vemos o contêiner identificado por um CONTAINER ID, o nome da imagem usada, o comando que foi executado, quando ele foi criado, qual o status atual do contêiner , a porta usada pelo contêiner e o nome que atribuímos ao contêiner :  netcore1.

Observe que o contêiner foi criado mas esta parado sem executar nada.

Vamos então criar outro contêiner usando os parâmetros -i -t para executar o contêiner no modo iterativo e anexar um terminal ao contêiner. Assim vamos entrar no contêiner e poderemos emitir comandos.

Agora vamos usar o comando docker container run para criar, executar e entrar no contêiner. Abra o terminal e digite o comando: 

docker container run -it --name netcore2 microsoft/dotnet:2.1-sdk

Ao final da execução veremos um prompt de comandos aberto no terminal:

Vamos agora criar e executar uma aplicação console .NET Core digitando os comandos:

mkdir demo
cd demo
dotnet new console
ls -g
dotnet run
exit

Veja o resultado:

Dessa forma :

1- Criamos uma pasta demo no contêiner :  mkdir demo e cd demo
2- Criamos um projeto .net do tipo console : dotnet new console
3- Listamos o contêudo da pasta demo : ls -g
4- Executamos a aplicação console :  dotnet run
5- Saimos do contêiner :  exit

Agora para visualizar os contêineres em execução ou parados digite: docker container ps -a

 

Nota: Voce pode usar ou não palavra container nestes comandos, mas recomenda-se usar para deixar claro que o comando atua sobre contêineres.

Pronto. Você criou seus primeiros contêineres Docker usando os comandos:

docker container create <nome_da_imagem>
docker container run
<nome_da_imagem>

Sendo que o comando run faz o serviço completo: o download da imagem, cria o contêiner, executa o contêiner e permite o uso do contêiner no modo interativo.

Assim como fizemos para a aplicação Console podemos criar aplicações Web e executar em um contêiner e também podemos criar mais de um contêiner que poderão conter aplicações como um banco de dados.

Tudo isso sem afetar o nosso ambiente pois tudo roda dentro do contêiner.

Para parar um contêiner que estiver em execução basta digitar :

docker container stop <identificador>

Vamos remover agora todos os contêineres criados.

Podemos fazer isso usando o comando: 

docker container rm <identificador>

ou ainda o comando : 

docker container prune 

que apaga todos os contêineres sem uso.

E com essas informações você já pode criar contêineres para aplicações .NET Core, ou, para outras aplicações.

"Todas as coisas são puras para os puros, mas nada é puro para os contaminados e infiéis; antes o seu entendimento e consciência estão contaminados.
Confessam que conhecem a Deus, mas negam-no com as obras, sendo abomináveis, e desobedientes, e reprovados para toda a boa obra."

Tito 1:15,16

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:


José Carlos Macoratti