일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- chatgpt #gpt #챗지피티 #ai
- /
- 도커 #Docker #배포 #Spring #MySQL #백엔드배포
- 도커 #docker #docker-compose.yml #도커컴포즈 #배포 #spring #mysql #docker-compose
- Today
- Total
개발자 데뷔!
Docker 배포1 (도커 이미지 생성 & 도커 허브 업로드) 본문
배포를 위해 아래 두 서비스를 도커 컨테이너로 올려야 한다.
* 백엔드 : SpringBoot
* DB : MySQL
배포를 위한 서버를 할당 받았다고 가정, (AWS ec2 등)
현재 ssh로 위 배포 서버에 접속한 상태다.
DataBase 도커 업로드
1. 도커 이미지를 올리기
도커 허브의 공식 mysql 이미지를 다운받는 방법이다.
(기존 로컬에서 잘 작동하던 mysql 을 그대로 쓰고 싶다면,
docker 파일을 통해 이미지화 하고, 이를 도커허브에 업로드해 서버로 다시 내려받는 방법도 있다. => 백엔드 설명)
docker pull mysql:{mysql버전}
#docker pull mysql:8.0.33
2. 필요 데이터 생성
나는 서비스에서 jpa 사용 + ddl-auto =update 설정으로, 첫실행 시 필요 데이터베이스와 테이블이 자동생성된다.
필요에 따라 서버의 mysql콘솔에 접속하거나 / workbench 를 통해 접속하는 방법으로 더미데이터를 입력해준다.
BackEnd 도커 업로드
아래 과정은 로컬에서 동작하는 spring boot(gradle)을 도커 이미지화 해, 서버ip로 이동시키기 위한 방법이다.
아래 과정은 로컬에서 진행해주면 된다
1. SNAPSHOT.jar 생성
처음에, 프로젝트의 어떤 경로에서도 snapshot.jar 파일을 찾을 수 없어서 헤맸다. 당연하다. 만든 적이 없다.
내가 snapshot을 만들겠다고 빌드를 해줘야 한다. 빌드 명령어는 빌드도구 (gradle, maven)에 따라 다를 수 있다.
- 프로젝트 경로 접속 후,
- 아래 명령어 실행
./gradlew build
- {프로젝트root}/build/libs 경로에 아래와 같이 스냅샷 생성된 것을 확인 할 수 있다.
- 백엔드 코드의 변경 사항이 있을 때마다, 위 SNAPSHOT 빌드를 다시 해야 한다.
2. 도커파일 작성
- 프로젝트의 루트디렉토리에 dockerfile을 위치시킨다
- 파일명은 Dockerfile 그대로 한다.
- 아래와 같이 작성했으니 참고
- JAR_FILE 에는 SNAPSHOT.jar 파일의 경로를 써준다.
# DOCKER FILE
FROM openjdk:17-jdk
LABEL maintainer="{관리자 이메일}"
ARG JAR_FILE=build/libs/SwipingJeju-0.0.1-SNAPSHOT.jar
ADD ${JAR_FILE} docker-springboot.jar
ENTRYPOINT ["java","-jar","/docker-springboot.jar"]
3. 도커 이미지 빌드
아래와 같이 빌드하면, 작성한 dockerfile 기준으로 도커이미지가 생성된다.
docker build -t {빌드할 도커이미지 이름} .
트러블 슈팅)
* 그러나 나의 경우, 로컬 / 서버 상 이미지 플랫폼 형식이 일치 하지 않아, 로컬에서 빌드한 이미지를 서버에서 사용하지 못하는 에러를 만났다.. 로컬 - MacOS 를 사용중인데, 찾아보니 맥 사용자에게 이같은 경우가 매우 많다고 한다.
- 로컬 (Image Platform) : linux/arm64/v8
- 서버 (Host Platform) : linux/amd64/v3
다행히 도커에서 위처럼 아키텍처가 다른 경우에 대응하기 위해 '멀티 아키텍처 빌드'를 간단한 명령어로 가능하게 했다. 이외에 다른 방법도 있지만 향후 다른 포스팅으로 따로 정리해 소개하겠다. 사용한 명령어는 아래와 같다. 아래 --push 옵션으로 도커허브에 업로드 까지 한번에 된다.
docker buildx build --platform linux/amd64 -t {도커허브id}/{빌드할 이미지 이름}:{버전태그} --push .
4. 도커 허브 업로드
Docker Desktop 앱을 다운로드 받아 로그인 되어있는 상태라면, 아래 명령어로 바로 로그인된다.
docker login
git 과 비슷한 아래 docker 명령어로 푸시한다. (이 때, 허브에 올라가는 이미지들은 항상 본인의 id/ 를 붙여야 한다)
docker push {도커허브id}/{도커이미지 이름}:{버전태그}
도커 허브에는 로컬에 있는 이미지와, 허브에 올라간 이미지 모두를 확인할 수 있는데,
아래와 같이 상단의 Hub 탭에서 방금 올린 이미지를 확인할 수 있다 . (마지막 올린 시간 표시)
도커 허브에 한 번 올린 이미지는 삭제할 수 없으니 주의하자.
5. 도커 이미지 다운로드
이제 실제 서비스 배포될 '배포 서버 ip'로 접속해, 도커 허브에 올려둔 이미지를 다운로드 받으면 된다.
마찬가지로 명령어는 git 과 비슷하다.
docker pull {도커허브id}/{도커이미지 이름}:{버전태그}
docker images 명령어로 다운받아진 이미지를 확인할 수 있다.
위 과정을 끝내면, 백엔드 배포에 필요한 DB, Backend 두 도커 이미지가 서버에 준비됐다.
'DevOps > Docker' 카테고리의 다른 글
Docker 로그분석 - (도커 체인)트러블슈팅: 갑자기 잘되던 docker 연결이 안된다!! (0) | 2024.04.03 |
---|---|
Docker배포2 - (Docker-Compose.yml 작성) (0) | 2024.04.02 |
Docker 기본 명령어 - image/container/network (0) | 2024.04.02 |
[Docker] Docker 컨테이너 (1) | 2023.11.30 |
[Docker] Docker 이미지 (0) | 2023.11.30 |