{"id":129,"date":"2024-11-13T15:07:29","date_gmt":"2024-11-13T15:07:29","guid":{"rendered":"https:\/\/escconsulting.com.br\/site\/?p=129"},"modified":"2024-11-13T15:22:17","modified_gmt":"2024-11-13T15:22:17","slug":"como-colocar-um-projeto-java-em-um-conteiner-docker-com-docker-compose","status":"publish","type":"post","link":"https:\/\/escconsulting.com.br\/site\/2024\/11\/13\/como-colocar-um-projeto-java-em-um-conteiner-docker-com-docker-compose\/","title":{"rendered":"Como Colocar um Projeto Java em um Cont\u00eainer Docker com Docker Compose"},"content":{"rendered":"\n<p>Este guia mostra como configurar um projeto Java com banco de dados PostgreSQL em cont\u00eaineres Docker. Vamos usar o Dockerfile para definir a imagem do cont\u00eainer do aplicativo Java e o <code>docker-compose.yml<\/code> para orquestrar o aplicativo e o banco de dados.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Estrutura do Projeto<\/h3>\n\n\n\n<p>Aqui est\u00e1 a estrutura de diret\u00f3rios esperada para o projeto:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><code>\/seu-projeto\n\u251c\u2500\u2500 Dockerfile\n\u251c\u2500\u2500 docker-compose.yml\n\u251c\u2500\u2500 target\/\n\u2502   \u2514\u2500\u2500 hurr-0.0.1-SNAPSHOT.jar\n\u251c\u2500\u2500 sql\/\n\u2502   \u2514\u2500\u2500 seus-scripts.sql\n<\/code><\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">1. Dockerfile para Configurar o Cont\u00eainer Java<\/h3>\n\n\n\n<p>Primeiro, vamos analisar o Dockerfile para o cont\u00eainer Java, que ser\u00e1 respons\u00e1vel por executar o aplicativo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><code># Usando uma imagem do JDK 21 da Amazon Corretto como base\nFROM amazoncorretto:21\n\n# Definindo o diret\u00f3rio de trabalho dentro do cont\u00eainer\nWORKDIR \/app\n\n# Copiando o JAR da aplica\u00e7\u00e3o para o cont\u00eainer\nCOPY target\/hurr-0.0.1-SNAPSHOT.jar \/app\/app.jar\n\n# Copiando todos os scripts SQL para o diret\u00f3rio \/app\/sql no cont\u00eainer\nCOPY sql\/ \/app\/sql\/\n\n# Vari\u00e1vel de ambiente para o tempo de execu\u00e7\u00e3o Java\nENV JAVA_OPTS=\"\"\n\n# Expondo a porta que a aplica\u00e7\u00e3o usa\nEXPOSE 8080\n\n# Comando para rodar a aplica\u00e7\u00e3o\nENTRYPOINT &#91;\"sh\", \"-c\", \"java $JAVA_OPTS -jar \/app\/app.jar\"]\n<\/code><\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Explica\u00e7\u00e3o do Dockerfile<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Imagem Base<\/strong>: <code>amazoncorretto:21<\/code> \u00e9 usada como a base da imagem, fornecendo o JDK 21 necess\u00e1rio para rodar o aplicativo.<\/li>\n\n\n\n<li><strong>Diret\u00f3rio de Trabalho<\/strong>: <code>WORKDIR \/app<\/code> define <code>\/app<\/code> como o diret\u00f3rio de trabalho dentro do cont\u00eainer.<\/li>\n\n\n\n<li><strong>C\u00f3pia do JAR da Aplica\u00e7\u00e3o<\/strong>: <code>COPY target\/hurr-0.0.1-SNAPSHOT.jar \/app\/app.jar<\/code> copia o arquivo JAR compilado para o cont\u00eainer.<\/li>\n\n\n\n<li><strong>C\u00f3pia de Scripts SQL<\/strong>: <code>COPY sql\/ \/app\/sql\/<\/code> copia todos os scripts SQL para o diret\u00f3rio <code>\/app\/sql<\/code> no cont\u00eainer, caso sejam necess\u00e1rios para inicializar o banco de dados.<\/li>\n\n\n\n<li><strong>Vari\u00e1vel de Ambiente<\/strong>: <code>ENV JAVA_OPTS=\"\"<\/code> permite definir vari\u00e1veis de execu\u00e7\u00e3o Java para ajustes de mem\u00f3ria e outros par\u00e2metros de execu\u00e7\u00e3o.<\/li>\n\n\n\n<li><strong>Exposi\u00e7\u00e3o de Porta<\/strong>: <code>EXPOSE 8080<\/code> indica a porta que o aplicativo usar\u00e1 para se comunicar com o exterior.<\/li>\n\n\n\n<li><strong>Comando de Inicializa\u00e7\u00e3o<\/strong>: <code>ENTRYPOINT<\/code> inicia a aplica\u00e7\u00e3o usando o comando <code>java -jar \/app\/app.jar<\/code>, aplicando as vari\u00e1veis de ambiente <code>JAVA_OPTS<\/code>.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">2. Arquivo docker-compose.yml para Orquestra\u00e7\u00e3o<\/h3>\n\n\n\n<p>O arquivo <code>docker-compose.yml<\/code> define como os servi\u00e7os do aplicativo Java e do banco de dados PostgreSQL interagem.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><code>version: '3.8'\n\nservices:\n  app:\n    build:\n      context: .\n      dockerfile: Dockerfile\n    environment:\n      - JAVA_OPTS=-Dspring.datasource.url=jdbc:postgresql:\/\/db:5432\/hurr?currentSchema=hurr\n      - SPRING_DATASOURCE_USERNAME=postgres\n      - SPRING_DATASOURCE_PASSWORD=postgres\n    ports:\n      - \"8080:8080\"\n    depends_on:\n      - db\n\n  db:\n    image: postgres:15\n    environment:\n      POSTGRES_DB: hurr\n      POSTGRES_USER: postgres\n      POSTGRES_PASSWORD: postgres\n    ports:\n      - \"5432:5432\"\n    volumes:\n      - postgres-data:\/var\/lib\/postgresql\/data\n\nvolumes:\n  postgres-data:\n<\/code><\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Explica\u00e7\u00e3o do docker-compose.yml<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Servi\u00e7o <code>app<\/code><\/strong>:\n<ul class=\"wp-block-list\">\n<li><strong>Build<\/strong>: <code>build<\/code> define que a imagem do servi\u00e7o ser\u00e1 constru\u00edda a partir do <code>Dockerfile<\/code> na raiz do projeto.<\/li>\n\n\n\n<li><strong>Vari\u00e1veis de Ambiente<\/strong>:\n<ul class=\"wp-block-list\">\n<li><code>JAVA_OPTS<\/code>: Configura o endere\u00e7o do banco de dados <code>db<\/code>, o nome do banco (<code>hurr<\/code>), e o schema (<code>hurr<\/code>), al\u00e9m das credenciais de usu\u00e1rio e senha.<\/li>\n\n\n\n<li><code>SPRING_DATASOURCE_USERNAME<\/code> e <code>SPRING_DATASOURCE_PASSWORD<\/code>: Definem o usu\u00e1rio e a senha do banco de dados.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Portas<\/strong>: <code>ports<\/code> mapeia a porta <code>8080<\/code> do cont\u00eainer para <code>8080<\/code> na m\u00e1quina host.<\/li>\n\n\n\n<li><strong>Depends_on<\/strong>: <code>depends_on<\/code> define que o servi\u00e7o <code>app<\/code> s\u00f3 iniciar\u00e1 ap\u00f3s o servi\u00e7o <code>db<\/code> estar em execu\u00e7\u00e3o.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Servi\u00e7o <code>db<\/code><\/strong>:\n<ul class=\"wp-block-list\">\n<li><strong>Imagem do PostgreSQL<\/strong>: <code>postgres:15<\/code> usa uma imagem oficial do PostgreSQL na vers\u00e3o 15.<\/li>\n\n\n\n<li><strong>Vari\u00e1veis de Ambiente<\/strong>: Configuram o nome do banco (<code>POSTGRES_DB<\/code>), o usu\u00e1rio (<code>POSTGRES_USER<\/code>) e a senha (<code>POSTGRES_PASSWORD<\/code>) para o banco de dados.<\/li>\n\n\n\n<li><strong>Portas<\/strong>: <code>ports<\/code> mapeia a porta <code>5432<\/code> do cont\u00eainer para <code>5432<\/code> no host, permitindo que o banco seja acessado localmente.<\/li>\n\n\n\n<li><strong>Volume<\/strong>: <code>volumes<\/code> cria um volume persistente (<code>postgres-data<\/code>) para armazenar dados do banco.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Volume <code>postgres-data<\/code><\/strong>:\n<ul class=\"wp-block-list\">\n<li>Esse volume garante que os dados do banco de dados persistam, mesmo se o cont\u00eainer for reiniciado.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">3. Iniciando a Aplica\u00e7\u00e3o com Docker Compose<\/h3>\n\n\n\n<p>Para iniciar os cont\u00eaineres do aplicativo Java e do banco de dados PostgreSQL, execute o seguinte comando:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><code>docker-compose up --build\n<\/code><\/code><\/pre>\n\n\n\n<p>Esse comando cria e inicia os cont\u00eaineres, exibindo os logs diretamente no terminal. A aplica\u00e7\u00e3o estar\u00e1 dispon\u00edvel em <code>http:\/\/localhost:8080<\/code> e o banco de dados PostgreSQL estar\u00e1 dispon\u00edvel na porta <code>5432<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4. Verificando a Configura\u00e7\u00e3o<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Acessando a Aplica\u00e7\u00e3o<\/strong>: Acesse <code>http:\/\/localhost:8080<\/code> para verificar se o aplicativo est\u00e1 rodando corretamente.<\/li>\n\n\n\n<li><strong>Acessando o Banco de Dados<\/strong>: Voc\u00ea pode conectar-se ao banco PostgreSQL usando um cliente SQL e os seguintes par\u00e2metros:\n<ul class=\"wp-block-list\">\n<li>Host: <code>localhost<\/code><\/li>\n\n\n\n<li>Porta: <code>5432<\/code><\/li>\n\n\n\n<li>Banco de Dados: <code>hurr<\/code><\/li>\n\n\n\n<li>Usu\u00e1rio: <code>postgres<\/code><\/li>\n\n\n\n<li>Senha: <code>postgres<\/code><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Conclus\u00e3o<\/h3>\n\n\n\n<p>Com essa configura\u00e7\u00e3o, voc\u00ea tem um ambiente Docker completo para rodar um projeto Java com PostgreSQL. Esse setup facilita o desenvolvimento e a replica\u00e7\u00e3o do ambiente em outras m\u00e1quinas. Al\u00e9m disso, o uso de vari\u00e1veis de ambiente torna a configura\u00e7\u00e3o flex\u00edvel e adapt\u00e1vel a diferentes ambientes, como desenvolvimento, testes e produ\u00e7\u00e3o.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Este guia mostra como configurar um projeto Java com banco de dados PostgreSQL em cont\u00eaineres Docker. Vamos usar o Dockerfile para definir a imagem do cont\u00eainer do aplicativo Java e o docker-compose.yml para orquestrar o aplicativo e o banco de dados. Estrutura do Projeto Aqui est\u00e1 a estrutura de diret\u00f3rios esperada para o projeto: 1. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-129","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/escconsulting.com.br\/site\/wp-json\/wp\/v2\/posts\/129","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/escconsulting.com.br\/site\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/escconsulting.com.br\/site\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/escconsulting.com.br\/site\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/escconsulting.com.br\/site\/wp-json\/wp\/v2\/comments?post=129"}],"version-history":[{"count":2,"href":"https:\/\/escconsulting.com.br\/site\/wp-json\/wp\/v2\/posts\/129\/revisions"}],"predecessor-version":[{"id":131,"href":"https:\/\/escconsulting.com.br\/site\/wp-json\/wp\/v2\/posts\/129\/revisions\/131"}],"wp:attachment":[{"href":"https:\/\/escconsulting.com.br\/site\/wp-json\/wp\/v2\/media?parent=129"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/escconsulting.com.br\/site\/wp-json\/wp\/v2\/categories?post=129"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/escconsulting.com.br\/site\/wp-json\/wp\/v2\/tags?post=129"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}