Descomplicando Docker
O Docker é uma plataforma de software que ajuda a criar, implantar e executar aplicativos em contêineres.
Um contêiner é uma unidade de software que inclui todo o código necessário para executar um aplicativo, incluindo bibliotecas, dependências e configurações. Os contêineres são leves e portáteis, o que significa que podem ser executados em qualquer lugar, independentemente do sistema operacional ou ambiente de hospedagem.
Uma imagem é um modelo de um ambiente de aplicativo, enquanto um contêiner Docker é uma cópia em execução desse ambiente, isolado do sistema host e de outros contêineres em execução. Cada contêiner é criado a partir de uma imagem e pode ser personalizado com configurações e variáveis de ambiente específicas.
Benefícios :
- Escalabilidade: O Docker permite que os aplicativos sejam escalados rapidamente, adicionando mais contêineres conforme necessário. Isso significa que os aplicativos podem lidar facilmente com picos de tráfego ou demanda, sem comprometer o desempenho.
- Portabilidade: Os contêineres do Docker são portáteis, o que significa que podem ser executados em qualquer lugar, independentemente do sistema operacional ou ambiente de hospedagem. Isso torna mais fácil mover aplicativos entre diferentes ambientes de desenvolvimento, teste e produção.
- Consistência: O Docker ajuda a garantir que os aplicativos funcionem de maneira consistente em diferentes ambientes, o que é especialmente útil em ambientes de desenvolvimento e produção. Isso significa que os desenvolvedores podem ter mais confiança de que seus aplicativos irão se comportar da mesma maneira em diferentes ambientes.
- Segurança: Os contêineres do Docker são isolados uns dos outros e do host do sistema, o que ajuda a aumentar a segurança. Isso significa que, se um contêiner for comprometido, os outros contêineres e o host do sistema ainda estarão protegidos.
- Eficiência: O Docker permite que vários aplicativos sejam executados simultaneamente no mesmo sistema, sem conflito de dependências ou bibliotecas. Isso ajuda a economizar recursos de sistema e aumentar a eficiência. Além disso, os contêineres do Docker são leves e rápidos de inicializar, o que significa que os aplicativos podem ser implantados rapidamente.
Principais comandos:
- docker pull "nome da imagem" :: Baixar uma imagem do dockerhub.
- docker run "nome da imagem" :: Executar um container a partir de uma imagem.
- docker build :: Criar uma nova imagem Docker a partir de um Dockerfile.
- docker ps :: É usado para listar os contêineres em execução no sistema Docker.
- docker ps -a :: É usado para listar todos os contêineres, incluindo aqueles que estão parados ou foram finalizados
- docker image :: É usado para listar todas as imagens Docker disponíveis no sistema local.
- docker start "nome ou id do container" :: Iniciar um ou mais contêineres do Docker que foram parados anteriormente
- docker stop "nome ou id do container" :: É usado para parar um ou mais contêineres em execução no sistema Docker
- docker exec -it "nome ou id do container" :: Serve para acessar um contêiner em execução e executar comandos dentro dele.
- docker exec -it "id do container ubuntu" bash :: Serve para acessar um contêiner Ubuntu em execução e iniciar um shell interativo dentro dele.
- docker port "nome ou id container" :: Mostrar o mapeamento de portas do container.
- docker run -d -p 8080:80 "nome do container" :: É usado para definir a porta em que o contêiner irá escutar e a porta do host que será mapeada para a porta do contêiner. Por exemplo, se você tiver uma imagem Docker que executa um servidor da Web na porta 80, colocar a tag -p 8080:80 o host será mapeada para a porta 80 do contêiner, permitindo que você acesse o servidor da Web por meio do endereço http://localhost:8080.
Exemplo de Dockerfile para aplicação Java Springboot:
FROM openjdk:17-alpine
RUN addgroup -S spring && adduser -S spring -G spring
USER spring:spring
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]