Dicas aleatórias de Docker e terminal que aprendi com a comunidade

marcobrunodev

Marco Bruno 🤡

Posted on February 29, 2020

Dicas aleatórias de Docker e terminal que aprendi com a comunidade

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

docker build . -t nome-da-imagem
Enter fullscreen mode Exit fullscreen mode
  • 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:

docker run -d nome-da-imagem
Enter fullscreen mode Exit fullscreen mode
  • É 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):

docker rmi $(docker images -f dangling=true -q)
Enter fullscreen mode Exit fullscreen mode

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:

docker exec -i -t nome-do-container bash
Enter fullscreen mode Exit fullscreen mode

Quando você quer parar todos os containers:

docker stop $(docker ps -a -q)
Enter fullscreen mode Exit fullscreen mode

Quando você quer deletar todos os containers:

docker rm $(docker ps -a -q)
Enter fullscreen mode Exit fullscreen mode

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

docker stop $(docker ps -a -q) && docker rm $(docker ps -a -q)
Enter fullscreen mode Exit fullscreen mode

Quando você quer deletar todas as imagens:

docker rmi $(docker images -a -q)
Enter fullscreen mode Exit fullscreen mode

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

docker run . nome-da-imagem -p 8080:3000
Enter fullscreen mode Exit fullscreen mode
  • A porta 8080 é a da sua máquina e a 3000 do container.

Para expor uma porta pelo arquivo Dockerfile:

EXPOSE 3000
Enter fullscreen mode Exit fullscreen mode

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

EXPOSE 80 443
Enter fullscreen mode Exit fullscreen mode

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

...
ports:
- "8080:3000"
...
Enter fullscreen mode Exit fullscreen mode

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

node_modules
Enter fullscreen mode Exit fullscreen mode

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:

...
RUN npm i --production
...
Enter fullscreen mode Exit fullscreen mode

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:

...
npm i --silent
... 
Enter fullscreen mode Exit fullscreen mode

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

docker run --name frontend nome-da-imagem
Enter fullscreen mode Exit fullscreen mode

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:

docker logs nome-do-container
Enter fullscreen mode Exit fullscreen mode

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

docker logs -f nome-do-container
Enter fullscreen mode Exit fullscreen mode

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

docker-compose up -d
Enter fullscreen mode Exit fullscreen mode

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

docker-compose down
Enter fullscreen mode Exit fullscreen mode

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

docker-compose build
Enter fullscreen mode Exit fullscreen mode

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

docker-compose up -d --build
Enter fullscreen mode Exit fullscreen mode

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

lsof -i TCP:3002
Enter fullscreen mode Exit fullscreen mode
💖 💪 🙅 🚩
marcobrunodev
Marco Bruno 🤡

Posted on February 29, 2020

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related