Docker - Comandos básicos
O Docker lembra o conceito de máquina virtual onde é possível simular um sistema operacional dentro do sistema operacional principal (Exemplo: uma máquina rodando Windows 10 pode rodar dentro dela um ambiente com Linux, isolado do Windows).
Com o Docker é possível pegar seu script em qualquer linguagem (PHP, Node.JS, Python, etc), baixar uma imagem de sistema operacional apenas com os recursos básicos para rodar o script (Kernel de Linux mais a instalação do Node.JS com Mongo por exemplo) e rodar este script como se fosse uma máquina isolada dedicada apenas a este script.
Além disso é possível criar várias instancias de um mesmo script como se fossem várias máquinas separadas.
A instalação do Docker é um pouco chata e apenas máquinas com capacidade de virtualização podem rodá-lo. Algumas versões de Windows tem tido problemas para rodar o Docker. O Recomendado é que ele seja instalado em ambiente Linux que é seu lugar 'natural'. O guia para instalação pode ser acessado aqui ( DOCKER COMMUNITY EDITION (CE) ).
Dentro do diretório em que estão os arquivos de sua aplicação é necessário também um arquivo Dockerfile que possui as configurações necessárias para que o Docker saiba como montar a máquina e os recursos necessários para sua aplicação. Este arquivo é um txt normal que pode ser editado livremente por você. Neste breve guia não vamos indicar os comandos a serem colocados no arquivo Dockerfile.
Comandos básicos:
$ docker ps
Lista todos os containers que estão rodando no momento
$ docker ps -a
Lista todos os containers incluindo, além dos que estão rodando, os que rodaram e terminaram sua execução.
$ docker images
Lista todas as imagens criadas no Docker. Na lista não só estarão as imagens que você criou com seus scripts mas também as imagens que o Docker baixa com o kernel do sistema operacional e instalações de programas necessárias para rodar os seus scripts.
$ docker start <nome_do_container>
$ docker stop <nome_do_container>
$ docker restart <nome_do_container>
Operações que podem ser feitas em um container
$ docker build -t <nome_da_imagem>:<tag> .
Cria a imagem do script com o nome nome_da_imagem no diretório em que você está no momento baseado nos parâmetros configurados no arquivo Dockerfile
$ docker run --name <nome_do_container> <nome_da_imagem>:<tag>
Cria um container ou uma instância da imagem <nome_da_imagem>:<tag>.
Neste ponto é interessante dizer que a partir de uma unica imagem é possível criar vários containers rodando em paralelo. Vamos supor que você tenha um script index.js em Node que imprime na tela um 'Hello Word'. A imagem neste exemplo se chama helloword. Podemos criar três containers com diferentes nomes rodando esta mesma imagem com o script dentro. Basta rodar:
$ docker run --name hw1 helloword:latest
$ docker run --name hw2 helloword:latest
$ docker run --name hw3 helloword:latest
Serão três instancias do mesmo script/imagem. Ao dar um docker ps -a você poderá ver os três containers lá (hw1,hw2 e hw3).
$ docker run -it -p <porta_de_escuta_externa>:<porta_de_escuta_interna> --name <nome_do_container> <nome_da_imagem>:<tag>
Roda o container e faz com que ele escute a porta porta_de_escuta_externa . Ele poderia, por exemplo, escutar a porta 80 de um navegador e mandar os dados para a porta_de_escuta_interna. Por exemplo o comando docker run -it -p 80:3000 --name hw1 helloword:latest escuta a porta 80 (através de um navegador por exemplo) e envia os dados para a porta 3000 dentro do container, que se comunica com o script que está rodando.
$ docker run -d <nome_da_imagem>:<tag>
Roda um container em background com a opção -d
$ docker network connect internet <nome_do_container>
Em algumas situações o container não consegue se comunicar com o exterior (rede, internet). O comando acima libera a rede.
$ docker run --rm --name <nome_do_container> <nome_da_imagem>:<tag>
Remove o container automaticamente depois que este termina sua execução. Uma alternativa para processos que rodam em um crontab
$ docker run --rm --env-file <caminho_para_o_arquivo_de_ambiente> --name <nome_do_container> <nome_da_imagem>:<tag>
O --env-file acessa um arquivo de ambiente externo ao container com configurações. Remove o container automaticamente com --rm depois que este termina sua execução. --net
$ docker rm <nome_do_container>
Mata o container de nome nome_do_container.
$ docker rmi <nome_da_imagem>:<tag>
Destroi a imagem <nome_da_imagem>:<tag>.
Se você tentar destruir uma imagem em que existem containers rodando o Docker não vai permitir. É necessário matar os containers com docker rm <nome_do_container> que se referem àquela imagem. No exemplo do Hello Word seria necessário matar os três containers docker rm hw1, docker rm hw2, docker rm hw3 para depois destruir a imagem com docker rmi helloword:latest
$ docker version
Mostra a versão do docker
$ docker help <comando>
Ajuda do comando
$ docker logs <nome_do_container>
Exibe os logs do container
$ docker logs <nome_do_container> --tail=50 -f
Limita o log as 50 ultimas linhas
$ docker exec -it <nome_do_container> <comando>
Acessa o container e roda um determinado comando. Exemplo docker exec -it helloword bash acessa o bash dentro do container helloword.
Brincando com uma instalação do Ubuntu
$ docker run -it ubuntu bash
O Docker irá verificar se existe uma imagem do Ubuntu em sua máquina, se não existir ele baixa e cria o container automaticamente com um nome padrão. O parametro -i deixa o STDIN aberto permitindo interagir com o container. Você poderá interagir com a imagem normalmente como se estivesse no sistema operacional Ubuntu. Para sair da imagem e voltar para o Docker basta dar um exit.
Se você der um docker ps -a poderá ver o container do Ubuntu em que acabou de sair. Um docker images irá mostrar a imagem do ubuntu:latest.
Comentários
Postar um comentário