Conheça o HubJur

Tutorial Docker para iniciantes

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?¶


Imagine que você programou um código lindo, tudo funcionando, sem bugs. Você finalmente sobe o seu código para o ambiente final (produção) e, para o seu desespero, nada funciona! 

"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.


Pra quem está perdido, o que fizemos aqui? Instalamos a plataforma Docker em nossa máquina e rodamos um comando que busca uma "foto" de uma máquina completa na Internet e a replica em nossa máquina local. A máquina que "replicamos" aqui é uma cópia idêntica da máquina que a pessoa que criou essa imagem disponibilizou. Se rodarmos o mesmo comando de um outro computador, a máquina criada será idêntica também. E esse é o poder do Docker.



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

Com a forma de bolo podemos criar quantos bolos quisermos, e eles sairão sempre iguais: no caso, redondos e baixinhos. A imagem Docker tem o mesmo racional: com uma imagem você pode gerar inúmeros "containers", que são produzidos com base nessa "forma de bolo". A imagem (forma) funciona como um carimbo para cada container (cada bolo).


3. O container Docker: o bolo mesmo

Como já mencionamos acima, cada BOLO produzido com a forma é um container. Ele em si tem todas as propriedades de bolo, funciona como um bolo e pode ser comido. Você pode fazer um bolo na cozinha da sua casa, e ao usar a mesma imagem (forma) para fazer um bolo na casa da sua mãe, pode criar um bolo com as mesmas características (redondo e baixinho).



Em outras palavras, se você quiser fazer um bolo igual ao anterior, basta usar a mesma forma: não precisa comprar (ou pior, fabricar) outra forma. Os containers sempre seguirão o que é definido na imagem.


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.


O Docker Registry (registro Docker) funciona da mesma forma: você pode armazenar ali as suas imagens Docker e, quando precisar usar, basta pegá-las.

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

Para você ter uma ideia do poder do Docker, vamos usá-lo na prática. Saiba que muitos dos principais projetos existentes na Internet hoje estão "dockerizados" e você pode usá-los sem grande esforço.

Para exemplificar o que podemos fazer, vamos rodar um container com uma imagem  do Wordpress

Se você não sabe, o Wordpress é uma plataforma muito utilizada para criar conteúdo online, possibilitando que você crie blogs, lojas virtuais (e-commerce), portfólios, sites profissionais e muito mais. É uma alternativa "mais completa" que plataformas existentes hoje como Blogger, Tumblr, Wix e demais, permitindo um alto grau de personalização e contando com muitos plugins disponíveis.
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.
Para este conteúdo, basta você saber que a instalação do Wordpress depende que a sua máquina tenha um servidor web instalado (como Apache ou Nginx) com suporte à linguagem de programação PHP e um banco da dados como MySQL ou MariaDB. Veja aqui no site oficial:

Requisitos necessários para rodar o Wordpress

Portanto, se você quiser usar o Wordpress deverá obrigatoriamente ter esses serviços instalados na máquina em que irá rodá-lo. Mas vamos ver agora o que podemos fazer com o Docker. Acessando a imagem oficial no DockerHub para o Wordpress, encontramos o seguinte:


Ao invés de configurar toda uma máquina com PHP, Apache e MySQL, vamos criar um arquivo para rodar com o docker-compose que: 
  • 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

A partir daí, basta acessar do navegador o endereço http://localhost:8000 e você terá acesso ao Wordpress, podendo fazer a configuração dele da mesma forma que faria se tivesse instalado tudo.

Configuração do Wordpress como ocorre na instalação padrão dele

Sucesso na instalação!

E voilá, temos o Wordpress funcionando!

Conseguimos então colocar o Wordpress de pé simplesmente rodando um comando simples. E o melhor: se precisarmos rodar novamente essa configuração em uma máquina nova, basta rodar o comando do docker-compose.



O DOCKER FACILITA A SUA VIDA

Como é fácil perceber, o Docker facilita a sua vida e pode ser muito benéfico para a sua vida como desenvolvedor. Depois de trabalhar com docker, provavelmente você não vai mais querer voltar a configurar infraestrutura "na unha".

É ainda possível criar estruturas mais complexas para trabalhar com o Docker, com a construção de containeres em múltiplos estágios e instalações interessantes que potencializam a automação da "subida" (deploy) do sistema para produção (CD/CI). Falaremos disso no futuro, em conteúdos específicos.

É isso, continuem estudando e explorando o que essas ferramentas incríveis tem a oferecer.

Happy coding!

/* Fim do post, até a próxima */
Tutorial Docker para iniciantes Tutorial Docker para iniciantes Reviewed by Octavio Ietsugu on outubro 24, 2021 Rating: 5

Nenhum comentário:

Tecnologia do Blogger.