[@PR1V8] Docker - Containers em Linux

[@PR1V8] Docker - Containers em Linux

@pr1v8 - adm


Índice:

   1. O que é um Container

   2. Pré requisitos / Instalação / Administração


O que é um container?

Fazendo o paralelo com uma VM, que é um recurso de virtualização bastante utilizado hoje em dia, normalmente, quando precisamos fazer um teste em um servidor web nós subimos uma VM e junto a ela são virtualizados uma memória, uma CPU, um HD, uma interface de rede e toda uma máquina por completo. 

Precisamos ainda sobre isso, adicionar um sistema operacional, que com ele, traz o kernel e todos os serviços e processos que vêm juntos com o sistema operacional. Lembrando que ainda nem adicionamos o Apache ou Nginx para iniciarmos nossos testes. 

Agora, tendo em vista que nosso objetivo final é fazer teste em servidor web, não seria muito mais lógico e rápido, virtualizar apenas o serviço de servidor web? 

É claro que a resposta dessa pergunta é sim, e um dos "caras" que faz isso é o Docker. Existem outros serviços de containers no mundo NIX, porém o que mais vem se destacando é o Docker. 

Sendo assim, resumindo bem todos os "textões" explicando containers, a função dele é virtualizar a sua aplicação, economizando tempo, recursos e também, tornar a lenda do "na minha máquina não funciona" praticamente extinto. Ficou claro? 


Então abre o shell e vamos iniciar. 


Pré requisitos / Instalação / Administração


Pré requisitos:

  • CPU 64bits
  • Kernel acima do 3.8

Obs.: no meu caso, estou utilizando o Debian 8. Isso não é pré requisito, apenas os dois itens acima. 


Instalação:

Instalando o Docker: 

curl -fsSl https://get.docker.com/ | sh 


Aguarde o download e após a instalação, rode o comando: 


docker --version

Docker version 1.11.1, build 5604cbe 


Obs.: o comando docker é apenas uma CLI (Command-line), que é utilizado para interagir/intermediar com o daemon Docker. 


Administrando Containers:

Vamos começar nossa administração de containers, porém, vamos adotar desde o início a seguinte nomenclatura "DockerHost". Toda vez que for citado DockerHost, eu estou me referindo a máquina Host, máquina matriz por assim dizer. Então, guarde isso. 


Rode o comando abaixo para visualizar containers em execução: 

docker ps 


Neste exemplo não mostra nenhum container rodando, obviamente, pois acabamos de instalar o Docker. Porém, é importante entendermos a saída desse comando antes de iniciar nosso primeiro container. 


A seguir, vou detalhar essas opções:

  • CONTAINER ID => ID de identificação do container em execução (você vai entender melhor ao decorrer, apenas grave isso)
  • IMAGE => Imagem utilizada pelo container.
  • COMMAND => Comando em execução.
  • CREATED => Data de criação do container
  • STATUS => Por quanto tempo esta UP.
  • PORTS => Porta e protocolo em que o container esta executando.
  • NAMES => Nome do container em execução.

Agora vamos subir nosso primeiro container: 


docker run -ti debian /bin/bash 

Entendendo o comando:

  • docker => CLI;
  • run => executar um container;
  • -ti => terminal interativo;
  • debian => imagem utilizada pelo container.


Note que, ao executar esse comando, o docker vai buscar a imagem especificada lá no DockerHub (depois veremos quem é esse cara), no caso "debian", poderia ser qualquer outra distro, Ubuntu, CentOS, enfim... 


Baixe essa imagem para o seu DockerHost e execute um container com essa imagem. Ao fim do comando, você deve estar em um terminal com alguns caracteres embaralhados, mais ou menos como no exemplo abaixo: 


root@623424074d6e:/# 


Isso significa que você já está dentro do container. Rode comandos como: 

ip addr show

Ou:

apt-get update 


... e veja que a saída de IP não corresponde ao IP utilizado pelo seu DockerHost, pois esse é o IP utilizado pelo container. 


Agora vamos sair do container. Para isso utilize a seguinte combinação de teclas: Ctrl+p+q

Pronto, agora você voltou para o seu DockerHost. Não saia do container com "logout", "exit", "Crtl+c"... Isso vai fazer com que o container "morra". Para sair do container e ele permanecer ativo, rodando, utilize a combinação de teclas acima. 

Para saber se o container está mesmo executando, rode o comando: 

docker ps 

A saída vai ser a mesma utilizada anteriormente, porém, com as informações que detalhei no inicio preenchidas, veja no meu caso como ficou:

Agora vamos imaginar que por algum motivo, eu preciso voltar para o meu container: 

