1. 프로젝트 이름이 될 빈폴더를 만든다.
2. 빈폴더 안에 docker-compose.yml 파일을 만든다.
3. version: '3' 은 3으로 시작하는 가장 최신 버전을 사용한다는 뜻이다.
4. services 아래에 내가 만들 컨테이너들을 포함하면 된다.
version: '3'
services:
db:
image: mariadb
environment:
- MARIADB_ROOT_PASSWORD=root
ports:
- "3306:3306"
redis:
container_name: redis
image: redis
ports:
- "6379:6379"
backend:
build:
context: .
dockerfile: ./compose/springboot/Dockerfile
ports:
- "8080:8080"
volumes:
- ./:/app/
depends_on:
- db
- redis
일단 작성해두고 자세한 설명은 각 컨테이너 설정부분에서 하겠다.
db:
image: mariadb
environment:
- MARIADB_ROOT_PASSWORD=root
ports:
- "3306:3306"
1. db는 컨테이너이름이 된다. (compose하면 db-1 형식으로 이름이 만들어짐)
2. MARIADB_ROOT_PASSWORD=root 로 비밀번호를 설정한다.
3. prots로 내 3306포트와 도커 컨테이너의 3306포트를 매핑한다.
redis:
container_name: redis
image: redis
ports:
- "6379:6379"
1. container_name으로 컨테이너 이름을 redis로 설정(위에 처럼 -1 이런게 안붙고 설정 그대로 생성됨)
2. prots로 내 6379포트와 도커 컨테이너의 6379포트를 매핑한다.
backend:
build:
context: .
dockerfile: ./compose/springboot/Dockerfile
ports:
- "8080:8080"
volumes:
- ./:/app/
depends_on:
- db
- redis
Dockerfile
FROM openjdk:17
ARG JAR_FILE=*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
1. 위에서 만든 docker-compose.yml 파일이 들어있는 폴더로 가서 compose/springboot 경로에 폴더를 생성한다.
2. compose/springboot에 Dockerfile을 생성한다.
3. FROM 부분에 자신이 사용한 자바버전으로 바꾸면 된다.
4. build: dockerfile: 경로에 있는 Dockerfile이 실행되면서 빌드된다.
5. depends_on은 위에서 만든 db, redis 컨테이너가 실행되고 backend 컨테이너가 실행된다.
spring: datasource: url: jdbc:mariadb://gdg-project-db-1:3306/ofi driver-class-name: org.mariadb.jdbc.Driver username: root password: root redis: host: redis port: 6379추가적으로 application.yml 파일을 위에 처럼 수정해줘야 한다.
datasource url을 해당 프로젝트 이름(gdg-project) - mariadb 컨테이너 이름(db-1)로 수정하고 redis의 host를 redis 컨테이너 이름(redis)로 수정한다. 여기서 프로젝트 이름은 맨 처음에 만든 루트 폴더의 이름이 된다.
spring 프로젝트를 도커에 올리려면 jar 파일로 압축해야 한다. jar 파일은 다음과 같이 만들수 있다.
IntelliJ 화면 우측에 Gradle 클릭 -> Tasks -> build -> bootjar 순서로 클릭한다.
그러면 프로젝트 폴더 -> build -> libs 경로에 jar 파일이 생성된다.
만들어진 jar 파일을 맨 처음에 만든 루트 폴더에 옮겨준다.
docker-compose up --build -d터미널로 루트 폴더로 이동해서 위 명령어를 실행한다.
build가 완료되면 위에처럼 뜨게 된다.
docker에 들어가면 이렇게 컨테이너가 생성된 것을 볼 수 있다.
처음 실행하면 backend 컨테이너가 종료된다. 그 이유는 mariaDB에 아무런 데이터베이스가 없어서 강제로 종료시킨다. 그래서 데이터베이스를 만들어주는 작업을 해야한다. (추후에 빌드시 바로 데이터베이스가 생성되게 해볼 예정)
db-1을 클릭하면 위 화면처럼 보일 것이다. 저기서 Terminal을 눌러 이동해준다.
mariadb -uroot -proot터미널에서 위 명령어를 실행해서 mariadb로 이동한다.
create database 원하는 데이터베이스 이름데이터베이스를 생성한다.
이후에 backend 컨테이너를 실행하면 정상적으로 작동한다.
컨테이너를 새로 만들 때마다 커맨드를 실행하는게 귀찮아서 자동화 하는 방법을 추가했다.
- 먼저 도커 프로젝트 폴더 최상단에 scripts 폴더를 만든다.
- 해당 폴더 안에 init.sql 파일을 생성한다.
//init.sql CREATE DATABASE IF NOT EXISTS 생성할 데이터베이스 이름;
- 이후 docker-compose.yml 파일을 아래와 같이 수정한다.
db: image: mariadb environment: - MARIADB_ROOT_PASSWORD=root ports: - 3306:3306 volumes: - "./scripts/init.sql:/docker-entrypoint-initdb.d/1.sql"
이렇게 하면 번거롭게 터미널에서 명령어 입력 없이 자동으로 데이터베이스가 생성된다.
엄청 자세하게 적어주셨군요!! 이렇게 기록해두면 나중에 기억이 안 날 때 참고할 수도 있을 것 같아요. 파이팅해봐요 🔥🔥