| 실습 환경: MacOS, M1
🐳 Docker란?
- 로컬에서 서버에 올릴 때 문제 발생 ⇒ 도커 탄생!
- 각종 디펜던시 설정의 번거로움
- 디펜던시들의 버전 불일치 문제
- 애플리케이션을 패키징 할 수 있는 툴
- 컨테이너에 애플리케이션 + 시스템 툴 + 환경 설정 + 디펜던시를 하나로 묶어 어디에서나 쉽게 배포하고 안정적인 구동을 도와준다.
- 구성 요소
- Dockerfile - 컨테이너를 어떻게 만들어야 하는지에 대한 설명서
- Image - 애플리케이션을 실행하는데 필요한 코드, 런타임, 환경, 시스템 툴, 시스템 라이브러리 등이 포함
- Container - Image를 고립된 환경에서 개별적인 시스템 안에서 실행할 수 있는 공간
🔌 배포 실습
1. Docker 설치
- https://www.docker.com/products/docker-desktop/ → Mac With Apple Chip
- 회원가입도 해줬다.
2. DB 설정
application.properties
파일 → db 주소 바꿔주기- RDS를 쓰면 좋았겠지만,, 일단 연습용이기 때문에 내 IP 주소를 넣어줬다.
- ⭐️
host.docker.internal
를 쓰면 된다고 함.
3. Jar 파일 생성
- 프로젝트 열기 → Gradle → build → bootJar
4. Dockerfile
- 프로젝트 최상단에 Dockerfile 생성
- FROM - 베이스 이미지를 지정
- ARG - 변수 선언
- COPY - 이미지 생성 시 파일 복사
- ENTRYPOINT - 컨테이너의 어플 지정
- ⭐️ jar 경로가 다르다거나.. 자바 버전이 안 맞는다거나.. 등등 하면 실행할 때 오류난다!
FROM openjdk:17 ARG JAR_FILE=build/libs/*.jar COPY ${JAR_FILE} app.jar ENTRYPOINT ["java","-jar","/app.jar"]
- 터미널에서 DockerFile이 있는 경로로 이동 후 Dockerfile 실행Apple Chip 사용중인 경우 아래 명령어를 실행..하라고는 하지만 이제 안 해도 되는 듯..? 일단 난 함..
$ docker build --platform linux/amd64 --build-arg DEPENDENCY=build/dependency --tag <이름>:<태그> .
$ docker build --tag <이름>:<태그> .
- docker images → 만든 이미지 볼 수 있음
4. DockerHub로 Push
- 로그인
$ docker login
- push
$ docker push <이름>:<태그>
5. 배포
- 실행
-i
: 컨테이너와 상호적인 모드로 실행 → 표준입력(stdin)을 열어놓는다.-t
: 터미널을 할당하며, 터미널 입력을 받을 수 있게 한다. (사용하지 않을 경우 명령 입력은 가능하지만 쉘에 표시 X)-p 8080:8080
: 호스트의 8080 포트를 컨테이너의 8080 포트로 매핑. 호스트와 컨테이너 간의 포트 포워딩 설정
$ docker run -p 8080:8080 <이름>:<태그>
- 테스트
☄️ 트러블 슈팅
- 실행했는데 스프링부트 올라가고 에러가 떴다.
- <문제> SQLException: Access denied for user
- <해결> DB 접근 권한 설정
# 사용자 추가 create user 'username'@'localhost' identified by 'password'; # 사용자 권한 설정 grant all privileges on *.* to 'username'@'localhost';
📚 참고 자료
'✏️ > Server' 카테고리의 다른 글
Gitlab + Docker + Jenkins 이용한 스프링부트, 리액트 프로젝트 자동 배포 (4) | 2024.02.25 |
---|---|
[AWS] EC2 스프링 부트 배포 중 트러블슈팅 기록 (0) | 2023.06.26 |
[AWS] EC2 파일 업로드 / 다운로드 (0) | 2021.09.22 |