E Porque Hoje é Sexta – 002

Frase do dia

Duas coisas são infinitas: o universo e a estupidez humana. Mas, em relação ao universo, ainda não tenho certeza absoluta. – Albert Einstein

Vida de suporte!

Uma imagem para cada dia…

E para finalizar…

Gostou? Se tiverem algumas sugestões ou dicas deixem nos comentários.

DOCKER: Comandos básicos

Se você trabalha com sistemas linux, sem dúvidas já deve ter ouvido falar sobre os comandos Docker, utilizados com frequência. De modo simples, o Docker é um software que permite a criação de containers no sistema linux. Assim, existem inúmeros comandos Docker, que podem ser adotados. Mas, muitos profissionais ou iniciantes na área ainda ficam confusos sobre quais são os comandos básicos, mais utilizados no ramo.

Por isso, pensando em te ajudar, trouxemos este conteúdo completo, com tudo o que você precisa saber sobre os comandos Docker e suas aplicações.

Docker info

Quando nós acabamos de subir o Docker Engine, nós utilizamos esse comando para verificarmos as informações do nosso Docker Host.

docker info

Docker version

Com o version nós conseguimos ver a versão do nosso Client, para esse artigo estou utilizando o Windows e o Server que para esse exemplo estamos utilizar o Linux. Quanto ao OS/Arch do server nós podemos trabalhar com Windows ou Linux, caso você esteja utilizando o Docker for Windows basta clicar em Swith to Windows Containers que ele irá realizar essa alteração.

docker version

Docker images

Nós utilizamos ele para listarmos as imagens que nós temos no nosso host, como eu acabei de instalar o Docker no meu Windows a lista está vazia como podemos ver na imagem a baixo:

docker images

  • Repository: repositório;
  • TAG: tag utilizada no repositório;
  • IMAGE ID: o id na nossa imagem;
  • Created: data de quando nós criamos a nossa imagem;
  • Size: tamanho da imagem;

Docker search

Para que possamos procurar uma imagem, nós podemos utilizar o comando a baixo com o parâmetro nome Ex.: ubuntu, dotnetcore, node… etc, assim ele irá buscar as imagens que são compatíveis com o nosso server que para esse exemplo estamos utilizando o Linux.

docker search (parametro)

Docker pull

Quando encontrarmos a imagem que precisamos para a nossa aplicação, nós precisamos baixar ela para o nosso host, para esse exemplo nós iremos utilizar uma imagem do Node.js

docker pull (parametro)

docker images

O Docker images é responsável por gerenciar todas as imagens do container e conta com uma sequência de subcomandos como mostra a lista abaixo, mas não abordarmos aqui.

  • docker image build;
  • docker image history;
  • docker image import;
  • docker image inspect;
  • docker image load;
  • docker image ls;
  • docker image prune;
  • docker image pull;
  • docker image push;
  • docker image rm;
  • docker image save;
  • docker image tag;
docker images
docker image (parametro)

Docker run

Para que nós possamos criar um contêiner, nós precisamos de uma imagem. Caso você não tenha essa imagem no seu host ainda ele irá até o repositório central e irá baixar ela para o seu host, em seguida ele irá criar o contêiner. Vamos criar um exemplo com o famoso Hello World. Para isso, execute o comando a baixo:

docker run (parametro)

Notem na imagem acima que o docker procurou a imagem no nosso host, como ele não encontrou ele baixou ela do docker hub. Agora execute o comando docker images novamente no seu terminal e note que temos uma nova imagem.

Os parâmetros mais utilizados na execução do container são:

  • -d Execução do container em background
  • -i Modo interativo. Mantém o STDIN aberto mesmo sem console anexado
  • -t Aloca uma pseudo TTY
  • –rm Automaticamente remove o container após finalização (Não funciona com -d)
  • –name Nomear o container
  • -v Mapeamento de volume
  • -p Mapeamento de porta
  • -m Limitar o uso de memória RAM
  • -c Balancear o uso de CPU

Docker ps

Agora vamos verificar o status do nosso contêiner, execute o comando acima no seu terminal, ele irá retornar a imagem a baixo:

Os parâmetros mais utilizados na execução do container são:

  • -–all, -a, que mostram todos os contêineres em execução;
  • -–filter, -f, responsável por filtrar a saída com base nas condições fornecidas;
  • -–format, que apresenta todos os containeres impressos, usando o modelo de template Go;
  • -–last , -n -1, capaz de mostrar apenas o número de últimos contêineres criados (inclui todos os estados, sejam os em execução ou não);
  • –-latest , -l, responsável por mostrar o último contêiner criado (que também pode incluir todos os estados);
  • -–no-trunc, impede que a saída seja “truncada”;
  • -–quiet , -q, que permite a exibição apenas dos IDs de todos os contêineres apresentados;
  • -–size , -s, capaz de calcular e apresentar o tamanho total dos arquivos.
docker ps (parametro)

Notem que ele está retornando uma lista vazia, isso acontece porque os contêineres nascem e morrem, quando nos executamos o comando docker run hello-world ele realizou todos os processos e morreu. Para que possamos ver ele podemos executar o comando docker ps com o parâmetro -a, assim teremos uma lista de todos os contêineres do nosso host.

docker ps -a

Docker status

Para que possamos ter informações sobre um contêiner nos executamos o comando acima, ele nos retorna dados como:

docker stats (id ou apelido do container)
  • CONTAINER — ID do Container;
  • CPU % — uso de CPU em porcentagem;
  • MEM USAGE / LIMIT — Memória usada/Limite que você pode ter setado;
  • MEM — uso de memória em porcentagem;
  • NET I/O — I/O de Internet;
  • BLOCK IO — Outros processos de I/O;

