

이런 문자를 받았ㄷ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: 데이터베이스 비밀번호.
- Spring Boot 애플리케이션에서 사용할 환경 변수를 정의합니다.
- 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
해당 명령어를 통해 수정사항을 적용해보자.

'Docker' 카테고리의 다른 글
| docker를 이용해서 나만의 서버를 배포해보자. (1) | 2024.12.14 |
|---|---|
| Docker volumes를 통해 안전하게 데이터를 지켜보자! (0) | 2024.11.21 |
| Docker개발환경에서 빠르게 코드 변경사항 저장하기 (3) | 2024.11.20 |