도커는 간단하게 이야기하면 컨테이너 환경에서 독립적으로 애플리케이션을 실행할 수 있도록 컨테이너를 만들고 관리하는 것을 도와주는 컨테이너 도구이다.
프론트엔드와 백엔드가 나누어서 프로젝트를 진행한다고 할 때, 유용할 것 같아 요번에 세팅을 공부해보았다.
여러 사이트를 돌아다니면서 설정을 공부해보았고, 하루 넘게 삽질한 결과 성공했다.
1. bootJar 눌러주자
왼쪽 위에 코끼리 -> build -> bootJar 하면?
이런게 생긴다.
참고로 Dockerfile은 없습니다. 제가 추가해놓은 것.
2. Dockerfile을 생성하자.
libs -> Dockerfile(확장자 없음)
FROM openjdk:11
ARG JAR_FILE=*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
3. docker-compose.yml 파일을 생성하자
root folder 아래에 바로 만들어주자.
version: '3'
services:
db:
image: mysql:5.7
volumes:
- ./mysql-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: test1234
MYSQL_DATABASE: testdb
command: # 명령어 실행
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
ports:
- "3306:3306"
app:
build: build/libs/
ports:
- "8080:8080"
depends_on:
- db
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/testdb
SPRING_DATASOURCE_USERNAME: test_user
SPRING_DATASOURCE_PASSWORD: 1234
이걸 실행해주자.
그러면 틀림없이 오류가 발생할 것이다.
왜냐면 mysql의 root 계정의 비밀번호를 설정해주어야 하는데 하지 않았고
데이터 베이스도 생성하지 않았다. (현 시점에서 testdb)
user도 생성하지 않았기 때문에 이거는 만들어 주어야 한다.
db-1을 눌러준다.
Terminal 클릭
여기서 잘은 모르겠는데 비번이 설정이 되어 있는 경우도 있고, 없는 경우도 있다.
일단 내 계정에서는 test1234가 비밀번호이다.
mysql> show databases; 하면 이렇게 나올 것이다.
DB를 만들어 준다.
mysql> use mysql; 한번 해주고
마지막 부분은 docker-compose.yml에 설정해둔 testdb로 하였다.
USER 부분 생성을 해야한다. test_user로 설정할 것이다.
그리고 권한을 부여한다.
자세한건 이걸 보고 했기 때문에
https://devdhjo.github.io/mysql/2020/01/29/database-mysql-002.html
이렇게 하면 준비가 끝났다.
4. yml파일 설정해주자 (사실 2번 3번 사이에 있어야 함)
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://mysql:3306/testdb?serverTimezone=UTC&characterEncoding=UTF-8
username: test_user
password: 1234
jpa:
hibernate:
ddl-auto: create
show-sql: true
properties:
hibernate:
format_sql: true
database-platform: org.hibernate.dialect.MySQL5Dialect
여기서 주의깊게 봐야할 점은
jdbc:mysql/localhost:3306 이라고 되어있는데 보통
여기서 localhost:가 아니라 mysql로 해줘야 한다.
그리고 또 local에서 개발을 막 할텐데, 하려면
jdbc:mysql/localhost 이걸써야 한다.
이제 설정이 끝났고, 사용하면 된다.
Ctrl + C를 눌러 나가고
다시 docker-compose up
서버가 작동이 되고,
정상적으로 데이터가 들어간다.
'CS지식들 > 공부공부' 카테고리의 다른 글
Object (Java) (0) | 2023.11.05 |
---|---|
비트연산자 (0) | 2023.11.05 |
회원 가입 로직 구현 (1) | 2023.03.09 |
인증(Authentication) 관련 Exception을 제어하는 기능 구현 (0) | 2023.03.09 |
Spring Security filterChain (0) | 2023.03.06 |