Vejamos a baixo alguns dos parâmetros que podemos utilizar com ele:

  • –all, -a, Mostrar todos os contêineres (o padrão mostra apenas em execução)
  • –format, Formate a saída usando um modelo personalizado: ‘tabela’: imprima a saída em formato de tabela com cabeçalhos de coluna (padrão) ‘tabela TEMPLATE’: imprima a saída em formato de tabela usando o modelo Go fornecido ‘json’: imprima em formato JSON ‘TEMPLATE’: imprima saída usando o modelo Go fornecido. Consulte https://docs.docker.com/go/formatting/para obter mais informações sobre como formatar a saída com modelos
  • –no-stream, Desative as estatísticas de streaming e obtenha apenas o primeiro resultado
  • –no-trunc, Não trunque a saída

Veja um exemplo:

Para listar todas as estatísticas dos contêineres com seus nomes, porcentagem de CPU e uso de memória em formato de tabela, você pode usar:

docker stats –format “table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}”

Docker inspect

Caso você precise de mais detalhes sobre a sua imagem ou o seu contêiner, podemos utilizar o comando inspect. Ele irá retornar um json com todas as informações relacionadas a nossa busca. No exemplo a baixo nós estamos executando ele na nossa imagem node.

docker inspect (id da imagem ou container)

Docker rmi

Caso você tenha baixado uma imagem errada ou queira deletar alguma por um outro motivo, basta executar o comando a cima que ele deleta ela do seu host. Vamos deletar a nossa imagem que baixamos no exemplo anterior.

docker rmi (nome da imagem)

Docker exec

Com o exec nós podemos executar qualquer comando nos nossos contêineres sem precisarmos estar na console deles.

docker exec (id_container ou nome_container)

Vejamos a baixo alguns dos parâmetros que podemos utilizar com ele:

  • -i permite interagir com o container
  • -t associa o seu terminal ao terminal do container
  • -it é apenas uma forma reduzida de escrever -i -t
  • –name algum-nome permite atribuir um nome ao container em execução
  • -p 8080:80 mapeia a porta 80 do container para a porta 8080 do host
  • -d executa o container em background
  • -v /pasta/host:/pasta/container cria um volume ‘/pasta/container’ dentro do container com o conteúdo da pasta ‘/pasta/host’ do host

Para que possamos testar ele, iremos baixar uma imagem do ubuntu. Para isso, execute o comando a baixo no seu terminal:

docker run -it -d ubuntu /bin/bash

Execute o comando docker ps agora e note que o nosso contêiner esta em up.

docker ps

Até aqui nós temos nenhuma novidade, vamos agora criar um novo diretório dentro do nosso contêiner sem precisarmos entrar nele.

docker exec 8b54c76e81b7 mkdir /temp/

Agora vamos criar um arquivo dentro do nosso diretório temp que acabamos de criar dentro do nosso contêiner:

docker exec 8b54c76e81b7 touch /temp/dotnetsp.txt

Docker attach

Vamos agora entrar dentro do nosso contêiner e verificar o nosso novo arquivo criado. Para isso execute o comando acima + o nome do ou id do seu contêiner, podemos observar que a execução dele irá nos dar acesso de root no nosso contêiner.

docker attach (id_container ou nome_container)

Agora execute o comando ls /temp para verificar o nosso arquivo dentro diretório que nós criamos chamado temp:

para sair do contêiner execute o comando exit.

Docker start

Quando nós saimos do nosso container com o comando exit, ele mata o nosso processo. Notem na imagem a baixo que ele não está mais sendo listado no nosso comando docker ps:

docker start (id do container)

Para que possamos dar um dettach ou em outras palavras sair sem fecharmos ele, nós precisamos dos comandos: Ctrl+p + Ctrl+q. Para que possamos subir ele novamente vamos utilizar o comando start.

Agora execute o comando attach novamente para entrar no seu contêiner e depois os comandos: Ctrl+p + Ctrl+q, em seguida podemos verificar que o nosso contêiner ainda está em execução:

Docker stop

Para que possamos parar um contêiner que esteja sendo executado, nós utilizamos o comando stop. Sua execução é bem simples, nós passamos o mesmos parâmetros que utilizamos no start.

docker stop (id ou nome container)

Mapeamento de Portas

-p host:container

Para que possamos testar o mapeamento de portas iremos baixar a imagem do ngnix e passarmos para ele a porta 80. Para isso execute o comando a baixo no seu terminal:

docker run -it -p 8080:80 nginx

Ele irá baixar a imagem do nginx para o seu host e abrir ele na porta 8080 do seu host. Para testar assim que ele finalizar a execução do comando acima, abra no seu navegador o endereço: http://localhost:8080/, podemos ver o seu retorno na imagem a baixo.

Mas executando ele dessa forma nós ficamos com o nosso console travado conforme podemos ver na imagem a baixo:

Para que possamos ter um contêiner sendo executado em background, nós podemos utilizar eles em segundo plano. Para isso, só precisamos passar o comando -d. Caso ainda esteja o seu contêiner ainda esteja sendo executado, execute o comando control c para sair dele, em seguida execute o mesmo comando anterior só que agora com o parâmetro -d:

docker run -it -d -p 8080:80 nginx

Por fim, execute o comando docker ps e veja ele na lista:

Com isso nós passamos por alguns dos comandos principais do docker.

Gostou? Se tiverem algumas sugestões ou dicas deixem nos comentários.

Fonte: programadriano, certificacaolinux, docs.docker