DEV Community

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

Posted on

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.

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 :)