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:
CONTAINER ID | IMAGE | COMMAND | CREATED | STATUS | PORTS | NAMES
623424074d6e | debian |"/bin/bash" | 7 minutes ago | Up 7 minutes | | berserk_saha
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
CONTAINER | CPU % | MEM USAGE / LIMIT | MEM % | NET I/O | BLOCK I/O | PIDS
623424074d6e | 0.00% | 0 B / 0 B | 0.00% | 2.756 MB / 86.9 kB | 2.179 MB / 7.627 MB | 0
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.