Docker - Manipulando Imagens

Olá pessoal hoje iremos começar uma série de tutoriais falando dos principais comandos que utilizamos em ambientes com Docker, e para começar vamos falar sobre imagens.


Começando com Docker


Aqui não vamos entrar em detalhes de instalação do Docker, mas vou deixar abaixo links para tutoriais que explicam estes detalhes.


O Que são Imagens


As imagens são Templates para criação dos containers, nelas adicionamos informações sobre o SO, comandos de inicialização, entre outras configurações, para ficar mais claro oque são as imagens, podemos fazer uma analogia entre imagens x containers com classes x objetos em linguagens de programação orientadas a objetos como Java, Kotlin, etc.

Principais Comandos


Utilizando o help


O comando mais útil que teremos ao manipular Docker é o help, ele pode ser utilizando em vários níveis, sendo direto no image ou em um subcomando de image, ele irá fornecer detalhes sobre como o comando deve ser executado, atributos, sintaxe, etc:

docker image --help

docker image <comando> --help


docker image --help

docker image build --help

Criando uma imagem


A criação de uma imagem consiste na leitura de um arquivo descritor contendo toda a sequência de camadas, com Docker este arquivo é o Dockerfile, na execução do comando build é importante que o arquivo Dockerfile esteja presente no diretório.

docker image build -t <<name_image>> .

Listando imagens


Podemos listar as imagens de diferentes formas, abaixo temos os diferentes comandos que podem ser utilizados, como resultado teremos a lista de imagens presentes em seu ambiente:

docker images
 
docker image list
  
docker image ls

Resultado da execução do docker images.

Procurando novas imagens


Este comando é bem interessante porque ele retorna as imagens encontradas no repositório que coincidem com a palavra procurada.

docker search <<palavra chave>>

Abaixo executamos o search procurando por node:

Resultado da procura por node.

Download de novas imagens

O comando pull serve para baixar uma imagem do repositório para nosso ambiente local, aqui vale ressaltar que uma imagem pode conter diferentes tags, com isso devemos especificar no comando qual tag gostaríamos, caso a tag não seja especificada, o padrão será o download da tag latest.

docker pull <<nome_imagem:tag>>

Baixando a imagem do cassandra.

Removendo imagens


Para remover uma imagem do ambiente local podemos executar o comando abaixo:

docker image rm <ID ou nome_imagem>

Existem alguns momentos que podemos ter problemas com o rm, por exemplo:
  • Caso exista um container ativo criado a partir da imagem, não poderemos exclui-lá;
  • Caso tenhamos a mesma imagem no ambiente com versões diferentes, devemos passar a tag que gostaríamos de excluir: <ID ou nome_imagem>:<tag>



Informações sobre a imagem


Utilizamos este comando para exibir informações detalhadas sobre a imagem, o resultado será um JSON contendo um conjunto de informações, que podem ser utilizadas em ferramentas de gestão de ambiente, ou para detalhamento de como a imagem foi criada.

docker image inspect <ID ou nome_imagem>


Salvando uma imagem em arquivo TAR


Um recurso interessante mais pouco utilizado é a possibilidade de salvar a imagem em um arquivo TAR, dessa forma podemos levar nossa imagem para um outro ambiente como um arquivo compactado.

docker image save <ID ou nome_imagem> --output <destino do arquivo>

Ao executar: docker image save nginx:1.12-alpine --output c:\\nginx-1.12-alpine.tar, teremos a criação do arquivo nginx-1.12-alpine.tar


Importando uma imagem de um arquivo TAR


É possível importar um arquivo .TAR contendo uma imagem, aqui vamos executar a importação do nginx que geramos no exemplo anterior, teremos a criação da imagem no ambiente de acordo com o nome tag usadas no comando.


docker image import <caminho e nome_arquivo_tar> <nome_imagem:tag>

 Veja abaixo a listagem após executar o import com nginx:1.12-alpine

Listagem da imagem importada do arquivo TAR.


Conclusão


