개발자의 공부방/서버 & 리눅스

도커] 시놀로지 NAS와 도커를 이용한 스프링부트 배포

  • -
728x90
반응형

전 포스팅에서 docker registry를 이용해서 개인적으로만 사용할 수 있는 hub를 구축해 이미지를 push & pull을 할 수 있도록 했습니다

이제는 로컬에서 도커 이미지를 push해서 NAS 도커에서 스프링부트를 띄워보도록 하겠습니다.

 

환경

ASUS 공유기 (RT-AC68U Merin firmware 386.5_2)

NAS (헤놀로지, 타오나스 DSM6.2.1-23824)

맥북 M1 Pro Ventura 13.6

 

1) 스프링부트 Dockerfile 설정

docker 빌드 시 JDK 에러가 났을 때는 아래 깃허브에서 jdk or jre를 확인해 Dockerfile을 수정합니다.

docs/eclipse-temurin/README.md at master · docker-library/docs (github.com)

# 첫 번째 스테이지: 애플리케이션 빌드
FROM gradle:7.3.3-jdk17 AS build
WORKDIR /app

# 필요한 파일 복사
COPY build.gradle .
COPY settings.gradle .
COPY src ./src

# 애플리케이션 빌드
RUN gradle clean build -x test

# 두 번째 스테이지: JRE 17을 사용한 실행 이미지
FROM eclipse-temurin:17.0.9_9-jre-alpine

# 작업 디렉토리 설정
WORKDIR /app

# 빌드 스테이지에서 빌드된 JAR 파일을 복사
COPY --from=build /app/build/libs/jpashop-0.0.1-SNAPSHOT.jar ./app.jar

# 데이터베이스 연결 정보 및 다른 환경 변수 설정
ENV SPRING_DATASOURCE_URL=[데이터베이스 설정 URL]
ENV SPRING_DATASOURCE_USERNAME=[계정]
ENV SPRING_DATASOURCE_PASSWORD=[비밀번호]

# 애플리케이션 실행
CMD ["java", "-jar", "./app.jar"]

 

2) 도커 이미지 빌드

일반적으로 docker build 후 docker내에서 이미지를 올리면 계속되지 않는거였습니다.

검색해보니 맥북 M1에서 빌드를 했을 경우 리눅스에서 정상적으로 띄울 수 없다는 글을 봐서 아래 명령어를 이용해 빌드를 했습니다

더보기

경로 및 daemon.json 설정

mac OS 경로) $HOME/.docker/daemon.json

windows 경로) %USER%\.docker\daemon.json

linux 경로) /etc/docker/daemon.json

 

{
 "builder": {
  "gc": {
   "defaultKeepStorage": "20GB",
   "enabled": true
  }
 },
 "experimental": false,
 "debug": true,
 "insecure-registries": ["localhost:5454"]
}
docker build --platform="linux/amd64" --build-arg DEPENDENCY=build/dependency -t testapp:1.0 .

 

3) 도커 레지스트리 확인

로컬에서 만든 이미지를 registry에 올린 것을 확인합니다.

저는 testapp 이라는 이름으로 올려져 있습니다.

 

다운로드한 이미지가 testapp에 있습니다

 

이제 실행 후 testapp 컨테이너에 세부사항을 설정합니다.

컨테이너 이름: app1

로컬포트: 5500

컨테이너 포트: 8080

폴더경로: volume2/docker/testRepository (테스트를 위해 폴더 경로를 임시로 지정했습니다.)

경로: /var/libs/repository

 

4) 도커 컨테이너 실행

이제 실행해봅니다

docker run 명령어를 해도 되지만 DSM의 도커 컨테이너 UI를 이용했습니다.

app1(스프링부트)컨테이너가 정상적으로 실행되고 있습니다.

세부 사항으로 가서 로그를 확인해봅니다.

 

로그 상에 스프링부트 로고와 함께 기본적인 로그가 띄워져있습니다. 성공입니다.

 

5) 웹 접속 설정

NAS의 주소로 들어가면 됩니다.

NAS IP주소가 192.168.1.1 이고 포트가 8080이면

http://192.168.1.1:8080 으로 접속하면 됩니다.

 

접속하기 전에 DSM에서 내부포트를 방화벽에 추가했는지 확인합니다.

저는 역방향프록시를 적용했기 때문에 아래 방화벽 규칙 중 내장 응용프로그램에서 선택에서 설정해줬습니다.

 

역방향프록시 설정

app1(스프링부트) 컨테이너의 로컬포트를 5500으로 설정했었습니다.

역방향프록시 설정 시 대상에 5500포트를 설정합니다.

외부에서 접속할 포트는 4545로 설정했습니다.

 

방화벽 규칙 설정

 

포트포워딩 설정

ASUS 관리자 페이지에서 외부로 접속할 포트를 포트포워딩합니다.

 

 

웹 접속 결과)

http://192.168.1.1:4545 IP주소로 입력하니 정상적으로 나옵니다!
(김영한님의 JPA 기본 강좌 프로젝트를 테스트로 배포해봤습니다)

 

저는 ASUS 공유기를 사용하고 있기 때문에 도메인으로 접속되도록 포트포워딩을 진행했습니다.

 

도메인으로 접속 시 정상적으로 동작됩니다!

 

만들어진 프로젝트를 이용하니 아래 로그에 회원 조회 등의 select 쿼리가 찍혀있음을 확인할 수 있습니다.

 

 

 

참고 : [Docker] 이미지 플랫폼 관련 에러(The requested image's platform (linux/arm64/v8) does not match the detected host platform (linux/amd64) ...) (tistory.com)

 

[Docker] 이미지 플랫폼 관련 에러(The requested image's platform (linux/arm64/v8) does not match the detected host plat

도커 허브를 통해 ec2 인스턴스에 배포하고자 하였음. Dockerfile 만들고. ec2에 도커 설치하고 systemctl docker start 로 도커를 딱 켜고! 도커 허브에서 이미지 땡겨받아서 run만 하면 되는데....! 다음과

sas-study.tistory.com

[Docker]맥북 M1 빌드 오류(linux/arm64, linux/amd64) (tistory.com)

 

[Docker]맥북 M1 빌드 오류(linux/arm64, linux/amd64)

1. 맥북 M1 build 에러코드 WARNING: The requested image's platform (linux/arm64/v8) does not match the detected host platform (linux/amd64) and no specific platform was requested standard_init_linux.go:228: exec user process caused: exec format error

hun-dev.tistory.com

Docker Private Container Registry 만들기 :: Modern Architecture Stories (tistory.com)

 

Docker Private Container Registry 만들기

이 포스팅은 2020년 네이버 블로그에 올렸던 내용을 리 포스팅했습니다. 지금까지의 포스팅에서 도커(docker) 이미지(혹은 컨테이너 이미지)는 도커 허브(https://hub.docker.com/)로부터 공개된 이미지를

sharplee7.tistory.com

 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.