Construindo sua primeira aplicação com Docker

Docker é uma ferramenta incrível para quem desenvolve software, tornando muito mais fácil criar, implantar e rodar aplicações usando contêineres. Mas o que isso quer dizer no dia a dia?

Pense em poder garantir que seu app funcione direitinho, não importa onde ele esteja rodando. Com Docker, você embala sua aplicação e todas as suas dependências em um contêiner leve e portátil. Isso significa que, seja no seu computador ou em um servidor distante, sua aplicação vai rodar sempre do mesmo jeito. Neste artigo, vamos passar pelos conceitos básicos do Docker e mostrar como criar e rodar sua própria aplicação dentro de contêineres.

Um hello world

Docker torna a vida dos desenvolvedores muito mais fácil quando se trata de criar e gerenciar ambientes de desenvolvimento consistentes. Ele usa contêineres, que são como pequenos ambientes isolados e leves, para rodar suas aplicações com tudo que elas precisam. Ao contrário das máquinas virtuais, que exigem uma cópia completa de um sistema operacional, os contêineres compartilham o mesmo kernel do sistema onde estão rodando, o que os torna muito mais eficientes em termos de recursos.

Por conta disso, Docker facilita muito mover suas aplicações entre diferentes ambientes de desenvolvimento e produção. Para começar a brincar com ele, recomendo dar uma olhada no nosso repositório e seguir os passos para a instalação. Lá, você também vai encontrar alguns exercícios que vamos usar ao longo do estudo.

Primeiros passos

Se seguiu nosso material, agora você já deve ter o docker instalado e está pronto para criar e executar seu primeiro contêiner. Experimente executar o seguinte comando no terminal:

				
					docker run hello-world
				
			

Este comando baixa uma imagem chamada hello-world e a executa em um contêiner. A imagem hello-world é uma maneira rápida e fácil de verificar se o Docker está funcionando corretamente. Ao rodar esse comando, você verá uma mensagem confirmando que o Docker foi instalado com sucesso e está pronto para uso.

Agora que você já experimentou rodar um container Docker, vamos dar o próximo passo: construir sua própria imagem Docker. Para isso, utilizaremos um Dockerfile, que é essencialmente um script que define as instruções necessárias para criar uma imagem. Cada linha de um Dockerfile executa uma tarefa específica, como definir uma imagem base, copiar arquivos para dentro do contêiner, ou expor portas para comunicação externa.

Um exemplo básico de Dockerfile pode ser o seguinte:

				
					FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
				
			

Neste exemplo, estamos utilizando uma imagem base do Node.js, definindo um diretório de trabalho, copiando arquivos de configuração, instalando dependências e, finalmente, expondo a porta 3000, onde nossa aplicação irá rodar. O comando final CMD específica como a aplicação será executada quando o contêiner for iniciado.

Sintaxe do Dockerfile

O Dockerfile segue uma sintaxe simples e declarativa, onde cada linha representa uma instrução que define como a imagem será construída. As instruções mais comuns incluem FROM, que especifica a imagem usada como base, COPY e ADD, que adicionam arquivos para o contêiner, RUN, que executa comandos durante a construção da imagem, e CMD ou ENTRYPOINT, que definem o comando padrão a ser executado quando o contêiner iniciar.

A compreensão dessas instruções é fundamental para construir imagens eficientes e reutilizáveis. Para explorar todas as opções e detalhes sobre a sintaxe do Dockerfile, a gente recomenda dar uma olhada  na documentação oficial do Docker, onde você encontrará exemplos e explicações detalhadas de cada comando.

Executando sua aplicação

Com sua imagem Docker criada, o próximo passo é executar sua aplicação dentro de um contêiner. Rodar uma aplicação em Docker é tão simples quanto construir a imagem e, em seguida, iniciar o contêiner utilizando alguns comandos básicos. Vamos usar a imagem que criamos no exemplo anterior:

				
					docker build -t aplicacao .
docker run -p 3000:3000 aplicacao
				
			

O primeiro comando, docker build, cria uma imagem com base no Dockerfile e a nomeia como aplicação. O segundo comando, docker run, inicia um contêiner a partir dessa imagem, mapeando a porta 3000 do contêiner para a porta 3000 do seu host. Isso significa que você pode acessar a aplicação via http://localhost:3000 no seu navegador. No mesmo repositório que linkamos acima, temos mais exercícios que podem te ajudar a entender melhor como isso é feito.

Docker Compose

Enquanto rodar um único contêiner já é bastante útil, muitas vezes suas aplicações precisam de vários serviços rodando juntos, como um banco de dados, um servidor de aplicação e talvez um serviço de cache. Nessas horas o Docker Compose pode ajudar.Ele é uma ferramenta que permite gerenciar múltiplos contêineres como uma unidade só. Com ele você pode definir todos os serviços necessários em um único arquivo docker-compose.yml e, com um simples comando, iniciar tudo de uma vez.

Não entraremos em detalhes aqui para não sobrecarregar você de informação, mas essa ferramenta é ideal para cenários onde sua aplicação é composta de várias partes que precisam funcionar em harmonia. Em vez de rodar cada contêiner separadamente, você pode usar o Compose para orquestrar tudo de forma integrada, o que facilita bastante o processo de desenvolvimento e testes. 

Se quiser se aprofundar mais e ver como o Docker Compose pode simplificar ainda mais o seu trabalho, recomendo dar uma olhada na documentação oficial do Docker Compose.

Acelere a sua carreira conosco!

A Mentoria DevOps é um programa de mentoria de 12 meses com encontros semanais ao vivo, com um grupo seleto e restrito, onde estaremos do seu lado para mantê-lo relevante e atualizado no mercado de tecnologia, aprendendo e implementando as melhores práticas e ferramentas de DevOps.

Clique aqui para entrar na prioridade pela melhor oferta de lançamento

Conclusão

Até aqui, fomos desde a instalação do Docker até a criação e execução de uma aplicação completa em um contêiner. Se adaptada ao seu ambiente de trabalho atual, cada etapa feita mostra como o Docker pode simplificar seu processo de desenvolvimento, tornando-o mais consistente e previsível.

Agora que você já deu os primeiros passos, é possível começar a imaginar as diversas possibilidades que essa ferramenta pode trazer para seus projetos. Seja para desenvolvimento local ou para a implementação em produção, Docker oferece uma base sólida e eficiente para construir e distribuir suas aplicações de forma segura e escalável. Com ela você garante que ela funcionará da mesma forma em qualquer ambiente, eliminando problemas de configuração e compatibilidade. Agora é a sua vez de colocar a mão na massa, explorar mais profundamente e adaptar o Docker às suas necessidades específicas.