Java는 현재 가장 널리 사용되는 엔터프라이즈 개발 언어 중 하나입니다. 객체 지향 프로그래밍의 핵심 언어로서, 엔터프라이즈급 애플리케이션과 테스트 플랫폼을 구축할 수 있는 훌륭한 생태계를 갖추고 있습니다. 다만 초보자에게는 Java 환경을 설치하고 익숙해지는 과정이 처음에는 다소 시간이 걸릴 수 있습니다.
Docker 컨테이너를 활용하면 컨테이너 내부에서 Java 런타임 환경(JRE)에 바로 접근할 수 있습니다. 필요한 라이브러리가 이미 설치된 패키지형 환경을 손쉽게 관리할 수 있기 때문입니다. 로컬 머신에 Docker가 설치되어 있다면 복잡한 설정 과정을 거칠 필요 없이, Docker 레지스트리에서 Java 이미지를 바로 내려받아(pull) 컨테이너가 제공하는 환경 안에서 Java 애플리케이션을 몇 가지 간단한 단계만으로 실행할 수 있습니다.
이 글에서는 Docker 컨테이너 안에서 Java 애플리케이션을 실행하기 위해 따라야 할 모든 단계를 살펴보겠습니다. Docker 컨테이너에서 Java 애플리케이션을 구동하는 방법은 크게 두 가지입니다.
Dockerfile에 apt-get 등의 명령어를 직접 작성하여 커스텀 이미지를 생성·빌드하고 Java를 설치하는 방법
Docker 레지스트리에서 공식 Java 이미지를 바로 pull 받아 그 위에서 Java 애플리케이션을 실행하는 방법
여기서는 더 간편한 두 번째 방법을 사용하겠습니다. 단계별로 하나씩 살펴보겠습니다.
1. Dockerfile과 Java 애플리케이션을 담을 빌드 컨텍스트 만들기
먼저 Dockerfile과 Java 애플리케이션을 함께 담을 Docker 빌드 컨텍스트(디렉터리)를 생성해야 합니다.
mkdir my-java-app
2. Java 애플리케이션 작성
.java 확장자를 가진 파일에 간단한 Java 애플리케이션을 작성합니다. 아래 예제 코드를 앞서 생성한 "my-java-app" 디렉터리 안에 "tutorialspoint.java"라는 이름으로 저장합니다.
import java.util.*;
class Main{
public static void main(String args[]){
System.out.println("Welcome to TutorialsPoint");
}
}
3. 이미지 빌드용 Dockerfile 작성
"dockerfile"이라는 이름의 파일을 생성하고, 아래 내용을 작성한 뒤 Java 애플리케이션이 들어 있는 "my-java-app" 디렉터리에 저장합니다.
#Java 베이스 이미지 pull FROM java:8 #작업 디렉터리 설정 WORKDIR /var/www/java #빌드 컨텍스트 복사 COPY . /var/www/java #Java 애플리케이션 컴파일 RUN javac tutorialspoint.java #컴파일된 실행 파일 구동 CMD ["java", "Main"]
위 Dockerfile은 Java 이미지를 생성하고, 해당 이미지와 연결된 Docker 컨테이너 안에서 애플리케이션을 실행하는 데 필요한 모든 명령을 정의합니다. Docker 레지스트리에서 Java 8 이미지를 pull 받고 작업 디렉터리를 설정한 뒤, Java 애플리케이션이 포함된 빌드 컨텍스트를 복사합니다. 이후 javac 명령으로 애플리케이션을 컴파일하고, 마지막으로 CMD 명령을 통해 컴파일 결과물인 실행 파일을 구동합니다.
4. Docker 이미지 빌드
Dockerfile 작성을 마쳤다면 다음 빌드 명령어로 Docker 이미지를 생성할 수 있습니다.
sudo docker build -t <image-name> .
위 명령어를 실행하면 Docker 이미지가 성공적으로 빌드됩니다.
5. Docker 컨테이너 실행
이제 docker run 명령어를 사용해 앞서 만든 이미지와 연결된 Docker 컨테이너를 생성하고, 그 안에서 Java 애플리케이션을 실행할 수 있습니다.
sudo docker run <image-name>
마무리
모든 Java 애플리케이션을 실행할 수 있는 완벽한 Java 런타임 환경을 직접 구축하는 일은 생각보다 번거로운 작업일 수 있습니다. 다행히 Docker는 사전에 빌드된(pre-built) Java 이미지를 제공하므로, Docker 레지스트리에서 손쉽게 pull 받아 즉시 Java 애플리케이션 개발을 시작할 수 있습니다. 이 방식을 확장하면 Spring 환경이나 기타 Java 엔터프라이즈 플랫폼도 구성할 수 있어 대규모 Java 프로젝트에도 충분히 활용할 수 있습니다. Docker 컨테이너는 버전 관리, 프로젝트 관리, 리소스 관리 등을 걱정하지 않고도 모든 애플리케이션을 관리할 수 있는 독립적인 환경을 제공합니다.
이번 글에서는 Docker 레지스트리에서 공식 Java 이미지를 pull 받는 방법, Java 애플리케이션을 실행하기 위한 Dockerfile 작성 방법, 그리고 docker build 및 docker run 명령어로 이미지를 빌드하고 애플리케이션을 컴파일·실행하는 전체 과정까지 알아보았습니다.