O Docker é um conjunto de ferrametas criada para facilitar o uso de contêineres, algo que não é tão novo no mundo Linux uma vez que projetos como o LXC já existem a muitos anos, porém o seu uso é complexo e a curva de aprendizado é bastante grande. Foi para resolver este e outros problemas que o Docker nasceu. Inicialmente criado por uma empresa independente, teve tanto sucesso que a própria empresa mudou seu nome posteriormente para Docker Inc..
Mas por que você deveria se importar com contêineres? Existe uma série de motivos que fazem os contêineres serem interessantes e uma melhor alternativa que as máquinas virtuais. O principal deles é que contêineres usam bem menos recursos da maquina hospedeira, na prática cada contêiner é apenas um processo isolado, diferente de toda a sobrecarga que existe quando se usa uma máquina virtual, nesta onde se tem todo um sistema operacional convidado que consome recursos independente da sua aplicação, apenas para manter este sistema operacional funcionando. Isso permite que você execute muito mais aplicações e contêineres no mesmo equipamento físico.
Outra questão importante que nem sempre é considerado quando se usa máquinas virtuais, é que contêineres são efêmeros, ou seja, um contêiner não deve armazenar dados importantes em seu filesystem
.
Aprenda neste tutorial como usar e aproveitar o máximo do Docker no seu dia a dia como desenvolvedor de software.
Instalação
A forma de instalação do docker depende do sistema operacional que você está usando. No caso do Linux os contêineres são nativos e devido a isso você pode instalar a última versão com o simples comando abaixo:
|
|
O comando acima irá fazer o download de um script que fará a instalação do docker na maioria das distribuições Linux, e executa a instalação usando o bash
.
Para fazer a instalação em outros sistemas operacionais, clique no link abaixo para fazer a transferência do instalador:
A instalação no Windows e Mac são bem simples, basta seguir o passo a passo ao executador o instalador. Perceba que o Docker Desktop funciona de forma diferente, como o docker é nativo apenas de Linux e se você quiser rodar contêineres Linux em outro sistema operacional, o Docker Desktop irá criar uma máquina virtual para executar os contêineres. Sendo que no Windows é usado por padrão o HyperV e no Mac o VirtualBox.
Algo importante de se notar é que existem contêineres nativos para Windows, porém saiba que imagens de contêineres Linux não são compatíveis com imagens de contêineres Windows, contudo usando contêineres Windows no sistema operacional Windows você terá a mesma experiência e desempenho semelhantes a contêineres Linux sendo executados em alguma distribuição.
A partir daqui tudo que será mostrado estará sendo executado em ambiente Linux, mais especificamente usando uma máquina virtual com CentOS, mesmo assim os comandos irão funcionar em qualquer outro sistema operacional que use contêineres Linux.
Começando
Uma vez instalado o docker você pode abrir o terminal e executar o comando docker
que irá listar todas as opções disponíveis.
|
|
Primeiro de tudo, não se assuste com a quantidade de comandos disponíveis, muitos deles são específicos para realizar certas tarefas, porém vamos por partes. Vamos fazer o clássico hello-world
que é feito em toda linguagem de programação, porém no docker.
|
|
O comando acima executa o subcomando run
que basicamente cria e executa um novo contêiner. O único parâmetro que realmente é obrigatório para executar um contêiner é o nome da imagem do contêiner. Uma imagem de contêiner é um pacote executável leve, standalone, que incluí tudo necessário para executar a aplicação, como código, runtime, ferramentas de runtime, bibliotecas e configurações.
Na saída do programa podemos ver que o docker tentou buscar localmente a imagem hello-world
, porém como nesse caso não existia ele buscou do repositório padrão, que é o Docker Hub. Logo após iniciou o download de cada camada da imagem, cada camada é uma mudança na imagem, como o hello-world
é simples, possuí apenas uma única camada.
Por fim, após o download do imagem é criado uma instância da imagem que é o contêinere em si, podendo ver então o texto do Hello from Docker!
Conceitos importantes
Além do que vimos acima, existem diversos outros conceitos importantes que você deve saber antes de começar a usar o docker, ou até mesmo para usar todo o potêncial do mesmo.
Volumes
O primeiro conceito importante é o de volumes. Volumes são usados para armazenar dados que não são efêmeros, isto é, dados que não são apagados quando o contêinere é excluído. Usando o cliente docker você faz o bind de volumes, diretórios ou arquivos locais da sua máquina para o contêiner, dessa forma qualquer alteração feita localmente é refletida dentro do contêiner e vice versa.
Para entender melhor vamos a um exemplo prático, execute em qualquer diretório o comando abaixo para criar um arquivo.
|
|
Agora execute o comando usando o docker abaixo para criar um contêiner do Ubuntu e fazer o bind do diretório atual para o diretório /exemplo
dentro do contêiner.
|
|
A princípio nada de mais parece ter mudado, mas vá para o diretório /exemplo
usando o cd
.
|
|
Perceba que temos o nosso arquivo meuarquivo.txt
listado, vamos escrever algo nele e sair do contêiner.
|
|
Saindo do contêiner podemos ver que nosso arquivo continua existindo localmente e agora com o conteúdo que escrevemos nele.
|
|
Pronto! agora se quisermos executar outro contêiner o arquivo continuará tendo o conteúdo que escrevemos.
|
|
Usando volumes você pode por exemplo executar o seu código local em um contêiner da linguagem que você usa, enquanto edita no seu editor de texto ou IDE localmente, tudo de maneira fácil e prática.
Vincular Portas
Outro conceito importante de entender é como o docker vincula portas locais com as portas do contêiner. Muitas vezes você executa algum serviço que executa numa porta, como servidores WEB ou até mesmo bancos de dados. Para ter acesso a esses serviços localmente você vincular as portas da sua máquina a portas do contêiner. Para entender melhor vamos novamente a um exemplo prático.
Digamos que você queira rodar o servidor Nginx, para isso basta executar o comando abaixo:
|
|
Perceba o uso da flag -p
passando o valor 8080:80
, isso significa que está sendo feito um vinculo, ou bind, da porta 8080 local com a porta 80 do contêiner, fazendo com que requisições que sejam feitos a porta 8080 local sejam redirecionadas a porta 80 do contêiner, é importante ressaltar pode-se ter apenas um vínculo por porta, não sendo possível ter 2 ou mais contêineres vinculados a mesma porta. Experimente acessar o endereço http://localhost:8080/ no seu navegador para ver a página padrão do Nginx.
Exemplos
Se você ainda não se convenceu do potêncial do docker, veja abaixo alguns exemplos mais comuns e veja por você mesmo a praticidade dessa ferramenta que revolucionou o mundo do DevOps.
Banco de dados (PostgreSQL)
Execute uma nova instância do PostgreSQL localmente na porta 5432.
|
|
Execute o comando acima e tente conectar com algum cliente do PostgreSQL na porta 5432 da sua máquina com o usuário postgres
e senha secret
.
Nginx
Execute o servidor Nginx passando o diretório atual como root.
|
|
Execute o comando acime e tente acessar o endereço http://localhost:8080
para ver suas páginas estáticas que você tem localmente na sua máquina.
Redis
Execute um servidor do Redis localmente na sua máquina na porta 6379.
|
|
Python
Teste seu código Python em diferentes versões de forma rápida e fácil.
Arquivo main.py
de teste.
|
|
Python 3.6
|
|
Python 3.8
|
|
Ubuntu
Execute uma sessão interativa do Ubuntu localmente.
|
|
Conclusão
O docker é uma alternativa perfeita para ajudar no desenvolvimento de software, com ele você consegue rapidamente criar seu ambiente de desenvolvimento, testar seu código em diferentes versões, criar servidores de banco de dados, servidores WEB e muito mais, tudo de forma rápida, isolada e confiável.
E ai gostou do docker? Quer ver mais conteúdo sobre, tem alguma sugestão? Comente abaixo e nos vemos na próxima.