docker attach container-id
docker attach 623424074d6e 


Após rodar o comando, veja que você voltou para o container, seu terminal voltou a ficar com os caracteres embaralhados, que geralmente corresponde ao seu container-id. 

Observe que, se você instalou algum pacote ou simplesmente testou o ping contra algum site, a internet funcionou normalmente. Para entender isso, saia do seu container sem matar ele (Crtl+p+q). 


Agora, no seu DockerHost, rode o comando: 

ifconfig 


... e verifique se na saída do comando apareceu uma interface chamada: docker0


Com certeza apareceu e é essa interface que faz um bridge entre o seu DockerHost e os containers, e vice-versa. Por isso, você consegue pingar do seu DockerHost no IP do seu container, e do seu container consegue pingar no IP do seu DockerHost. 

Seguindo com a administração de containers, não é preciso estar dentro de um container para rodar alguns comandos, você consegue executar comandos sem entrar no container através do "docker exec". 


Veja um exemplo: 

docker exec container-id ip addr show 


É possível também parar um container sem entrar nele e rodar um "exit". Por exemplo, para isso utilize o "docker stop": 

docker stop container-id 


Após parar o container rode o comando: 

docker ps 


... e veja que não há mais nenhum container em execução. 


Mas, e se você precisa ou quer subir o container novamente, por algum motivo você se apegou a ele e após para-lo se arrependeu, e pra completar, não lembra mais o container-id do container? 

Para isso, rode o comando abaixo, esse comando vai mostrar todos os container que você tem na sua máquina DockerHost. Segue exemplo: 

docker ps -a 


Veja a saída, pegue o seu container-id novamente e o reinicie, o container, e entre nele: 

docker start container-id
docker attach container-id 


Caso você tenha instalado o vim, veja que ao iniciar o container novamente, ele inicia de onde você parou, rode um history e veja os comandos que você tinha rodado. Instale outros pacotes, enfim. 

Agora, saia do container, mas deixe ele executando. Após voltar para o seu DockerHost, vamos verificar o quanto esse container está consumindo da minha máquina. 

docker stats container-id 

A saída do comando é bem intuitiva, mostrando quanto esse container utiliza de CPU, quantidade de memória utilizada, volume de tráfego, mensura consumo de I/O e quantos processos existem executando dentro do container. Esse comando é bem importante para mensurar o consumo de seu container no seu DockerHost. 


Agora, vamos ver dois comandos, o "pause" e o "unpause": 

docker pause container-id
docker unpause container-id 


Neste caso, acredito que nem preciso especificar o que cada um faz. Rode novamente o comando "docker ps" e veja que na saida "NAMES", vem algum nome pré-definido pelo próprio docker. Porém, caso você queira especificar o nome de um container, utilize o "--name". 


Exemplo: 

docker run -ti --name bob debian 


Saia do container sem fechá-lo e no seu DockerHost, rode o comando "docker ps", veja que no campo "NAMES", do novo container o nome "bob", especificado no comando anterior aparece: 

docker ps 


Agora, imagine que você não gostou do container, esse nome "bob" não te agradou ou simplesmente você quer remover um container da sua máquina. Para isso, use: 

docker rm container-id 


Rode o comando "docker ps" e veja se o container continua na sua máquina. Se continua, provavelmente é porque você executou o comando com o container em execução. Para forçar a remoção de um container, mesmo com ele em execução, rode o comando: 

docker rm -f container-id 


Para levantar mais informações sobre o seu container utilize o inspect; 

docker inspect container-id 


Obs.: um detalhe interessante, é que no segundo container que executamos, utilizamos a mesma imagem, porém, ao entrar no novo container e rodar o comando "vim", você vai ver que apesar de usar a mesma imagem, não temos as mesmas coisas que já configuramos no container anterior, para isso devemos salvar a imagem do primeiro container de forma que possa ser utilizada por futuros containers. 


Assim, poderíamos continuar de onde paramos (se essa for sua intenção). Mas isso é uma tarefa para gerenciamento de imagens em Docker e essa tarefa vai ficar para um próximo artigo. 

Por hora, se você, ainda não conhece o serviço, pratique com esses comandos para ir se familiarizando com o essa ferramenta que certamente facilitará muito seu dia a dia. 

No mínimo, seus lab's vão ficar mais interessantes pois, compare o consumo de um container comparado com o de uma VM e tire suas próprias conclusões.


####
Artigo retirado de: https://www.vivaolinux.com.br/artigo/-Docker-Containers-em-Linux/ ; todos os créditos ao autor

Telegra.ph version por: https://t.me/pr1v8
####

Report Page