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
- O
.
é o caminho do arquivoDockerfile
, quando você usa só ponto você está dizendo que já está dentro da pasta onde está o arquivoDockerfile
; - 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
- É 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)
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
Quando você quer parar todos os containers:
docker stop $(docker ps -a -q)
Quando você quer deletar todos os containers:
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):
docker stop $(docker ps -a -q) && docker rm $(docker ps -a -q)
Quando você quer deletar todas as imagens:
docker rmi $(docker images -a -q)
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
- A porta 8080 é a da sua máquina e a 3000 do container.
Para expor uma porta pelo arquivo Dockerfile:
EXPOSE 3000
Se você precisar expor mais de uma porta de um container pelo arquivo Dockerfile, dica do davidfaria89:
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):
...
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
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:
...
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
:
...
npm i --silent
...
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
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
É mano o pwng não para mesmo. Se você quer ver o log em real time:
docker logs -f nome-do-container
Subir os containers pelo docker-compose
sem travar o terminal:
docker-compose up -d
Para desligar dar um stop nos containers que você subiu com o docker-compose
:
docker-compose down
Para fazer o build novamente dos services, dado que você você tem o build deles:
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:
docker-compose up -d --build
Quando você precisa saber se tem algo rodando em uma porta TCP:
lsof -i TCP:3002
Top comments (1)
pwng aqui :)