Docker로 Spring 웹 애플리케이션 배포하기 (2) - Docker 컨테이너에 배포

2024. 12. 12. 09:23·서버&인프라/Cloud

 

 

0. 메이븐 설치 확인하기

 

Windows PowerShell에 아래 명령어 입력

> mvn -v

 

 

* 빨간 코드가 안 떴다면 1번으로 넘어가기 *

 

 

위와 같이 빨간 코드가 뜬다면 메이븐 설치가 안 된 것이다.

 

아래 링크에 들어가서 설치부터 진행

 

 

 

 

 

Maven 다운로드

 

 

Download Apache Maven – Maven

Downloading Apache Maven 3.9.9 Apache Maven 3.9.9 is the latest release: it is the recommended version for all users. System Requirements Java Development Kit (JDK) Maven 3.9+ requires JDK 8 or above to execute. It still allows you to build against 1.3 and

maven.apache.org

 

Binary zip archives를 다운받는다.

 

 

 

apache-maven-3.8.8-bin.zip
7.99MB

 

 

 

 

다운받은 폴더를 Program Files > Apache 폴더 안에 압축 해제했다.

 

 

 

 

 

 

Maven 환경변수 세팅

 

① 변수 이름 : MAVEN_HOME, 변수 값 : 방금 만든 폴더 경로로 환경 변수를 생성한다.

 

 

② 이후 시스템 변수의 Path > 편집 > 새로 만들기를 하여 bin 경로를 추가한다.

C:\Program Files\Apache\apache-maven-3.8.8\bin

 

 

 

 

 

Shell 재실행 후 다시 명령어 입력

> mvn -v

 

빨간 코드가 사라진 것을 볼 수 있다!

 

메이븐 설치 성공

 

 

 

 


 

 

 

 

 

1. 이클립스 Maven Clean으로 패키징

 

프로젝트 우클릭 > Run As > 5 Maven Clean

 

 

 

 

콘솔창 확인

 

프로젝트가 WAR 파일로 성공적으로 패키징 되었음을 나타냄!

 

 

 

 

 

 

2. Dockerfile 작성

 

 

Getting Started | Spring Boot with Docker

Congratulations! You have created a Docker container for a Spring Boot application! By default, Spring Boot applications run on port 8080 inside the container, and we mapped that to the same port on the host by using -p on the command line.

spring.io

 

Spring Boot라면 위 페이지 참고하여 Dockerfile 작성

 

 

 

 

 

 

프로젝트 루트 폴더 안에 Dockerfile을 만들었다. (target 폴더 안에 생성 아님!!!)

 

 

 

 

# Tomcat 8..을 기반 이미지로 사용
FROM tomcat:8.5

