코로나를 걸리면서 일주일정도 푹 쉬게 되었다,, 몸이 약간 나아져서 예전부터 해보고싶었던 Docker에 Spring Boot 구축하기를 여유있을때 공부해보았다. 나중에 Docker를 통해서 배포까지 해보고 싶지만 추후에 미루고 먼저 Docker + SpringBoot 로 개발을 시작하기전 환경 구축을 하는 것을 먼저 해보자.
참고로 이미 개발해두었던 API들을 도커에 올리는 형식으로 했다. 이제 하는 방법을 잘 알았으니 다음부터 프로젝트를 할때는 도커와 스프링을 먼저 개발환경 설정해주고 시작해야겠다.
아래부터 차근차근 설정을 해보도록 하겠다.
1. Jar 파일 생성
첫번재로 Gradle -> Project이름 -> Tasks -> build 에서 bootJar을 실행시켜주면
패키지 내부에 있는 build-> libs 로 가게되면 jar 파일이 하나 생겼다. 참고로 jar 파일은 여러 개의 자바 클래스 파일과, 클래스들이 이용하는 관련 리소스(텍스트, 그림 등) 및 메타데이터를 하나의 파일로 모아서 자바 플랫폼에 응용 소프트웨어나 라이브러리를 배포하기 위한 소프트웨어 패키지 파일 포맷이라고 한다.
2. Dockerfile 생성
libs 패키지 내부에 Dockerfile 이라는 확장자명이 없는 일반 파일을 하나 생성해주고 그 안에
위와 같이 작성해주며 각각 아래로 설명된다.
- FROM : Docker Base Image / 필자는 java 17버전을 사용했기때문에 17로 명시해주었다.
- ARG : 컨테이너 내에서 사용할 수 있는 변수를 지정할 수 있다.
- COPY : 위에 선언했던 JAR_FILE 변수를 컨테이너의 app.jar로 복사한다.
- ENTRYPOINT : 컨테이너가 시작되었을 때 스크립트 실행
작성이 완료되었다면 libs 패키지 내부에 docker-compose.yml 파일을 하나 생성해준다.
docker-compose 파일을 통해 Dockerfile 하나보다 여러 컨테이너들을 묶어서 편하게 관리해주자.
docker-compose.yml
version: '3'
services:
database:
container_name: test
image: mysql/mysql-server:5.7
environment:
MYSQL_DATABASE: board
MYSQL_ROOT_HOST: '%'
MYSQL_ROOT_PASSWORD: 1234
TZ: 'Asia/Seoul'
ports:
- "3305:3306"
command:
- "mysqld"
- "--character-set-server=utf8mb4"
- "--collation-server=utf8mb4_unicode_ci"
networks:
- test_network
application:
container_name: docker-compose-test
build:
context: ./
dockerfile: Dockerfile
ports:
- "8000:8080"
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://test:3306/board?characterEncoding=UTF-8&serverTimezone=UTC
SPRING_DATASOURCE_USERNAME: "root"
SPRING_DATASOURCE_PASSWORD: "1234"
depends_on:
- database
networks:
- test_network
networks:
test_network:
mysql container의 이름은 test 로 지었고 그 안에 생성할 database는 board로 명시해주었다. root에 1234로 비밀번호를 설정해주고
아래 Spring_DATASOURCE 부분은 설정해준데로 test에 root / 1234 로 접속해주면 된다.
주의할점은 mysql의 경우 내부에서 3306 포트를 이용하지만 외부는 3305로 접근하게 해주었으며 서버의 포트는 8080으로 내부로 접속하지만 외부에서는 8000번을 사용하도록 설정하였다.
1터미널에서 cd 명령어를 통해 build -> libs 로 이동한후
docker-compose up --build -d 명령어로 빌드해준다.
이후 Control + c 로 컨테이너를 중지시켜주거나
터미널에서 docker-compose stop 으로 중지시켜주면 된다.
서버를 실행하고 사용을 완료했다면 터미널에서 docker-compose down 을 통해 정지시키고 삭제하는것이 좋다고 한다.
로컬 IP 주소와 외부 포트 번호 + 설정해준 root / 1234로 workbench 나 기타 GUI 툴로 mysql로 접근하는것도 가능하니까 참고해서 데이터베이스를 잘 구성해보도록 하자.
적어놓고보니 간단한데 사실 되게 헤맸다,, 아래는 도커에 스프링을 올리기 위해 참고했던 블로그이다.
[Docker] 도커에 Spring Boot 구축하기
목차 1. Spring Boot 코드 작성 2. jar 파일 생성 3. Dockerfile 만들기 4. 컨테이너 실행하기 1. Spring Boot 코드 작성 간단한 Hello World 코드를 구현했다. 소스코드는 다음과 같다. package hello.hellosprin..
da2uns2.tistory.com
docker-compose로 SprongBoot + MySql DB 서버 구동
UserEntity를 가지고 CURD를 하는 SpringBoot RESTAPI 프로젝트를 만들어보았습니다. 이 프로젝트를 MySql DB와 연동을 해야 하는데 docker-compose.yml 파일로 쉽게 연동할 수 있음을 실습해보겠습니다.build.gradle
velog.io
docker-compose 커맨드와 관련된 부분은 아래 블로그를 참고하도록 하자.
Docker Compose 커맨드 사용법
Engineering Blog by Dale Seo
www.daleseo.com
'모험가의 Spring > Spring' 카테고리의 다른 글
SpringBoot+AWS+RDS 서버 무중단 배포하기 -EC2편- (0) | 2022.10.07 |
---|---|
SpringBoot+AWS+RDS 서버 배포하기 -RDS편- (1) | 2022.10.07 |
JPA findAll() 정렬해서 가져오는법 (0) | 2022.10.01 |
Spring _ 카카오 로그인 REST API 구현 OAuth2 (2) | 2022.09.30 |
Spring _구글 로그인 REST API 구현 OAuth2 (0) | 2022.09.30 |