Existem uma porção de outros comandos que podemos utilizar para manipular imagens Docker, a grande vantagem de trabalhar com uma ferramenta completa como estaé sua vasta documentação, que contém praticamente todos os comandos e seus resultados muito bem detalhados.

Até a próxima.

Referências




Frameworks e Microframeworks para Java e Kotlin

Olá pessoal, hoje iremos ver alguns frameworks e microframeworks que ajudam no desenvolvimento ágil com Java e Kotlin.

A Evolução do Desenvolvimento para JVM


O desenvolvimento de software evoluiu muito nos últimos anos, e com isso a exigência por agilidade no desenvolvimento e na entrega aumentaram.

A Oracle esta desenvolvendo um trabalho interessante com a plataforma Java, tendo a cada 6 meses um novo release do Java SE (atualmente na versão 13), onde atualizações e novas features estão sendo adicionadas a plataforma.

O Java EE que agora é mantido pela Eclipse com o nome de Jakarta EE, também terá uma evolução muito mais ágil, voltados para arquiteturas modernas e com a evolução de várias especificações que são muito famosas no mundo Java Enterprise.

Temos também o Kotlin, que vem ganhando um espaço muito interessante no mercado, sendo uma linguagem com muitos recursos interessantes e fácil aprendizado, e além de possuir uma total interoperabilidade com Java, permitindo usar a linguagem em qualquer lugar onde rodamos Java.

A forma de desenvolver aplicações Enterprise mudou, as linguagens e as arquiteturas evoluíram, com isso os frameworks que utilizamos precisaram seguir o mesmo caminho, vamos ver uma lista de frameworks que trazem agilidade na criação de projetos para a JVM.


Os Frameworks e Microframeworks


O conceito de Microframeworks esta em alta, e isso se deve a adoção de modelos de arquiteturas onde os softwares são divididos em pequenas partes (Microservices), onde cada artefato é responsável por uma regra especifica, com isso não precisamos de grandes frameworks com muitos recursos para atender a esta demanda, podemos utilizar algo simples e que atenda aos requisitos daquela parte em questão.

Existem outros pontos que favorecem a adoção de frameworks considerados "micro", tais como:

  • Consumo de recursos
    • Por serem menores consumem menos recursos do ambiente (Memória, Processamento, etc);
  • Deployment
    • Os artefatos gerados são menores, pois os frameworks não possuem muitas dependências;
  • Curva de Aprendizado
    • Geralmente são simples de entender, pois a quantidade de código é reduzida, e eles resolvem um problema especifico.

Exemplos de Frameworks 


São tantos Fameworks e Microframeworks que temos disponíveis para JVM que a escolha acaba sendo complexa, onde temos que analisar prós e contras para conseguir tomar uma decisão adequada para a equipe e projeto.

Vamos listar abaixo alguns que são muito adotados pelo mercado, e são utilizados com Java ou Kotlin:


Como faço para escolher o framework correto?


A escolha de um framework para um projeto não á uma tarefa simples, pois envolve diversas situações, vamos criar uma lista de critérios para poder ajudar nessa decisão:

  • Necessidades do Projeto
    • Qual problema o projeto precisa resolver?
    • Quais são os requisitos funcionais e não funcionais que devo atender ?
  • Arquitetura utilizada
    • Utilizo uma arquitetura monolítica ou microservices ?
  • Recursos do Framework
    • O framework consegue atender a minha necessidade ? Por exemplo, irei utilizar programação reativa, websockets, etc.
  • Adoção pela comunidade e mercado
    • Analisar se o framework esta sendo adotado por outras empresas, quais cases já estão sendo resolvidos com a tecnologia, etc.
  • Evolução do framework
    • O framework tem uma evolução consistente, com novos releases, correção de bugs, etc.
  • Conhecimento da Equipe
    • Minha equipe possui conhecimento sobre o framework ?
  • Curva de aprendizado
    • Qual a curva de aprendizado para minha equipe ?

Estas são algumas das análises que podemos fazer para tomar uma decisão, mas vale lembra que cada empresa pode ter necessidades diferentes de acordo com os requisitos ou equipe.

Até a próxima.