# Spring 애플리케이션의 WAR 파일을 찾기 위해 Maven 빌드 후 target 디렉토리에 생성된 WAR 파일을 복사
# 여기서 WAR_FILE은 Maven 빌드 후 target 폴더에 생성된 WAR 파일을 의미
ARG WAR_FILE=target/*.war

# Tomcat을 8080 포트에서 실행
EXPOSE 8080

# Tomcat은 이미 ENTRYPOINT로 기본 실행되므로, 별도로 명시할 필요는 없음

# Copy WAR file into the Tomcat webapps directory
COPY ./path/to/animalpage.war /usr/local/tomcat/webapps/ROOT.war

 

나는 Spring Boot가 아니라 톰캣을 이용한 Spring 웹 페이지이기 때문에 위와 같이 작성했다.

 

 

 

 

 

 

 

3. Docker Repository 생성

 

작성한 Dockerfile로 프로젝트 빌드 및 이미지화하여 Docker hub에 push하기

 

 

Docker Hub Container Image Library | App Containerization

Increase your reach and adoption on Docker Hub With a Docker Verified Publisher subscription, you'll increase trust, boost discoverability, get exclusive data insights, and much more.

hub.docker.com

 

docker 사이트 접속 후 로그인 > Docker Hub 메뉴 클릭

 

 

 

 

 

Create repository 클릭

 

 

 

 

 

 

레포지토리 이름과 설명을 적고 Create 클릭

 

 

 

 

 

 

4. Docker 이미지 생성

 

Windows PowerShell을 열고 도커 파일을 생성한 위치로 이동 후 명령어 입력

 

 

자신이 도커파일을 생성한 프로젝트 위치로 이동

> cd /GovFrameDev-3.10.0-64bit/workspace/Test8_shop

 

 

메이븐 패키징

> mvn package

배포 가능한 아티팩트(jar, war 파일 등 생성)

 

 

도커 이미지 생성

// docker build -t {docker hub 계정명}/{docker hub repository명} .
> docker build -t oeun/animalpage .

 

 

 

 

위와 같이 파란 코드가 뜬다면 도커 이미지 생성 성공!

 

 

만약 빨간 코드가 뜬다면..?

더보기

나는 실제로 아래와 같은 에러가 떴었는데

 

===================================================
[ERROR] Failed to execute goal on project Test8_shop: Could not resolve dependencies for project com:Test8_shop:war:1.0.0: Failed to collect dependencies at egovframework.rte:egovframework.rte.ptl.mvc:jar:3.10.0: Failed to read artifact descriptor for egovframework.rte:egovframework.rte.ptl.mvc:jar:3.10.0: Could not transfer artifact egovframework.rte:egovframework.rte.ptl.mvc:pom:3.10.0 from/to maven-default-http-blocker (http://0.0.0.0/): Blocked mirror for repositories: [egovframe (http://maven.egovframe.go.kr/maven, default, releases), egovframe_old1 (http://maven.egovframe.kr:8080/maven/, default, releases), egovframe_old2 (http://www.egovframe.go.kr/maven/, default, releases)]

===================================================

 

 

pom.xml에 

<repository>
<id>egovframe</id>
<url>https://maven.egovframe.go.kr/maven/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>

url 부분이 http로 되어있었다!

 

https로 변경 후 mvn clean install -U 명령어로 메이븐 강제 업데이트하여 해결됨

 

 

 

 

 

5. Repository로 이미지 push

// docker push {docker hub 계정명}/{docker hub repository명}:{tagname(optional)}
> docker push oeun/animalpage

 

 

 

 

 

 

 

6. 우분투에서 docker 실행

 

명령어를 순서대로 입력

 

시스템 패키지를 최신 상태로 업데이트

$ sudo apt update
$ sudo apt upgrade -y

 

 

Docker 패키지 설치

$ sudo apt install docker.io -y

 

 

Docker 시작 및 상태 확인

$ sudo systemctl start docker	# 도커 시작
$ sudo systemctl status docker	# 도커 상태 확인

 

위와 같이 active (running)이 뜬다면 정상 실행!

 

 

 

 

 

 

7. Docker hub에 업로드한 Docker 이미지 파일 내려받기

$ # sudo docker pull {계정명}/{repository명}
$ sudo docker pull oeun/animalpage

 

 

 

 

 

8. Docker 이미지 구동

$ # sudo nohup docker run -p {host 포트}/{container 포트} {docker hub 계정명}/{docker hub repository명} > nohup.out 2>&1 &
$ sudo nohup docker run -p 8081:8080 oeun/animalpage > nohup.out 2>&1 &

$ sudo docker ps # 도커 컨테이너 목록 확인

 

또는

 

 

윈도우 파워쉘에서 실행

> docker-compose up -d

(기존 컨테이너가 있으면 다시 시작, 없으면 생성)

 

 

 

 

9. 결과 확인

 

 

컨테이너가 돌아가고 있는 가상 호스트 머신의 IP

$ hostname -I

 

맨 앞에  X.X.X.X 형식으로 IP가 나온다.

 

 

톰캣 실행 후 주소 접속하기 ( X 부분에 자기 IP 넣기)

http://X.X.X.X:8081

 

원래 DB 연결을 안 해도 화면은 뜰 것인데 

 

난 접속 결과 하얀 화면만 뜬다..^^

 

 

 

로그 확인

$ cat nohup.out

 

DB 연결 오류가 엄청나다.

 

DB 연결은 다음 편에서 진행하도록 하겠다.

 

 

 

'서버&인프라 > Cloud' 카테고리의 다른 글

Docker war 파일 못찾음 not a directory: unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type 에러 해결 방법  (0) 2025.01.07
Docker로 Spring 웹 애플리케이션 배포하기 (4) - 이미지 처리, 볼륨 매핑  (0) 2024.12.19
Docker로 Spring 웹 애플리케이션 배포하기 (3) - MySQL DB 연결과 데이터 옮기기  (0) 2024.12.13
Docker로 Spring 웹 애플리케이션 배포하기 (1) - Windows 11 Pro에서 Docker 설치 방법  (0) 2024.12.11
클라우드 기본 개념 (1) - 클라우드 컴퓨팅 서비스, Monolith, MSA  (0) 2024.12.06
'서버&인프라/Cloud' 카테고리의 다른 글
  • Docker로 Spring 웹 애플리케이션 배포하기 (4) - 이미지 처리, 볼륨 매핑
  • Docker로 Spring 웹 애플리케이션 배포하기 (3) - MySQL DB 연결과 데이터 옮기기
  • Docker로 Spring 웹 애플리케이션 배포하기 (1) - Windows 11 Pro에서 Docker 설치 방법
  • 클라우드 기본 개념 (1) - 클라우드 컴퓨팅 서비스, Monolith, MSA
오은이
오은이
  • 오은이
    오은이 하우스
    오은이
  • 전체
    오늘
    어제
    • 분류 전체보기 (80) N
      • 일기 (2)
      • Python (1)
      • Java (4)
      • CS (2)
      • 코딩테스트 (26)
        • 백준 (25)
        • 프로그래머스 (1)
      • 웹 개발 (17)
        • Spring (6)
        • JavaScript (3)
        • WebSquare (5)
        • React (3)
      • DB (5)
        • MySQL (4)
        • Oracle (1)
      • 서버&인프라 (18)
        • Server (5)
        • Cloud (12)
        • Linux (1)
      • 자격증 (5) N
        • 정보처리기사 (1)
        • AICE (4) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    cloud DB
    Spring
    티스토리챌린지
    MySQL
    클라우드
    웹스퀘어
    머신러닝
    docker
    AICE
    톰캣
    Apache
    db
    자바
    백준
    websquare
    dockerspring
    AI
    백준자바
    EC2
    AICE Associate
    Associate
    리액트
    docker배포
    tomcat
    클라우드 배포
    알고리즘
    react
    오블완
    Java
    SpringBoot
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
오은이
Docker로 Spring 웹 애플리케이션 배포하기 (2) - Docker 컨테이너에 배포
상단으로

티스토리툴바