[Spring + Docker] 개발환경 구축

Dev_ch·2022년 11월 4일
0
본 글은 2022.10.7에 작성되었습니다.

코로나를 걸리면서 일주일정도 푹 쉬게 되었다,, 몸이 약간 나아져서 예전부터 해보고싶었던 Docker에 Spring Boot 구축하기를 여유있을때 공부해보았다. 나중에 Docker를 통해서 배포까지 해보고 싶지만 추후에 미루고 먼저 Docker + SpringBoot 로 개발을 시작하기전 환경 구축을 하는 것을 먼저 해보자.

참고로 이미 개발해두었던 API들을 도커에 올리는 형식으로 했다. 이제 하는 방법을 잘 알았으니 다음부터 프로젝트를 할때는 도커와 스프링을 먼저 개발환경 설정해주고 시작해야겠다.

아래부터 차근차근 설정을 해보도록 하겠다.

1. 진행


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 하나보다 여러 컨테이너들을 묶어서 편하게 관리해주자.

3. 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로 접근하는것도 가능하니까 참고해서 데이터베이스를 잘 구성해보도록 하자.

2. 마무리

적어놓고보니 간단한데 사실 되게 헤맸다,, 아래는 도커에 스프링을 올리기 위해 참고했던 블로그이다.
[Docker] 도커에 SpringBoot 구축하기
Compose 커맨드 사용법

profile
내가 몰입하는 과정을 담은 곳

0개의 댓글