Entendendo os Conceitos do Docker: Primeiros Passos (Parte 1)
Tags: docker, beginners, productivity, devops
Published: 2024-02-02 19:08:56

> Docker is a platform designed to help developers build, share, and run container applications. We handle the tedious setup, so you can focus on the code.


## O que é, e para que serve esse tal Docker?

No português claro, Docker é uma plataforma aberta que possibilita criar, rodar e distribuir apps dentro de containers. Um container é tipo uma caixa padrão de software que tem tudo que o app precisa pra funcionar, incluindo bibliotecas, sistema de arquivos, variáveis de ambiente e ferramentas operacionais.

## Porque utilizar?
O Docker é um verdadeiro salvador quando se trata de desenvolvimento de software. Sabe aquela famosa frase “Na minha máquina funciona”? Pois bem, o Docker resolve isso. Ele coloca todas as dependências no container, aumenta a segurança e confiabilidade, e torna mais simples escalar e distribuir.

## É tipo uma Máquina Virtual?
Embora o Docker e as máquinas virtuais (VMs) possam parecer a mesma coisa, eles são bem diferentes. Uma máquina virtual é como um computador dentro de um computador, com seu próprio sistema operacional e tudo mais, o que pode ocupar muito espaço.

O Docker, por outro lado, usa o mesmo sistema operacional do computador, mas separa as aplicações umas das outras, virtualizando todos os recursos da maquina principal nos containers. Isso faz com que o Docker seja mais leve e eficiente do que as máquinas virtuais.


![Virtualização x Container](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ka3xfflobk3qnj7kjnw9.png)

## Imagem x Container: Qual é a diferença?

Uma imagem Docker é um modelo de leitura que contém um conjunto de instruções para criar um container Docker. Pode-se pensar nela como uma “receita de um bolo” que define o ambiente do container.

Por outro lado, um container Docker é basicamente uma versão em funcionamento de uma imagem Docker. Ele é como um ambiente separado e que pode ser executado, que contém tudo que é necessário para fazer um aplicativo funcionar.

## E onde eu encontro essa tal imagem?

Docker Registry é um serviço de armazenamento que permite que você armazene suas imagens Docker, assim como distribuí-las. Em outras palavras, funciona como uma espécie de biblioteca que armazena imagens Docker.

Você pode ter um Docker Registry localmente em seu próprio ambiente de hospedagem ou usar um Docker Registry público, como o Docker Hub, que é o registro predefinido para a Docker CLI (Interface da Linha de Comando) e é usado por milhões de desenvolvedores em todo o mundo para compartilhar e distribuir suas imagens do Docker.


![Docker Components](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yxl0cf867nbzoxy9skav.png)

## Como instalar e utilizar?

### Instalação:
Para instalar você pode seguir este [tutorial](https://docs.docker.com/engine/install/) do próprio Docker ou procurar por outros diversos tutoriais disponíveis na internet, não vou ensinar para não me estender neste artigo, mas para titulo de curiosidade, estou utilizando Windows 11 com WSL2 que é um subsistema Linux incorporado ao Windows, com o Docker version 24.0.4, build 3713ee1.

Para verificar se a instalação ocorreu com sucesso execute o comando `docker — version`.

### Primeiros comandos:

```bash
docker container run hello-world
```

Se tudo estiver corretamente instalado, o Docker irá procurar localmente se está imagem já está baixada, caso não esteja e não deveria já que você acabou de instalar, ele irá baixar do registry (DockerHub) a imagem e executar o container.


![Saida do comando docker container run hello-world](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mjhpst9e1f6u3msrpxh8.png)

```bash
docker container ls -a
```

O comando `docker container ls -a` ou `docker ps -a` é usado para listar todos os containers na máquina, incluindo os que estão em execução e os que estão parados. O `-a` é uma opção que significa “all” (todos), indicando que você deseja ver todos os containers, não apenas os que estão atualmente em execução. A imagem “hello-world” é executada e parada logo em seguida, por isso se faz necessário a opção `-a` para visualizar este container.


![Lista dos meus containers](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bwe7ud715g3qhey5mhro.png)

* **CONTAINER ID:** Este é um identificador único atribuído a cada container quando é criado.
* **IMAGE:** Qual foi a imagem utilizada para a criação do container, neste caso “hello-word”;
* **COMMAND:** Este é o comando que foi usado para iniciar o container.
* **CREATED:** Este é o tempo que passou desde que o container foi criado.
* **STATUS:** Este é o estado atual do container.
* **PORTS:** Essa coluna mostra as portas que foram mapeadas do container para o host.

* **NAMES:** Este é o nome dado ao container. Se você não fornecer um nome ao criar o container, o Docker irá gerar um nome aleatório. Para fornecer um nome basta incluir a opção `--name meu_primeiro_container` o comando completo ficaria assim `docker container run --name meu_primeiro_container hello-world`, caso você execute este comando irá perceber que foi iniciado muito mais rápido, por conta de a *IMAGEM* já estar baixada localmente, único trabalho foi ser feito a criação do container.


![Container com nome customizado](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5at40uwhu25nbbsvz1b6.png)

```bash
docker container rm CONTAINER_ID
```

O comando docker container rm CONTAINER_ID é usado para remover um container. Aqui, `CONTAINER_ID` é o identificador único do container que você deseja remover, você pode remover tanto utilizando o `CONTAINER_ID` como utilizar o `NAMES`. Este comando só funcionará em containers que estão parados. Se o container estiver rodando, você precisará pará-lo primeiro antes de tentar removê-lo.

```bash
docker container stop CONTAINER_ID
```

Para parar um container Docker, você precisará utilizar o comando acima, substituindo `CONTAINER_ID` pelo identificador do container que deseja parar. Você pode encontrar o ID ou o Nome do container usando o comando `docker container ls`.

## E agora, como eu avanço mais em Docker?
Irei disponibilizar a 2º Parte em breve.