본문 바로가기

Docker

docker를 이용해서 팀 프로젝트 초기환경 세팅을 해보자!

 

 

이런 문자를 받았ㄷr...

 

팀 프로젝트 초기 개발 세팅단계를 내가 담당하였다.

자바 17을 사용하고 mysql8.0을 사용하려고 했는데 다른 팀원들의 로컬환경에서 충돌로 인해 개발세팅이 잘 안되는 것 같았다.

 

도커란 무엇인가?

내가 사랑하는 애플코딩님이 오늘 영상 올렸다.

https://youtu.be/e0koWWAmXSk?si=-E9Ge_uSEMrQn9dn

도커를 마치 밀키트에 비유하는게 너무 참신했다.

 

한마디로 도커를 사용하면 다른 개발자들 컴퓨터에 자바17이며.. mysql이며 설치하지 않고도 

docker compose-up --build

명령어 한번으로 개발환경을 세팅할 수 있다.

 

얼마나 편한일인가?!!

사실상 오프라인으로 팀프로젝트를 진행할 때에는 바로 옆에 팀원들이 있으니까 서로서로 도와가며 개발환경을 세팅할 수 있다고는 하지만.. 온라인으로 진행할 경우에는 좀 어려울 수 있겠다.

 

[개발환경세팅]

그래서 이번에는 도커를 사용해서 개발환경을 세팅해보았다.

일단 아래 이미지를 참조하자

 

[application.yml]

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://db:3306/님들디비이름?serverTimezone=Asia/Seoul
    username: 님들이름
    password: 님들디비비밀번호
  jpa:
    open-in-view: false
    database: mysql
    show-sql: true
    main:
      allow-bean-definition-overriding: true
      fail-on-bean-override: false
    hibernate:
      ddl-auto: update
      naming:
        physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
    properties:
      hibernate:
        dialect: org.hibernate.dialect.MySQLDialect

 

[Dockerfile]

FROM openjdk:17-jdk-slim


WORKDIR /app


COPY gradlew build.gradle settings.gradle ./
COPY gradle ./gradle
COPY src ./src


RUN chmod +x gradlew


RUN ./gradlew build -x test --no-daemon


EXPOSE 8080


CMD ["java", "-jar", "build/libs/playground-0.0.1-SNAPSHOT.jar"]

 

 

도커 파일은 항상 프로젝트 최상단 루트에 위치해야한다.

도커 파일은 마치 '설계도' 와 같은거다.

즉, 애플리케이션을 컨테이너 환경에서 실행할 수 있도록 구성하는 설계도 역할

이처럼 Dockerfile은 애플리케이션을 어디서든 쉽게 실행 가능하도록 표준화된 환경을 제공한다.

 

해당 코드를 살짝만 분석해보면

 

  • 베이스 이미지: openjdk:17-jdk-slim을 사용해 Java 17 런타임 환경을 제공한다.
  • 작업 디렉토리 설정: /app에 애플리케이션 파일을 복사한다.
  • Gradle 빌드: ./gradlew build를 실행하여 프로젝트를 빌드한다.
  • 포트 노출: 8080 포트를 열어 Spring Boot 애플리케이션에 접근할 수 있게 한다.
  • 실행 명령: CMD 명령어로 빌드된 .jar 파일을 실행한다.

 

이렇게 분석할 수 있겠다.

 

[docker-compose.yml]

version: '3.8'

services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "8080:8080"
    environment:
      SPRING_DATASOURCE_URL: jdbc:mysql://mysql-container:3306/playground
      SPRING_DATASOURCE_USERNAME: 님들디비사용자이름
      SPRING_DATASOURCE_PASSWORD: 님들디비비번
    depends_on:
      - mysql-container

  mysql-container:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: 디비비밀번호
      MYSQL_DATABASE: 디비이름
    ports:
      - "3306:3306"

 

이 또한 최상단 루트에 위치해 있어야 한다.

(큰 프로젝트가 아니라 비밀번호같은거 노출해도 상관없지만.. 혹시 모르니까 한글로 바꿔주었다. 해당 위치에 알맞게 써넣으면 된다.)

 

이것도 분석해보자면,

 

  • build
    • 애플리케이션 컨테이너를 Dockerfile로 빌드
    • context: .: 현재 디렉토리를 기준으로 빌드
    • dockerfile: Dockerfile: 사용할 Dockerfile을 지정
  • ports
    • 컨테이너의 8080 포트를 로컬 호스트의 8080 포트에 연결
  • environment
    • Spring Boot 애플리케이션에서 사용할 환경 변수를 정의합니다.
      • SPRING_DATASOURCE_URL: MySQL 데이터베이스의 연결 URL.
      • SPRING_DATASOURCE_USERNAME: 데이터베이스 사용자명.
      • SPRING_DATASOURCE_PASSWORD: 데이터베이스 비밀번호.
  • depends_on
    • mysql-container가 준비된 후 app 컨테이너를 실행하도록 의존성을 정의

 

이렇게 분석할 수 있겠다.

이 도커를 띄우기 위해서는 우리는 playground라는 디비를 먼저 컨테이너에 띄울필요가 있는데

해당 명령어는 아래와 같다.

docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=님들디비비번 -e MYSQL_DATABASE=님들디비이름 -p 3306:3306 -d mysql:8.0

 

mysql-container라는 이름의 mysql을 컨테이너에 띄우는것이다. 

3306포트에서 mysql8.0을 실행시키고 있다.

요렇게 docker desktop에서 확인해도 되고

docker ps -a라는 명령어를 사용해서 실행되고 있는지 확인해도 된다.

 

dokcer ps -a에서 -a를 붙이면 백그라운드에서 실행되고 있는것까지도 전부 보여진다.(종료된것 까지도 자세하게 보여준다.)

 

[도커 실행 명령어]

이렇게 세팅을 해주엇으면,

docker-compose up --build

명령어를 통해 빌드해주자.

그렇게 하고 나서 localhost:8080/으로 접속해보거나 curl명령어를 통해 서버가 잘 뜨는지 확인해보자.

 

이렇게 뜨면 잘 뜨는거다.

 

 

혹시 코드를 변경하고 다시 실행시키고 싶다면?

./gradlew bootRun

해당 명령어를 통해 수정사항을 적용해보자.