DEV Community

Cover image for Abrindo mares: Docker init, crie Dockerfiles e Compose com um comando
Rafael Pazini
Rafael Pazini

Posted on

3

Abrindo mares: Docker init, crie Dockerfiles e Compose com um comando

Lembro como se fosse hoje quando comecei a ouvir sobre containers, docker, imagens… Parecia que minha cabeça explodiria de tantas perguntas - "Mas como que vou colocar uma aplicação inteira dentro de uma imagem?… Como faço para acessar o banco de dados se ele não está instalado no meu computador?" - Acho que muitos já passaram por isso ou ainda passam e é completamente normal quando estamos aprendendo algo novo, estamos em constante evolução.

Para começarmos a nossa evolução, aqui vai um breve resumo do que são essas 3 palavras que você sempre vai ouvir quando o assunto é docker:

imagens: contém o código-fonte executável do aplicativo, bem como todas as ferramentas, bibliotecas e dependências que o código da aplicação precisa para ser executado. Quando você executa a imagem do Docker, ela se torna um container.

containers: são unidades executáveis de software, nas quais o código da aplicação é empacotado junto com todas suas bibliotecas e dependências, para que o código possa ser executado em qualquer lugar, seja no desktop local ou na nuvem. Resumindo, isso ajuda a minimizar a chance de você ouvir aquela frase: "na minha máquina funciona" 😅.

Docker: é uma ferramenta open-source que possibilita executarmos, criarmos e controlarmos containers.

Assim como nós, as ferramentas também estão sempre em evolução. Com o passar do tempo o Docker foi entendendo que é preciso facilitar a interação do desenvolvedor com a ferramenta e que não é necessário ser um expert em DevOps ou Infra para conseguir lidar com as aplicações dentro de containers. 

O início do trabalho com aplicações dentro de containers pode ser confuso. Saber qual imagem utilizar, o que fazer para acessar a porta da aplicação, como baixar dependências do projeto durante o build da imagem nem sempre é tão óbvio. E foi pensando nisso foi criado o comando: docker init.

Essa nova ferramenta, creio que podemos chama-lá assim, é uma forma de você iniciar um projeto com os arquivos necessários para rodar dentro de um container:

$ docker init

Welcome to the Docker Init CLI!

This utility will walk you through creating the following files with sensible defaults for your project:
  - .dockerignore
  - Dockerfile
  - compose.yaml
Enter fullscreen mode Exit fullscreen mode

Após executar o comando docker init ele mostra quais arquivos serão criados para nós. Vou aproveitar e explicar o que é cada um deles:

.dockerignore: aquele famoso arquivo que diz para nossos versionadores o que eles devem ignorar na hora de subir as mudanças que estamos fazendo em nosso código.

Dockerfile: onde a mágica acontece... aqui estará toda a descrição de imagens, atualmente são duas. Uma utilizada para o build, no caso uma mais completa e geralmente com todos os SDKs da linguagem e outra para criar a versão final, no caso quase sempre uma alpine que é a menor distro linux que temos disponível.

compose.yaml: ele é o arquivo que possibilita você definir e rodar vários containers de uma só vez. Por exemplo, se você tem um banco de dados e um cache você pode configurá-los dentro do compose e quando executar o comando, todos os containers são iniciados de uma vez usando as configurações que existem neste arquivo.

Em seguida temos que escolher qual a linguagem do projeto que queremos implementar:

Let's get started!

? What application platform does your project use?  [Use arrows to move, type to filter]
> Go - suitable for a Go server application
  Python - suitable for a Python server application
  Node - suitable for a Node server application
  Other - general purpose starting point for containerizing your application
  Don't see something you need? Let us know!
  Quit

Enter fullscreen mode Exit fullscreen mode

Como ainda é uma ferramenta que está em desenvolvimento - até a data deste post - ela ainda não tem suporte para todas as linguagens e frameworks. Porém já contamos com Go, Python e Node parar criar nossas imagens e o time de desenvolvimento está trabalhando para lançar o quanto antes o suporte para Java, Rust, e .NET. De quebra podemos preencher um formulário para dizer qual linguagem gostaríamos de ter suporte no docker init. Aqui está o link do google form.

Em resumo, o docker init é uma ferramenta para facilitar o processo para o desenvolvedor que deseja criar os arquivos Docker e containizar sua aplicação, reduzindo um pouco o risco de erros e inconsistência para quem não está tão acostumado ainda com o mundo Docker.

Deixo aqui também a documentação oficial do docker init. Caso vocês queiram ler um pouco mais sobre esta nova ferramenta.

AWS GenAI LIVE image

Real challenges. Real solutions. Real talk.

From technical discussions to philosophical debates, AWS and AWS Partners examine the impact and evolution of gen AI.

Learn more

Top comments (2)

Collapse
 
fernandosvrosa profile image
Fernando da Silva Rosa

Massa Rafa , muito bom o conteúdo.

Collapse
 
rflpazini profile image
Rafael Pazini

Valeu Fer, fica ligado que logo tem mais :)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay