Dicas aleatórias de Docker e terminal que aprendi com a comunidade
Tags: docker
Published: 2020-02-29 14:52:58

Desculpa, talvez esse não seja o post que você gostaria ou deveria ler sobre docker, ele foi criado enquanto eu fazia uma live pela [twitch.tv/collabdode](http://twitch.tv/collabdode) onde trocamos conhecimento sobre a querida baleia. O resultado é esse aí!


Para buildar uma imagem que você criou usando o Dockerfile, ensinado pelo st0rmrid3r (pesssoa feliz da twitch):

```bash
docker build . -t nome-da-imagem
```

- O `.` é o caminho do arquivo `Dockerfile`, quando você usa só ponto você está dizendo que já está dentro da pasta onde está o arquivo `Dockerfile`;
- O nome-da-image aparecerá quando você rodar o comando `docker images -a`, aí fica mais fácil para saber do se trata as imagens que você tem.

Para subir (rodar) uma imagem:

```bash
docker run -d nome-da-imagem
```

- É bem comum usarmos o `-d` para não deixar o terminal travado.


Para remover as layers (containers) intermediárias que não estão sendo mais usadas, comando ensinado pelo raizenNNTV (pessoa do rolê de docker da twitch):

```bash
docker rmi $(docker images -f dangling=true -q)
```

Quando você quer entrar dentro de um container que já está buildado para verificar se tudo que fez está funcionando de forma feliz, dica do felipef0ntana (mano no chat da twitch) deu meio errado mas o davidfaria89 mandou a real:

```bash
docker exec -i -t nome-do-container bash
```

Quando você quer parar todos os containers:

```bash
docker stop $(docker ps -a -q)
```

Quando você quer deletar todos os containers:

```bash
docker rm $(docker ps -a -q)
```

É bem comum você querer parar e deletar todos os containers, então você pode rodar tudo em uma linha só, dica do davidfaria89 (chegou atrasado mas já mandou a dica na twitch):

```bash
docker stop $(docker ps -a -q) && docker rm $(docker ps -a -q)
```

Quando você quer deletar todas as imagens:

```bash
docker rmi $(docker images -a -q)
```

Para expor uma porta do container no momento que você for subir (rodar) ele, dica do st0rmrid3r:

```bash
docker run . nome-da-imagem -p 8080:3000
``` 

- A porta 8080 é a da sua máquina e a 3000 do container.

Para expor uma porta pelo arquivo Dockerfile:

```yaml
EXPOSE 3000
```

Se você precisar expor mais de uma porta de um container pelo arquivo Dockerfile, dica do davidfaria89:

```yaml
EXPOSE 80 443
```

Se você precisa expor uma porta do container, mas não usar o mesmo número de porta na sua márquina, você não consegue fazer isso usando o Dockerfile. Por exemplo, você tem uma app com React rodando dentro de um container na porta 3000, mas você quer que ela rode na porta 8080 da sua máquina, você precisa adicionar no `service` do seu app React a configuração a seguir (arquivo `docker-compose.yaml`), dica do pwng (pessoa feliz que colou na twitch):


```yaml
...
ports:
- "8080:3000"
...
```

Dica topezera do raizenNNTV, criar um `.dockerignore` e adiciona nele o `node_modules` para o copy (copiar) do projeto ficar mais rápido e feliz.

"Lugar no node_modules é no lixo mesmo xd" - palavras do raizenNNTV

```yaml
node_modules
```

O pwng pessoa colante na twitch, mandou essa dica. Quando for rodar o `npm i` dentro do `Dockerfile` e o foco for o ambiente de produção, não esquece de adicionar o `--production` para não instalar os pacotes do ambiente de desenvolvimento:

```yaml
...
RUN npm i --production
...
```

O raizen não para. Se você não gosta de ver um monte de info do `npm i` quando vai fazer o build da imagem, adiciona o `--silent`:

```yaml
...
npm i --silent
... 
```

Mais uma do pwng. Quando você subir (rodar) o container, poderá dar um nome para ele, isso te ajudará futuro:

```bash
docker run --name frontend nome-da-imagem
```


Eita! Outra do pwng. Toda vez que estiver com uma dúvida sobre como foi o andamento do container, você poderá ver o log dele:

```bash
docker logs nome-do-container
```

É mano o pwng não para mesmo. Se você quer ver o log em real time:

```bash
docker logs -f nome-do-container
```

Subir os containers pelo `docker-compose` sem travar o terminal:

```bash
docker-compose up -d
```

Para desligar dar um stop nos containers que você subiu com o `docker-compose`:

```bash
docker-compose down
```

Para fazer o build novamente dos *services*, dado que você você tem o build deles:

```bash
docker-compose build
```

Para forçar o build dos services no momento que você for dar o `up` no `docker-compose`, deixarei o `-d` porque ele é feliz:

```bash
docker-compose up -d --build
```

Quando você precisa saber se tem algo rodando em uma porta TCP:

```bash
lsof -i TCP:3002
```