Este projeto demonstra uma aplicação simples em Node.js rodando dentro de um container Docker. Abaixo estão os passos detalhados e comandos para gerenciar containers Docker de forma eficaz.
Este comando cria e executa um container com o nome especificado.
docker run --name mynginx nginxEste comando executa um container em segundo plano (modo desanexado).
docker run -d --name mynginx nginxEste comando mapeia uma porta do host para uma porta do container.
docker run -d -p 8080:80 nginxEstes comandos permitem listar, parar, iniciar e remover containers.
- Listar Containers em Execução:
docker ps
- Listar Todos os Containers (incluindo parados):
docker ps -a
- Parar um Container:
docker stop mynginx
- Iniciar um Container Parado:
docker start mynginx
- Remover um Container:
docker rm mynginx
- Remover um Container em Execução (forçado):
docker rm -f mynginx
Estes comandos permitem anexar a um container em execução e desanexar sem parar o container.
- Anexar a um Container em Execução:
docker attach mynginx
- Desanexar sem Parar (CTRL + P, CTRL + Q):
Estes comandos permitem executar comandos em containers e remover containers automaticamente após a execução.
- Executar um Comando em um Novo Container:
docker run nginx ls -la
- Entrar em um Container com Bash:
docker run -it nginx bash
- Executar um Comando em um Container em Execução:
docker exec -it mynginx bash - Remover Automaticamente um Container Após Execução:
docker run --rm nginx ls -la
Estes comandos permitem remover todos os containers parados ou todos os containers, incluindo os em execução.
- Remover Todos os Containers Parados:
docker rm $(docker ps -a -q) - Remover Todos os Containers (incluindo em execução):
docker rm -f $(docker ps -a -q)
Este comando mapeia uma porta do host para uma porta do container.
docker run -d -p 8080:80 nginxEstes comandos permitem acessar o shell de um container em execução.
- Acessar o Shell de um Container em Execução:
docker exec -it mynginx bash
Estes comandos permitem criar, listar, inspecionar, remover e montar volumes em containers.
- Criar um Volume:
docker volume create my_volume
- Listar Volumes:
docker volume ls
- Inspecionar um Volume:
docker volume inspect my_volume
- Remover um Volume:
docker volume rm my_volume
- Montar Volumes em Containers:
docker run -d -p 8081:80 -v my_volume:/usr/share/nginx/html nginx
Estes comandos permitem fazer backup e restauração de volumes.
- Backup de um Volume:
docker run --rm -v my_volume:/data -v $(pwd):/backup busybox tar czf /backup/backup.tar.gz /data - Restauração de um Volume:
docker run --rm -v my_volume:/data -v $(pwd):/backup busybox tar xzf /backup/backup.tar.gz -C /
Estes comandos permitem listar, remover e inspecionar imagens locais.
- Listar Imagens Locais:
docker images
- Remover uma Imagem:
docker rmi nginx
- Inspecionar uma Imagem:
docker inspect nginx
Estes comandos permitem buscar e fazer pull de imagens de registries.
- Buscar uma Imagem:
docker search ubuntu
- Fazer Pull de uma Imagem:
docker pull nginx
Estes comandos permitem remover imagens dangling e todas as imagens não utilizadas.
- Remover Imagens Dangling:
docker image prune
- Remover Todas as Imagens Não Utilizadas:
docker image prune -a
Este comando permite enviar uma imagem para o Docker Hub.
- Enviar uma Imagem para o Docker Hub:
docker push username/repository:tag
Vamos detalhar cada linha do nosso Dockerfile para entender melhor o que está acontecendo:
ARG NODE_VERSION=22.2.0: Definimos uma variável de build chamadaNODE_VERSIONcom o valor22.2.0. Isso nos permite alterar a versão do Node.js facilmente.FROM node:${NODE_VERSION}: Usamos a imagem base do Node.js na versão especificada pela variávelNODE_VERSION. Isso garante que estamos usando a versão correta do Node.js.RUN apt-get update && apt-get install -y vim && rm -rf /var/lib/apt/lists/*: Atualizamos a lista de pacotes e instalamos o editor de textovim. Após a instalação, removemos os arquivos de lista de pacotes para economizar espaço.WORKDIR /app: Definimos o diretório de trabalho dentro do container como/app. Todos os comandos subsequentes serão executados a partir deste diretório.COPY package*.json ./: Copiamos os arquivospackage.jsonepackage-lock.jsonpara o diretório de trabalho no container. Isso é necessário para instalar as dependências do projeto.RUN npm install: Instalamos as dependências do projeto listadas nopackage.json.COPY . .: Copiamos todos os arquivos do diretório atual para o diretório de trabalho no container. Isso inclui o código-fonte da aplicação.RUN useradd -m mynode: Criamos um novo usuário chamadomynode. Isso é uma boa prática de segurança para não executar a aplicação como root.USER mynode: Definimos o usuáriomynodecomo o usuário padrão para executar comandos no container.HEALTHCHECK --interval=10s --timeout=5s --start-period=5s --retries=3 CMD [ "curl", "-f", "http://localhost:3000" ]: Definimos um health check para o container, verificando a URLhttp://localhost:3000a cada 10 segundos. Isso ajuda a garantir que a aplicação está rodando corretamente.CMD ["node", "index.js"]: Definimos o comando padrão para iniciar a aplicação Node.js. Quando o container é iniciado, este comando é executado.
Esta documentação fornece um guia abrangente para gerenciar containers e imagens Docker. Para informações mais detalhadas, consulte a documentação oficial do Docker.