eureka 배포하는 방법에 Docker와 전통적인 가상 머신(VM)을 사용하는 방법으로 2가지를 고려했다.
방법1. 전통적인 가상 머신(VM)에서의 작업 흐름(Docker 사용 X)
- VM 생성:
- 클라우드 서비스(예: AWS, Azure, GCP) 또는 로컬 환경에서 가상 머신을 생성한다.
- 인스턴스에 Java 설치:
- VM에 접속하여 필요한 Java 버전을 설치한다.
- 예시: sudo apt-get install openjdk-11-jdk
- Eureka 프로젝트 .jar 파일을 인스턴스에 업로드:
- 로컬 머신에서 .jar 파일을 VM으로 전송한다.
- 예시: scp eureka.jar user@vm-ip:/path/to/directory
- 실행:
- Java 명령을 사용하여 .jar 파일을 실행한다.
- 예시: java -jar /path/to/directory/eureka.jar
2. Docker를 사용하는 작업 흐름(Docker 사용 O)
- Eureka 프로젝트를 Docker 이미지로 빌드:
- Dockerfile을 작성하고, 이를 기반으로 이미지를 빌드한다.
- 예시 Dockerfile:
FROM openjdk:11-jre COPY eureka.jar /app/eureka.jar CMD ["java", "-jar", "/app/eureka.jar"]
- 이미지를 빌드한다: docker build -t your-dockerhub-username/eureka .
- Docker Hub에 이미지 업로드:
- Docker Hub에 로그인한 후 이미지를 푸시한다.
- 예시: docker push your-dockerhub-username/eureka
- 인스턴스에 Docker 설치 및 이미지 다운로드:
- VM에 접속하여 Docker를 설치한다.
- Docker Hub에서 이미지를 다운로드한다.
- 예시:
sudo apt-get install docker.io docker pull your-dockerhub-username/eureka
- 컨테이너 실행:
- 다운로드한 이미지를 사용하여 컨테이너를 실행한다.
- 예시: docker run -d -p 8761:8761 your-dockerhub-username/eureka
VM 방식이 간단해 보일 수 있지만, Docker는 환경 일관성, 배포의 용이성, 자원 효율성, 자동화의 측면에서 더 강력한 이점을 제공한다.
그렇기 때문에 Docker를 사용하기로 했다!
- 환경 일관성
- Docker: 이미지로 패키징해 어디서나 동일한 환경 보장.
- VM: 수동 설정으로 환경 간 차이 발생 가능.
- 배포 및 확장 용이성
- Docker: 이미지를 한 번 빌드하면 여러 인스턴스에서 쉽게 배포 및 확장 가능.
- VM: 새 인스턴스마다 설정을 반복해야 하므로 비효율적.
- 자원 효율성
- Docker: 가벼우며, 리소스를 효율적으로 사용.
- VM: 각 VM이 독립된 OS를 사용해 리소스 소모가 큼.
- 자동화
- Docker: CI/CD 파이프라인과 쉽게 통합되어 자동화된 배포와 관리 지원.
- VM: 자동화가 가능하지만 설정과 관리가 더 복잡.
eureka 배포
Docker를 사용하는 작업 흐름
#1 VM 생성
1. 고정 외부 ip 생성
2. 방화벽 열어주기
2-1. VPC 네트워크의 방화벽 메뉴로 이동
방화벽 설정을 하여 특정 프로토콜과 포트를 허용해준다. 외부망에서 GCP로 접속하는 Inbound는 TCP/UDP/ICMP 프로토콜과 80/443/22/3389 포트만 허용하고 있다. 포트가 허용되지 않으면, 나중에 배포 후 테스트할 때 접속이 안될 수 있다.
2-2. 포트 8761로 들어갈 것이기 때문에 방화벽 규칙을 만들어 주었다.
3. docker를 사용할거니까 docker 설치
https://docs.docker.com/engine/install/ubuntu/
아래 명령어를 입력했을 때, 버전명이 나오면 다운로드 성공!
docker -v
4. docker 권한 설정
혹시 명령어를 입력하는데 docker에 대해서 권한이 없다고 뜨면 docker그룹에 넣어주면 된다.
(/var/run/docker.sock 권한 오류, permission denied)
(명령어 docker를 쓰기 위해서. 계정에 권한이 없으면 sudo docker ~이런식으로 써야함..)
다음 명령어를 입력해서 docker group에 추가해주자
sudo usermod -aG docker $USER
💡 명령어
해석요약: docker grop에 현재 로그인한 사용자($USER)를 추가하여 Docker 명령을 수행할 수 있게 된다.
sudo: 슈퍼 유저 권한으로 명령어를 실행한다. 일반적으로 관리자 권한이 필요한 작업을 할 때 사용한다.
usermod: 사용자 계정을 수정한다.
-aG docker: 사용자를 그룹에 추가하는 옵션이다. -a는 추가(add)를 의미하고, -G docker는 사용자를 docker 그룹에 추가한다.
$USER: 현재 로그인한 사용자의 이름을 나타내는 환경 변수이다. 실제 명령어 실행 시 이 부분은 로그인한 사용자의 이름으로 대체된다.
docker는 이미 실행중이기 때문에, 재부팅해야 옵션이 적용된다.
$ newgrp docker
#2 프로젝트에 적용
1. Docke file 생성
docker 이미지 설정
FROM openjdk:17 // .jar파일을 실행하기 위해 java설치
ARG JAR_FILE=build/libs/villion_eureka_service-0.0.1-SNAPSHOT.jar
//docker file이 있는 현재 경로에서 build/libs/jar파일 변수 처리
COPY ${JAR_FILE} app.jar // 변수처리된 jar파일을 app.jar에 복사
ENTRYPOINT ["java","-jar","/app.jar"] // 이어서 읽으면 jar파일 실행하는 것임 'java -jar /app.jar'
2. 프로젝트 build하기
3. docker build
Docker 이미지 빌드/생성
docker build -t 계정명/리포지토리명 ./
→ ex) docker build -t sesamdocker/villion-eureka-service ./
이미지이름은 계정명/리포지토리명으로 했다.
터미널에서 프로젝트 루트 경로로 이동한 후 위 명령어를 입력한다.
(그냥 인텔리제이 아래 뜨는 터미널 쓰는 걸 추천드립니다,, 경로가 들어가져있어서 편해서요,,)
Docker Desktop에 들어가서 Images를 확인해보면 올라온 것을 볼 수 있다.
4. build한 이미지를 docker hub 올리기
4-1. villion-eureka-service를 repository 생성해줬다.
4-2. build한 이미지를 DockerHub에 push
docker push 이미지이름
→ ex) docker push sesamdocker/villion-eureka-sevice
이미지이름은 계정명/리포지토리명으로 했다.
#3 인스턴스
1. 인스턴스 터미널에 들어가기
2. docker login
repository 생성할 때, private로 생성하면 docker를 사용하기 전에 login을 해야한다.
docker login -u docker계정명 → docker login -u sesamdocker
3. 인스턴스에서 DockerHub에 올라간 이미지 pull
docker pull sesamdocker/villion-eureka-service
4. 컨테이너 생성(이미지 실행)
docker run --name 실행될컨테이너이름 -d -p 8761:8761 실행할이미지이름
→
docker run --name villion-eureka-service -d -p 8761:8761 sesamdocker/villion-eureka-service
docker 컨테이너 실행되고 있는지 확인
docker ps
5. 확인
외부 ip : 8761로 접속하면 eureka 페이지가 뜬다!
끝
config-service 배포
유의할 점
- config-repo 파일도 함께 적용되어야 한다. → git 에 올려두기
#0 config-repo
참고링크 - [MSA] Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA) - Spring Cloud Config
application.yml
server:
port: 8888
spring:
application:
name: config-service
cloud:
config:
server:
git:
uri: https://github.com/VillionProject/villion_config_repo.git
config-repo git에 올리기
✔ config-repo 변경사항 git에 올리면 적용이 되는지 확인
#1 VM
1. 방화벽 설정 : config-service port(8888)를 열어둔다.
2. 이미 생성되어 있는 uereka-service에 들어간다.
3. Docker사용할꺼니까 Docker 설치
4. Docker 권한 설정
5. 권한 변경된 거 적용하기 위해 Docker 재부팅
#2 프로젝트
1. Dockerfile 생성
FROM openjdk:17
ARG JAR_FILE=build/libs/villion_config-service-0.0.1-SNAPSHOT.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
2. 프로젝트 build하기
3. DockerHub에 이미지 올리기
docker build -t 계정명/리포지토리명 ./ → ex) docker build -t sesamdocker/villion-config-service ./
4. docker push
docker push 이미지이름 → ex) docker push sesamdocker/villion-config-sevice
#3 인스턴스
1. docker login
2. docker pull
docker pull sesamdocker/villion-eureka-sevice
3. 이미지 실행(컨테이너 생성)
docker run --name 실행될컨테이너이름 -d -p 8761:8761 실행할이미지이름 →
docker run --name villion-eureka-service -d -p 8761:8761 sesamdocker/villion-eureka-service
'Project > Collabo Project' 카테고리의 다른 글
[Villion] [GCP] 외부에서 구매한 도메인 등록하기 (0) | 2024.09.13 |
---|---|
[Villion] Gateway와 User-Service 간 네트워크 문제 해결 및 Docker 설정 방법 (0) | 2024.09.05 |
[Villion] Docker+GCP로 프론트 배포 정리 (1) | 2024.08.28 |
[Villion] FullText Index를 활용한 도서 검색 기능 구현 (0) | 2024.08.15 |
[Villion] 이 책과 함께 구매한 도서 목록 구현하기 (0) | 2024.08.14 |