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/
Install Docker Engine on Ubuntu
Jumpstart your client-side server applications with Docker Engine on Ubuntu. This guide details prerequisites and multiple methods to install Docker Engine on Ubuntu.
docs.docker.com
아래 명령어를 입력했을 때, 버전명이 나오면 다운로드 성공!
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 |