컨테이너 기반 애플리케이션 서버에 WAR 파일 배포 방법

DockerBeginner
지금 연습하기

소개

이 튜토리얼에서는 Docker 를 사용하여 컨테이너 기반 애플리케이션 서버에 WAR(Web Application Archive) 파일을 배포하는 방법을 안내합니다. 컨테이너 기반 애플리케이션 서버를 구성하고 WAR 파일을 원활하게 통합하여 효율적인 배포 프로세스를 보장하는 방법을 배울 것입니다.

Docker 및 WAR 파일 이해

Docker 는 컨테이너화된 환경에서 애플리케이션을 개발, 배포 및 관리하는 인기 있는 오픈소스 플랫폼입니다. 반면, WAR(Web Application Archive) 파일은 자바 웹 애플리케이션의 코드, 리소스 및 구성 파일을 포함하는 표준 패키징 형식입니다.

Docker 란 무엇인가?

Docker 는 개발자가 애플리케이션과 모든 종속성을 컨테이너라는 표준화된 단위로 패키징할 수 있도록 하는 도구입니다. 컨테이너는 가볍고, 휴대 가능하며, 자체적으로 완성되어 있어 개발 환경부터 프로덕션 환경까지 다양한 환경에서 애플리케이션을 일관되게 배포하고 실행하기 용이합니다.

WAR 파일이란 무엇인가?

WAR 파일은 서블릿, JSP, 자바 클래스 및 기타 리소스를 포함하여 웹 애플리케이션을 위한 모든 필수 구성 요소를 담고 있는 자바 웹 애플리케이션 아카이브입니다. WAR 파일은 일반적으로 Apache Tomcat 이나 JBoss 와 같은 자바 애플리케이션 서버에 배포되어 웹 애플리케이션을 실행합니다.

Docker 컨테이너에 WAR 파일을 배포하는 장점

Docker 컨테이너에 WAR 파일을 배포하는 것은 여러 가지 장점을 제공합니다.

  • 일관성: 컨테이너는 애플리케이션과 종속성을 함께 패키징하여 다양한 환경에서 일관성을 유지하는 데 도움이 됩니다.
  • 확장성: 컨테이너는 변화하는 요구 사항에 맞춰 쉽게 확장하거나 축소할 수 있어 애플리케이션의 전체적인 확장성을 향상시킵니다.
  • 이식성: 컨테이너화된 애플리케이션은 다른 플랫폼과 환경으로 쉽게 이동할 수 있어 호환성 문제를 줄입니다.
  • 격리: 컨테이너는 높은 수준의 격리를 제공하여 한 애플리케이션의 종속성과 구성이 다른 애플리케이션에 영향을 미치지 않도록 합니다.

Docker 환경 준비

Docker 컨테이너에 WAR 파일을 배포하기 전에 Docker 환경을 설정해야 합니다. 일반적으로 시스템에 Docker 를 설치하고 기본 Docker 명령어에 익숙해지는 것을 포함합니다. Ubuntu 22.04 에 Docker 를 설치하려면 다음 명령어를 사용할 수 있습니다.

sudo apt-get update
sudo apt-get install -y docker.io
sudo systemctl start docker
sudo systemctl enable docker

Docker 가 설치되면 다음 명령어를 실행하여 설치를 확인할 수 있습니다.

docker version

이 명령어는 시스템에 설치된 Docker 버전을 표시합니다.

Docker 컨테이너에 WAR 파일 배포

WAR 파일을 사용한 Docker 이미지 생성

Docker 컨테이너에 WAR 파일을 배포하려면 먼저 WAR 파일을 포함하는 Docker 이미지를 생성해야 합니다. 다음은 이 프로세스를 보여주는 예시 Dockerfile 입니다.

## 설치된 Java가 포함된 베이스 이미지 사용
FROM openjdk:8-jdk-alpine

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

## WAR 파일을 컨테이너에 복사
COPY my-application.war .

## 애플리케이션이 실행될 포트 노출
EXPOSE 8080

## 애플리케이션 서버를 시작하고 WAR 파일을 배포하는 명령 설정
CMD ["java", "-jar", "my-application.war"]

이 예제에서는 Java 런타임 환경이 포함된 openjdk:8-jdk-alpine 베이스 이미지를 사용합니다. 그런 다음 WAR 파일 (my-application.war) 을 컨테이너의 작업 디렉토리 (/app) 로 복사하고, 포트 8080 을 노출하며, 애플리케이션 서버를 시작하고 WAR 파일을 배포하는 명령을 설정합니다.

