개발환경
- Java11
- SpringBoot(gradle)
- thymeleaf
- MySQL
준비사항
- local 환경에서 구동 테스트 완료된 application
- application 연동 테스트 완료된 database 및 tables
- 가상 서버 linux(ubuntu) 환경
- docker, docker compose 설치 완료된 서버
docker, docker compose 설치 방법진행사항
- database 컨테이너는 docker-compose내에서 설정
- application 컨테이너는 Dockerfile로 만들어 설정
- jar파일 빌드 전 application.properties 설정 확인
- database 설정 중 첫 번째를 제외한 설정은 주석처리
- 컨테이너 빌드 시 연동되는 서버에 맞는 스펙으로 세팅
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # spring.datasource.url= # spring.datasource.username= # spring.datasource.password=
- thymeleaf 라이브러리를 사용했다면 아래 설정은 모두 주석처리
- 경로를 찾지 못하는 error가 발생
# spring.thymeleaf.enabled=true # spring.thymeleaf.encoding=UTF-8 # spring.thymeleaf.suffix=.html # spring.thymeleaf.cache=false
- JPA 설정 중 ddl-auto 는 create -> update로 변경
spring.jpa.hibernate.ddl-auto=update
- 서버 포트를 8080으로 세팅
- docker-compose에서도 8080으로 맞춰준다.
server.port=8080
- 준비된 application 최상위 경로에서 gradlew 파일이 있는지 확인
- gradlew 파일이 존재한다면 아래 명령어로 build
./gradlew bootjar
- 준비된 jar파일을 서버의 원하는 경로로 복사한다.
FROM adoptopenjdk/openjdk11:alpine-jre ARG JAR_FILE=./jar/*.jar COPY ${JAR_FILE} app.jar ENTRYPOINT ["java", "-jar", "app.jar"]
- 준비된 jar파일을 ./jar 경로로 복사
- ARG -> jar파일이 있는 경로
- COPY -> ARG에서 설정한 경로에 있는 jar파일을 app.jar로 복사
- ENTRYPOINT -> 이미지 실행시 명령어 수행
version: "3" services: db: #1 image: mysql:5.7 container_name: container_db #2 environment: #3 - MYSQL_DATABASE=test_db - MYSQL_ROOT_PASSWORD=1234 restart: always ports: - "3306:3306" volumes: - /home/ubuntu/test/db/data:/var/lib/mysql app: #4 build: #5 context: ./app dockerfile: Dockerfile container_name: container_app links: #6 - db restart: always ports: - "80:8080" depends_on: #7 - db environment: #8 SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/test_db?characterEncoding=UTF-8&serverTimezone=UTC&&allowPublicKeyRetrieval=true&useSSL=false SPRING_DATASOURCE_USERNAME: root SPRING_DATASOURCE_PASSWORD: 1234
- docker-compose 파일 내부에서 서비스의 네이밍
- 설정 파일 내에서 해당 서비스를 호출할 때 사용
services: db:
- docker ps 명령어 치면 NAMES에 뜨는 container 이름 설정
container_name: container_db
- mysql 이미지 접속 시 DATABASE와 PASSWORD 세팅
environment: - MYSQL_DATABASE=test_db - MYSQL_ROOT_PASSWORD=1234
- #1과 같은 docker-compose 파일 내부에서 서비스의 네이밍
app:
- application을 활용해 이미지를 만들기 위한 Dockerfile build
build: context: ./app dockerfile: Dockerfile
- context -> Dockerfile이 있는 경로
- dockerfile -> 생성한 Dockerfile 이름을 적어주면 된다
- app 서비스와 연결 할 서비스 선택
- docker-compose 내에서 설정한 services 중 선택
links: - db
- 서비스 실행 순서
depends_on: - db
- 즉, db 서비스가 실행된 후 app 서비스 실행
- 이미지 실행 시 환경변수 설정
- spring application.properties에서 주석처리한 database 관련 설정
environment: SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/test_db?characterEncoding=UTF-8&serverTimezone=UTC&&allowPublicKeyRetrieval=true&useSSL=false SPRING_DATASOURCE_USERNAME: root SPRING_DATASOURCE_PASSWORD: 1234
- jdbc:mysql://db:3306 -> 포트앞에 db는 #1번 네이밍과 통일
- #3번에서 세팅한 비밀번호와 통일
- local database 테이블과 데이터를 서버로 이전
- docker-compose.yml 실행
docker-compose up docker-compose up -d
- up 명령어로 db 및 app 서버가 에러없이 잘 구동되는지 확인 후
- -d 옵션을 넣어 백그라운드로 실행 후 사이트 접속