Docker를 공부하면서, Side Project를 진행하고 있다.
기록하자면, 다음과 같다.
1. jar파일 만들기
Spring Boot 프로젝트 루트 디렉터리 위치에서
gradle build하여
build프로젝트 하위의 libs폴더 밑의 jar파일을 만든다.
이렇게 libs밑에 만들어진 jar파일 버전이 두 가지가 있는데,
was가 포함된 버전인 fastshoppers-0.0.1-SNAPSHOT.jar 이 파일을 가지고 Dockerfile을 만들 것이다.
2. DockerFile 생성
FROM openjdk:17-jdk-slim
WORKDIR /app
COPY build/libs/fastshoppers-0.0.1-SNAPSHOT.jar app.jar
CMD ["java", "-jar", "app.jar"]
지금 프로젝트는 java17버전을 사용하고 있으므로, openjdk 17버전의 경량화 버전을 가져와서 빌드한다.
작업디렉터리를 /app하위로 설정하고,
app하위에 위의 로컬 빌드파일을 복사해서 app.jar로 만들고,
app.jar를 실행한다는 뜻이다.
* docker-compose.yml에 로컬 환경으로 빌드해서 업로드 한다면 3번,4번은 생략해도 되는 선택사항이다.
- docker-compose를 구성하여, 여러개의 컨테이너를 하나의 서비스로 정의하여 컨테이너 묶음으로 관리할 수 있다. 필자는 5번에서부터 docker-compose.yml로 설정을 진행할 것임.
3. docker build하기
docker build -t 이미지이름:버전 .
를 실행하여 도커 이미지를 빌드한다.
4. docker 이미지 push하기
docker login
docker에 로그인하고
docker image tag 이미지:버전 아이디/이미지:버전
이렇게 아이디를 명시해줘야 푸쉬가 된다.
AccessDenied가 떠서 한참 삽질하고 알아낸 사실..
docker push 아이디/이미지:버전
도커 허브에 잘 푸쉬된 점을 확인할 수 있다.
5. docker-compose.yml 구성하기
version: '3'
services:
mysql:
image: mysql:latest
container_name: mysql-container
environment:
MYSQL_ROOT_PASSWORD: fast-shoppers
MYSQL_DATABASE: fast-shoppers-db
ports:
- "3307:3306"
application:
build:
context: . # 현재 디렉토리 (프로젝트 루트)에서 Dockerfile을 찾음
dockerfile: Dockerfile # 사용할 Dockerfile의 이름
container_name: fast-shoppers
ports:
- "8080:8080"
depends_on:
- mysql
원래는 container옵션을 푸쉬한 container로 주려고 했으나,
로컬에서 바로 빌드한 결과물로 올리는게 나을 것 같아서
docker-compose.yml파일을 새로 작성하였다.
6. docker-compose.yml 설정으로 build
docker-compose up --build
명령 실행하여 다중 컨테이너 환경을 만든다.
이 명령을 실행하면 spring boot와 mysql컨테이너가 실행된다.
잘 구동되었음.
'Infra > Docker & k8s' 카테고리의 다른 글
참고해서 도커 띄워보기 (0) | 2023.04.19 |
---|