Docker 이미지를 생성하려면 Dockerfile 이 있는 동일한 디렉토리에서 다음 명령어를 실행합니다.

docker build -t my-application .

이렇게 하면 WAR 파일이 포함된 my-application이라는 Docker 이미지가 생성됩니다.

Docker 컨테이너 실행

Docker 이미지가 생성되면 다음 명령어를 사용하여 컨테이너를 실행할 수 있습니다.

docker run -p 8080:8080 my-application

이렇게 하면 컨테이너가 시작되고 호스트의 포트 8080 이 컨테이너의 포트 8080 으로 매핑되어 로컬 머신에서 웹 애플리케이션에 접근할 수 있게 됩니다.

컨테이너가 실행 중인지 확인하려면 다음 명령어를 사용할 수 있습니다.

docker ps

이 명령어는 방금 시작한 컨테이너를 포함하여 모든 실행 중인 컨테이너를 나열합니다.

컨테이너 기반 애플리케이션 서버 구성

WAR 파일을 Docker 컨테이너에 배포할 때, 웹 애플리케이션이 올바르게 실행되도록 기본 애플리케이션 서버를 구성해야 할 수 있습니다. 다음은 수행해야 할 일반적인 구성 작업입니다.

애플리케이션 서버 포트 구성

Docker 컨테이너 내에서 실행되는 애플리케이션 서버는 기본적으로 특정 포트에서 수신 대기합니다. 이 포트가 호스트 머신에서 노출하고자 하는 포트와 일치하지 않을 수 있습니다. Docker 컨테이너를 실행할 때 -p 또는 --publish 플래그를 사용하여 포트 매핑을 구성할 수 있습니다.

docker run -p 8080:8080 my-application

이렇게 하면 호스트 머신의 포트 8080 이 컨테이너 내부의 포트 8080 으로 매핑되어 http://localhost:8080에서 웹 애플리케이션에 접근할 수 있습니다.

애플리케이션 서버 환경 변수 구성

Docker 컨테이너 내에서 실행되는 애플리케이션 서버는 특정 환경 변수가 설정되어야 할 수 있습니다. Docker 컨테이너를 실행할 때 -e 또는 --env 플래그를 사용하여 이러한 환경 변수를 설정할 수 있습니다.

docker run -e DB_HOST=mydb.example.com -e DB_PASSWORD=mypassword my-application

이렇게 하면 컨테이너 내부에 DB_HOSTDB_PASSWORD 환경 변수가 설정되어 애플리케이션 서버와 웹 애플리케이션에서 이를 사용할 수 있습니다.

애플리케이션 서버 로깅 구성

Docker 컨테이너 내에서 실행되는 애플리케이션 서버는 디버깅이나 모니터링을 위해 접근해야 하는 로그를 생성할 수 있습니다. Docker 컨테이너를 실행할 때 호스트 디렉토리를 볼륨으로 마운트하여 로깅 동작을 구성할 수 있습니다.

docker run -v /path/to/logs:/var/log/app my-application

이렇게 하면 호스트 머신의 /path/to/logs 디렉토리가 컨테이너 내부의 /var/log/app 디렉토리로 매핑되어 호스트 머신에서 애플리케이션 서버 로그에 접근할 수 있습니다.

애플리케이션 서버 리소스 구성

Docker 컨테이너 내에서 실행되는 애플리케이션 서버는 CPU 또는 메모리와 같은 특정 리소스 할당을 필요로 할 수 있습니다. 이러한 리소스 할당은 --cpus 또는 --memory와 같은 다양한 Docker 실행 플래그를 사용하여 구성할 수 있습니다.

docker run --cpus 2 --memory 4g my-application

이렇게 하면 애플리케이션 서버를 실행하는 컨테이너에 2 개의 CPU 코어와 4GB 의 메모리가 할당됩니다.

Docker 컨테이너 내에서 실행되는 애플리케이션 서버를 구성함으로써 웹 애플리케이션이 컨테이너화된 환경에서 올바르게 배포되고 실행되도록 할 수 있습니다.

요약

이 튜토리얼을 따라 하면 Docker 를 사용하여 컨테이너 기반 애플리케이션 서버에 WAR 파일을 배포하는 방법에 대한 포괄적인 이해를 얻을 수 있습니다. 컨테이너 기반 애플리케이션 서버를 구성하고 WAR 파일을 성공적으로 통합하는 데 필요한 단계를 배우게 되어 컨테이너화된 환경에서 웹 애플리케이션을 효율적으로 관리하고 배포할 수 있게 됩니다.