도커(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);
}
}
코드 | 비고 | |
Vertx 객체를 사용해 HTTP 요청이 들어오면 "Hello java world!" 텍스트를 응답합니다. |
||
HTTP 서버를 |
코드를 작성하고 프로젝트를 빌드하여 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/*"]
코드 | 비고 | |
버텍스 애플리케이션을 확장하기 위해서 사용하는 |
||
단순 주석에 해당하며 이 선언이 포트에 직접적인 영향을 미치지는 않습니다. |
||
명령문 사용을 위해 |
||
명령문 사용을 시작하며 실행되는 명령문은 |
도커 이미지 생성
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 [이미지 이름]
코드 | 비고 | |
컨테이너를 |
||
호스트의 포트 8080으로 들어오는 패킷은 컨테이너의 포트 8080으로 매핑됩니다. |
웹 브라우저를 켜고 주소 창에 http://127.0.0.1:8080/를 입력합니다.
웹 브라우저가 버텍스 애플리케이션에 HTTP 요청을 보내고, 응답으로 "Hello java world!"를 표시합니다.
정리 및 복습
- Vertx 애플리케이션을 도커 이미지로 빌드하고 컨테이너 실행합니다.
- 기본 이미지는
vertx/vertx3또는vertx/vert4와 같이 배포하려는 애플리케이션의 버전과 일치하는 것을 사용합니다. - 애플리케이션에서 HTTP 서버 또는 TCP 서버와 같이 포트 사용이 필요한 경우 호스트와의
포트 매핑이 필요합니다.
'Java > Vert.x' 카테고리의 다른 글
버텍스 코어: HTTP 서버와 HTTP 요청 처리 (0) | 2022.04.17 |
---|---|
버텍스 코어: TCP 서버 동시성 확장을 위한 배포 방법 (0) | 2022.03.14 |
버텍스 코어: TCP 클라이언트 (0) | 2022.03.12 |
버텍스 코어: TCP 서버 (0) | 2022.03.07 |
버텍스 코어: 버퍼(Buffers) (0) | 2022.03.07 |