Hoje vamos falar sobre o que é Docker, como você pode configurá-lo e como o usaremos para rodar alguns projetos futuros aqui em nosso conteúdo.
Olá, caso seja a sua primeira vez aqui, nosso conteúdo é voltado a INOVAÇÃO PARA ADVOGADOS (e para quem gosta de tecnologia/programação e está começando ou é de outra área) e, em especial, esta série é voltada à PROGRAMAÇÃO PARA INICIANTES.
Deixo aqui também o vídeo sobre este assunto que gravamos para o nosso canal no YouTube, que é um espaço em que compartilho algumas opiniões, dicas e projetos com outros interessados em tecnologia, seja você programador, advogado ou entusiasta. Aproveita para se inscrever lá e não perder os próximos vídeos, prometo que farei conteúdos interessantes e algumas lives com "coding sessions" bem legais.
Tudo certo? Então vem comigo.
O que é o Docker?¶
"Mas na minha máquina funciona"- todo dev algum dia
Pois isso é algo mais comum do que você imagina. O problema com um programa aparentemente perfeito quando é enviado ao ambiente final pode ter inúmeras razões: configurações diferentes no servidor, versões de programas auxiliares ou do próprio ambiente divergentes, sistema operacional, atualizações de pacotes... Não é possível saber exatamente como o seu programa se comportará em outra máquina.
O Docker nasceu para resolver isso (dentre outras coisas). Imagine pegar a sua máquina local, de desenvolvimento, e empacotar absolutamente todos os programas e configurações dela, rodando então exatamente esse "pacote" no ambiente final? O Docker faz isso. Com o Docker você consegue ter a segurança de que se a sua máquina local e a máquina remota (servidor) usam a mesma imagem (ou seja, o mesmo "pacote" de configurações) elas devem rodar o seu programa da mesma maneira. É como se você estivesse enviando a sua máquina para o servidor.
O nascimento do Docker |
ILUSTRANDO O DOCKER COM UMA ANALOGIA
Há muitas analogias na Internet para explicar o que é e como funciona o Docker e cada uma de suas particularidades. O próprio símbolo do Docker (a baleia que leva um monte de containers) é uma analogia do seu funcionamento.
Vamos então criar uma analogia aqui para o que é o Docker e cada uma de suas características principais: BORA FAZER UM BOLO!
1. Docker: a cozinha
Imagine que você queira fazer um BOLO. E, para fazer o seu bolo, você obviamente precisa de toda a estrutura para fazer esse bolo: forno, bancada, talheres. Você precisa de uma COZINHA.
Para fazer um bolo, temos que ter a estrutura! |
Ter uma cozinha com as ferramentas mínimas é o equivalente a ter o Docker instalado em sua máquina. O Docker fornece os recursos básicos necessários para rodarmos um sistema. Se queremos viabilizar o bolo precisamos primeiro garantir que a casa tenha uma cozinha, da mesma forma que se queremos rodar "máquinas" pelo sistema do Docker, precisamos ter o Docker instalado. E, portanto, vamos instalar o Docker antes de tudo.
🐳 Instalando o Docker
Originalmente, o Docker é uma plataforma lançada para o sistema operacional Linux e, por isso mesmo, existem muitos ótimos tutoriais para instalá-lo nas mais diferentes distribuições. Você pode, por exemplo, seguir este ótimo tutorial da Digital Ocean que ensina o passo a passo para instalar o docker no Ubuntu.
Por sinal, ainda não tem uma conta na Digital Ocean? É um ótimo serviço se você quiser ter um servidor na nuvem, com uma máquina linux (ou windows) completa. Você consegue subir o seu código e ter um serviço online 100% do tempo a um custo muito acessível. Se quiser criar uma conta lá e testar o serviço, recomendo muito -- use o meu link de indicação e ganhe um crédito de U$100 para começar: https://m.do.co/c/629292485ee8
Contudo, considerando que muitos possivelmente usem Windows ou MacOS, há hoje uma solução bastante prática para a instalação do Docker que é o Docker Desktop.
Docker Desktop |
A instalação do Docker Desktop foi bem simples e precisei reiniciar o computador após o término. Quando o programa foi reiniciado, uma mensagem de erro me alertou para a necessidade de atualização do WSL2Kernel (o "Subsistema do Windows para Linux") que nada mais é do que uma aplicação que permite que o Windows execute uma série de comandos Linux diretamente.
A mensagem de alerta |
E o link indicado para baixar o pacote do WSL2 Linux Kernel |
Seguindo o link indicado na mensagem de alerta, baixei o pacote do WSL2 e o instalei. Depois disso, ao reiniciar o Docker Desktop tudo ficou certinho, assim:
Vamos testar o Docker agora. No VSCode (ou no Powershell mesmo), executamos o comando que o Docker menciona aí na página inicial. Você vai ver que o docker vai baixar a imagem informada, vai rodar o container (vamos explicar tudo isso adiante) e vai disponibilizar o container na porta 80 da nossa máquina.
Rodando o comando Docker no terminal, tudo funcionando 🥳 |
E ao rodar o comando, o Docker Desktop já reconhece o container rodando |
Finalmente, rodando o endereço localhost, conseguimos acessar esta página que foi gerada pelo container que montamos. |
2. A Imagem Docker: a "forma" do bolo
Uma vez que já asseguramos que temos a cozinha para preparar o bolo / o Docker instalado, vamos decidir a FORMA DE BOLO que usaremos. Afinal, não tem como fazer um bolo sem ter uma forma para cozinhá-lo.A nossa imagem Docker |
3. O container Docker: o bolo mesmo
4. O registro Docker (registry): a prateleira da cozinha
Imagine que você tenha várias formas de bolo. Pode guardá-las em uma PRATELEIRA NA COZINHA, local em que ficarão armazenadas para fácil acesso sempre que você quiser um bolo redondo, um bolo quadrado ou triangular.
Criando o seu Docker Registry
Para criar o seu Docker Registry, ou a prateleira que vai guardar as formas de bolo, você pode criar uma conta no DockerHub, e podemos escolher o plano Personal (gratuito) por enquanto.
Crie a sua conta no DockerHub |
Podemos escolher o plano gratuito por enquanto |
Com o cadastro no DockerHub podemos também fazer o login da conta no Docker Desktop, deixando então o aplicativo conectado à nuvem.
5. Dockerfile: a receita do bolo
Apesar de a nossa imagem sempre sair com o mesmo formato, redondo e baixinho, podemos ter uma massa de bolo diferente conforme o caso. Assim, ainda que a base seja a mesma e o bolo pareça mais ou menos igual ao final, a RECEITA DO BOLO traz instruções importantes e detalhadas para que o conteúdo da forma (a massa do bolo) seja preparada com sucesso e os bolos saiam da forma que esperamos.
As receitas para o nosso bolo estão aí |
Essa receita de bolo é o arquivo chamado Dockerfile: ele contém instruções acerca de aspectos fundamentais que devem ser observadas na nossa imagem (na massa que vai para a forma) para que o resultado seja o esperado (o bolo saia gostoso).
No Dockerfile você tem informações sobre a base que será utilizada (por exemplo, se usaremos como base uma imagem de linux ubuntu, mini distribuição linux com node, etc.) e sobre o aplicativo que será lançado (arquivos que o compõe, volumes, base de dados).
Se você seguir a receita corretamente, conseguirá fazer um bolo com sucesso todas as vezes.
O trabalho do desenvolvedor é, em grande parte, escrever essa receita de bolo, tendo a certeza de que com a receita bem escrita o bolo será preparado com precisão. Quem prepara o bolo é um robô -- afinal, essa cozinha é muito futurista e com o Dockerfile os bolos são preparados em poucos segundos, sempre idênticos!
6. docker-compose: a festinha!
Imagine agora que temos como fazer um bolo como queremos, sempre da mesma forma. Mas em uma festa, não temos só bolo.
Temos refrigerante, docinhos, salgados e tudo mais. Imagine que assim como o bolo, cada uma dessas guloseimas tem a sua própria "forma", a sua própria "receita" e também possa ser criada repetidamente.
Let's partyyyyy!!! |
Podemos então montar uma "festa", vinculando o "bolo" com os demais itens. Para montar essa festa, passamos as instruções para um programa chamado docker-compose. O docker-compose é um programa que lê um arquivo com essas instruções, e cria todos os containers que precisamos (bolo, doces, salgados...) para montarmos a nossa festa.
Exemplo de um docker-compose |
O docker-compose então monta todos os elementos e os vincula de uma forma que faça sentido para um "sistema" funcionar. Em outras palavras, ele organiza a festa.
Os benefícios do Docker¶
Em uma era sem Docker era comum que antes de começar a trabalhar um desenvolvedor (ou alguém especializado nisso) passasse algumas horas (ou dias) configurando a máquina e sistema todo para que esse estivesse funcionando 100%.
Ainda, subir uma nova versão do sistema pra produção era uma tarefa que levava muito tempo, era algo muito tenso e que muitas vezes não funcionava! (o famoso "ué, na minha máquina funcionou"). Diferenças no sistema, alguma configuração ou versão de programas incompatíveis, enfim, tudo poderia ser um motivo para quebrar o sistema...
O bolo é sempre igual! |
Com o Docker você pode subir o mesmo "bolo" em um ambiente de testes e, uma vez testado e com a certeza que funciona, pode subir um "bolo" idêntico na produção com a paz de espírito que estará funcionando.
USANDO O DOCKER NA PRÁTICA
Já falamos como você pode montar um site profissional no artigo: Como criar um site profissional passo a passo, mas não chegamos a abordar a utilização do Wordpress. Faremos isso em um conteúdo futuro.
Requisitos necessários para rodar o Wordpress |
- Carrega o Wordpress;
- Cria uma Base de Dados MySQL (já vamos passar a senha de acesso do banco de dados no próprio arquivo de docker-compose);
- Vincula o Wordpress e a Base de Dados para trabalharem em conjunto.
Nosso docker-compose que monta a base de dados e o Wordpress |
Deixarei esse arquivo de docker-compose também no GitHub, no repositório que criei para este conteúdo, e que você pode acessar aqui: https://github.com/Dev-Lawyer/docker-for-beginners. Deixo aqui a recomendação que analise o arquivo pois deixei vários comentários que podem ser úteis para o entendimento do que estou abordando aqui.Agora, para termos um Wordpress funcionando, basta abrirmos o terminal e rodarmos o seguinte comando a partir da mesma pasta do arquivo docker-compose.yml.
docker-compose up
Sucesso na instalação! |
E voilá, temos o Wordpress funcionando! |
Nenhum comentário: