본문 바로가기

Java/Vert.x

도커(Docker) 환경에서 버텍스 앱을 컨테이너로 실행(Containerize)

더보기

도커(Docker)를 사용하면 경량화 및 독립된 도커 컨테이너(Container) 안에서 애플리케이션을 실행 할 수 있습니다.

이 문서에서는 도커를 사용해서 Vertx 애플리케이션을 도커 이미지(Image)로 빌드하고 컨테이너에서 실행하는 과정을 소개합니다.

Vertx 애플리케이션 작성

도커에서 실행하려는 간단한 Vertx 애플리케이션을 작성합니다.

이 애플리케이션은 8080 포트를 사용하는 HTTP 서버를 생성하고, HTTP 요청에 대해서 "Hello java world!" 텍스트를 응답합니다.

public class HelloVerticle extends AbstractVerticle 
{
	@Override
	public void start() throws Exception {
		vertx.createHttpServer().requestHandler(request -> {
			request.response().end("Hello java world!");
		}).listen(8080);
	}
}
코드 비고
Line 4 start() 버티클이 실행되면서 호출되는 메소드입니다.
Line 5:6 HTTP 서버 생성 Vertx 객체를 사용해 HTTP 서버를 생성합니다.
HTTP 요청이 들어오면 "Hello java world!" 텍스트를 응답합니다.
Line 7 listen(8080) HTTP 서버를 8080 포트에 대해서 Listen 상태로 만듭니다.

코드를 작성하고 프로젝트를 빌드하여 jar 파일을 생성합니다.

더보기

IntelliJ에서 Gradle 프로젝트로 생성하였다면 gradle | Tasks | build | build를 실행합니다.

빌드가 완료되면 프로젝트의 루트 디렉토리에서 build | libs에 jar 파일이 생성됩니다.

도커 파일 작성

도커 이미지를 빌드하려면 도커 파일(Dockerfile)이 필요합니다. 프로젝트 루트 디렉토리에서 Dockerfile을 생성합니다.

더보기

Dockerfile은 확장자를 갖지 않습니다. .txt와 같은 확장자가 포함되지 않도록 합니다.

Dockerfile에 다음 스크립트를 입력합니다.

FROM vertx/vertx3

ENV VERTICLE_NAME [실행 버티클 패키지 경로].HelloVerticle
ENV VERTICLE_FILE [jar 파일 경로]/[jar 파일 이름].jar
ENV VERTICLE_HOME /usr/verticles

EXPOSE 8080

COPY $VERTICLE_FILE $VERTICLE_HOME/

WORKDIR $VERTICLE_HOME
ENTRYPOINT ["sh", "-c"]
CMD ["exec vertx run $VERTICLE_NAME -cp $VERTICLE_HOME/*"]
코드 비고
Line 1 FROM vertx/vertx3 버텍스 애플리케이션을 확장하기 위해서 사용하는 기본 이미지입니다.
Line 3:5 ENV ENV는 스크립트에서 사용하는 변수입니다.
실행 버티클 패키지 경로는 프로젝트 내 패키지 경로입니다.
jar 파일 경로도커파일 기준의 상대 경로입니다.
Line 7 EXPOSE EXPOSE는 이미지에서 사용하는 포트를 의미합니다.
단순 주석에 해당하며 이 선언이 포트에 직접적인 영향을 미치지는 않습니다.
Line 9 COPY jar 파일을 컨테이너 내 VERTICLE_HOME 디렉토리로 복사합니다.
Line 11 WORKDIR 명령문 사용을 위해 VERTICLE_HOME 디렉토리로 이동합니다.
Line 12:13 ENTRYPOINT CMD 명령문 사용을 시작하며 실행되는 명령문은 CMD에서 입력합니다.

도커 이미지 생성

Dockerfile이 위치한 디렉토리에서 docker build를 실행합니다.

$ docker build -t [이미지 이름] .

빌드가 성공하면 docker images로 이미지 목록을 확인합니다.

$ docker images
REPOSITORY            TAG         IMAGE ID       CREATED          SIZE
example/vertx3        latest      970532dd00fc   11 seconds ago   593MB

도커 컨테이너 실행 및 테스트

이미지를 컨테이너로 실행하려면 docker run을 실행합니다.

$ docker run -it -p 8080:8080 [이미지 이름]
코드 비고
Line 1 -it 컨테이너를 대화형(Interactive)으로 실행합니다.
-p 8080:8080 포트 매핑을 위한 옵션입니다.
호스트의 포트 8080으로 들어오는 패킷은 컨테이너의 포트 8080으로 매핑됩니다.

웹 브라우저를 켜고 주소 창에 http://127.0.0.1:8080/를 입력합니다.

웹 브라우저가 버텍스 애플리케이션에 HTTP 요청을 보내고, 응답으로 "Hello java world!"를 표시합니다.

정리 및 복습

  • Vertx 애플리케이션을 도커 이미지로 빌드하고 컨테이너 실행합니다.
  • 기본 이미지는 vertx/vertx3 또는 vertx/vert4와 같이 배포하려는 애플리케이션의 버전과 일치하는 것을 사용합니다.
  • 애플리케이션에서 HTTP 서버 또는 TCP 서버와 같이 포트 사용이 필요한 경우 호스트와의 포트 매핑이 필요합니다.