01-31 00:40
Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
관리 메뉴

기록을 합시다.

[docker] Apache+Spring Boot(jar)+Oracle docker-compose로 띄우기 본문

공부/Java

[docker] Apache+Spring Boot(jar)+Oracle docker-compose로 띄우기

울집고양이세마리 2023. 6. 21. 02:55

전체적인 디렉토리 구조

📦project-dockerfile
 ┣ 📂Apache
 ┃ ┣ 📜Dockerfile
 ┃ ┣ 📜httpd-vhosts.conf
 ┃ ┗ 📜httpd.conf
 ┣ 📂Oracle
 ┃ ┣ 📜001_projectDB.sql
 ┃ ┗ 📜Dockerfile
 ┣ 📂Wahwah
 ┃ ┣ 📜Dockerfile
 ┃ ┗ 📜wah-wah-0.0.1-SNAPSHOT.jar
 ┗ 📜docker-compose.yml

Spring Boot 설정

application.properties에 아래와 같은 설정 추가

# DB 설정
spring.jpa.database-platform=org.hibernate.dialect.Oracle12cDialect
spring.datasource.url=jdbc:oracle:thin:@172.20.0.4:1521/xe
spring.datasource.username=
spring.datasource.password=
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update


# 톰켓 설정
tomcat.ajp.address=0.0.0.0
tomcat.ajp.allowedRequestAttributesPattern=.*
tomcat.ajp.protocol=AJP/1.3
tomcat.ajp.port=8009
tomcat.ajp.enabled=true

jar파일 생성(gradlew 파일 있는 곳에서 해야함)

gradlew --debug build

 

 

Apache 설정

나는 도커 컨테이너에서 파일 수정하기 귀찮아서 그냥 파일들을 만들고, 도커 파일 안으로 파일들을 이동시켜줬다.

httpd-vhosts.conf

<VirtualHost *:80>
    DocumentRoot "/usr/local/apache2/htdocs"
    ServerName wahwah.com
    ServerAlias www.wahwah.com  
    ErrorLog "logs/www.wahwah.com-error.log"
    CustomLog "logs/www.wahwah.com-access.log" combined
    # Forward Proxy : On / Reverse Proxy : Off
    ProxyRequests Off
    # 호스트가 받은 HTTP 요청을 Proxy 요청시 사용. Reverse : On
    ProxyPreserveHost On
    ProxyPass / ajp://172.20.0.3:8009/
    ProxyPassReverse / ajp://172.20.0.3:8009/
</VirtualHost>

httpd.conf 설정(아래 얘들 주석 해제)

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

Dockerfile

FROM httpd 

#귀찮으니 안에서 설정 안 하기 위해서 conf파일을 아예 옮겨준다.

ADD httpd.conf /usr/local/apache2/conf
ADD httpd-vhosts.conf /usr/local/apache2/conf/extra

WORKDIR /usr/local/apache2
EXPOSE 80

 

Spring Boot용 도커파일 설정

FROM openjdk:17-alpine
ARG JAR_FILE=wah-wah-0.0.1-SNAPSHOT.jar
COPY ${JAR_FILE} wahwah.jar
ENTRYPOINT ["java","-jar","/wahwah.jar"]

참고로 jar파일은 도커 파일이랑 같은 위치에 있어야함

 

Oracle 도커파일 설정

FROM gvenzl/oracle-xe

ENV ORACLE_PASSWORD=1234

RUN mkdir files

VOLUME [ "/oradata:/opt/oracle/oradata/gvenzl/oracle-xe" ]

COPY 001_projectDB.sql /container-entrypoint-initdb.d

EXPOSE 1521

참고로 내가 옮겨준 sql문은 아래와 같다. 

create tablespace wahwahdev
datafile '/opt/oracle/files/wahwahdev.dbf' size 500m
autoextend on next 100m maxsize unlimited
default storage(initial 128k next 64k pctincrease 10);

alter session set "_ORACLE_SCRIPT" = true;

create user wahwahmaster identified by "1234"
default tablespace wahwahdev 
temporary tablespace temp;

grant connect, resource, dba to wahwahmaster;

 

docker-compose.yml 설정

version: "1.0"
services:
  apache2:
    build: ./Apache
    networks:
      myboard:
        ipv4_address: 172.20.0.2
    restart: always
    environment:
      - VIRTUAL_HOST=www.wahwah.com
    ports:
      - "80:80"
  wahwah:
    build: ./Wahwah
    networks:
      myboard:
        ipv4_address: 172.20.0.3
    restart: always
    environment:
      - VIRTUAL_HOST=www.wahwah.com
    expose:
      - "8009"
  oracledb:
    build: ./Oracle
    networks:
      myboard:
        ipv4_address: 172.20.0.4
    restart: always
    ports:
      - "1521:1521"
networks:
  myboard:
    driver: bridge
    ipam:
      driver: default
      config: 
        - subnet: "172.20.0.0/24"
          gateway: "172.20.0.1"

 

결과물

 

후기

apache랑 spring boot의 내장 톰캣을 연결하는 포스트는 별로 없었고, apache랑 톰캣을 연결하는 포스트만 많아서 힘들었다. ㄱ= 특히나 다들 mod_jk를 사용하고 있어서 미칠 뻔했는데(그걸 왜 쓰는 거임?), 검색에 검색을 거듭하여 mod_proxy_ajp 사용하는 방법을 찾을 수 있었다. 그런데 또 이 두 개를 docker-compose하는 문서도 없어서 다 하나 하나 설정 바꿔줘 가면서 실험해보면서 하니 시간이 너무 걸렸다.. (약 12시간?) 

 

아무튼 정말 좋은 경험이었다. 

 

Comments