배포하기
들어가며
프로젝트를 만들고 나서 도커를 통해서 배포하는 법을 알아보자. (mysql을 사용했을 경우.)
프로젝트환경
springboot -version : 2.6.3
bulid : gradlejava -version : 11
DB : Mysql_8.0.33
IDE : IntelliJ _Ultimate
Docker : 24.0.7
도커준비
사용할 컴퓨터에 도커가 설치가 되어있는지 확인한다. (cmd 보다는 powershell을 사용하기를 권장.)
docker --version
도커파일 작성
Dockerfile
FROM adoptopenjdk:11-jre-hotspot
WORKDIR /app
COPY build/libs/security-0.0.1-SNAPSHOT.jar /app/login.jar
EXPOSE 8080
CMD ["java", "-jar", "login.jar"]
- FROM : 리눅스 기반의 OpenJdk 11 JRE 이미지를 기반으로 새로운 Docker 이미지를 생성
- WORKDIR : 명령어가 실행될 기본 위치를 나타낸다.
- COPY : security-0.0.1-SANAPSHOT.jar 파일을 /app에 복사하여 'login.jar' 복사본을 생성한다.
- EXPOSE : 도커 컨테이너가 8080번 포트를 사용한다고 명시해 준다.
- CMD : java로 jar 파일을 실행하는 명령어
MySQL컨테이너 생성
DB를 사용한 프로젝트를 배포하려면 도커 컨테이너에도 MySQL 컨테이너가 실행되어야 한다.
PowerShell 실행
docker network create <네트워크 이름>
네트워크 생성
MySQL 도커 이미지 설치
docker pull mysql:8.0
mysql을 8.0을 사용하여 8.0 다운로드
Mysql 이미지가 설치 확인
MySQL 도커 컨테이너 생성
docker run -d --name <생성할 컨테이너명> --network <생성한 네트워크> -e MYSQL_ROOT_PASSWORD=1234 mysql:8.0
컨테이너를 생성하며 mysql의 비밀번호를 1234로 설정
docker ps 명령어를 통해 실행 중인 컨테이너 확인
이후에 만든 컨테이너가 springboot-mysql 네트워크에 속하는지 확인하기 위해서
docker network inspect springboot-mysql 실행
생성한 컨테이너(mysql-container)가 springboot-mysql에 포함되어 있는 것을 볼 수 있다.
Mysql DB 생성
현재 나의 프로젝트에서는 url: jdbc:mysql://127.0.0.1:3306/login 사용한 db는 login이지만 현재 mysql컨테이너에는 login db가 존재하지 않기 때문에 컨테이너에서도 생성해줘야 한다.
docker exec -it <생성한 컨테이너 명> mysql -u root -p
(docker exec란 실행 중인 컨테이너 내부에서 명령을 실행하는 것입니다.)
create database login; 을 통해 db생성
Spring 설정
기존에 jar 파일이 있다면 삭제해 준다.
. yml이나 .properties에서 datasource.url 부분을 수정해야 한다.
기존에는 url: jdbc:mysql://127.0.0.1:3306/login 로컬 서버에 있는 mysql을 사용했지만 도커로 배포할 때는 앞서 만들었던
컨테이너에 실행 중인 mysql을 사용해야 하기 때문에 url: jdbc:mysql://<생성한 컨테이너 명>:3306/login로 변경한다.(만약 로컬 mysql과 도커 컨테이너의 비밀번호가 다르다면. 비밀번호고 변경해야 한다.)
설정 후에 jar 파일로 만든다.(만드는 방법을 모르면 "jar파일 만들기"를 참고)
도커에서 이미지 빌드 및 컨테이너 실행
이제 우리가 만든 jar 파일을 도커에서 실행을 하려면 실행할 프로젝의 도커파일이 있는 디렉터리까지 이동한다.
docker bulid -t <생성할 이미지 명> .
" . " 을 꼭 붙여야 한다.
docker run -d --name <생성할 컨테이너 명> --network <생성한 네트워크 명> -p 8000:8080 <생성한 이미지명>
(8000:8080-> 8080번 요청이 오면 8000으로 바꿔서 매핑)
실행
security-container 컨테이너의 로그를 보면 톰캣이 8080으로 포트를 설정했지만.
8080으로 접속하는 것이 아닌 8000으로 접속하는 것을 볼 수 있다.
참고자료
'Devops > 도커' 카테고리의 다른 글
[Docker] 도커로 만든 MySQL을 MySQL Workbench로 연동하는 방법 및 볼륨 사용하기 (1) | 2024.01.31 |
---|---|
[Docker] nginx 설정파일 커스텀 해보기 (1) | 2024.01.31 |
[Docker] Docker파일 작성방법 및 실행해보기 (1) | 2024.01.31 |
[Docker] 헬스체크와 디펜던시 체크란? (1) | 2024.01.27 |
[도커] 도커 컨테이너란? (0) | 2024.01.18 |