1. 개요

이 사용방법(예제)에서는 Docker 컨테이너 내부에 Java WAR 파일을 배포하는 방법을 배웁니다 .

Java 커뮤니티에서 널리 사용되는 무료 오픈 소스 웹 서버인 Apache Tomcat 에 WAR 파일을 배포합니다 .

2. Tomcat에 WAR 파일 배포

WAR(Web Application Archive)은 모든 웹 애플리케이션 관련 파일과 해당 디렉토리 구조를 패키지하는 압축 아카이브 파일입니다.

간단하게 하기 위해 Tomcat에 WAR 파일을 배포하는 것은 해당 WAR 파일을 Tomcat 서버의 배포 디렉터리에 복사하는 것입니다. Linux의 배포 디렉터리는 $CATALINA_HOME/webapps 입니다 . $CATALINA_HOME은 Tomcat 서버의 설치 ​​디렉터리를 나타냅니다.

그런 다음 배포 디렉터리 내에서 WAR 파일을 추출하는 Tomcat 서버를 다시 시작 해야 합니다 .

3. Docker 컨테이너에 WAR 배포

Tomcat 서버에 배포해야 하는 애플리케이션 ROOT.war 에 대한 WAR 파일이 있다고 가정해 보겠습니다 .

목표를 달성하려면 먼저 Dockerfile을 만들어야 합니다. 이 Dockerfile에는 애플리케이션을 실행하는 데 필요한 모든 의존성이 포함됩니다.

또한 이 Dockerfile을 사용하여 Docker 이미지를 만든 다음 Docker 컨테이너를 시작하는 단계를 수행합니다.

이제 이러한 단계를 하나씩 자세히 살펴보겠습니다.

3.1. Dockerfile 만들기

Tomcat의 최신 Docker 이미지를 Dockerfile의 기본 이미지로 사용합니다 . 이 이미지를 사용할 때의 이점은 필요한 모든 의존성/패키지가 미리 설치되어 있다는 것입니다. 예를 들어 최신 Ubuntu/CentOS Docker 이미지를 사용하는 경우 Java, Tomcat 및 기타 필수 패키지를 수동으로 설치해야 합니다.

필요한 모든 패키지가 이미 설치되어 있으므로 WAR 파일인 ROOT.war 를 Tomcat 서버의 배포 디렉터리에 복사하기만 하면 됩니다. 그게 다야!

자세히 살펴보겠습니다.

$ ls
Dockerfile  ROOT.war
$ cat Dockerfile 
FROM tomcat

COPY ROOT.war /usr/local/tomcat/webapps/

$CATALINA_HOME/webapps는 Tomcat의 배포 디렉터리를 나타냅니다 . 여기에서Tomcat의 공식 Docker 이미지에 대한  CATALINA_HOME은 /usr/local/tomcat 입니다 . 결과적으로 완전한 배포 디렉토리는 /usr/local/tomcat/webapps 가 됩니다 .

여기서 사용한 애플리케이션은 매우 간단하며 다른 의존성이 필요하지 않습니다.

3.2. 도커 이미지 빌드

이제 방금 만든 Dockerfile을 사용하여 Docker 이미지를 만들어 보겠습니다.

$ pwd
/baeldung
$ ls
Dockerfile  ROOT.war
$ docker build -t myapp .
Sending build context to Docker daemon  19.97kB
Step 1/2 : FROM tomcat
 ---> 710ec5c56683
Step 2/2 : COPY ROOT.war /usr/local/tomcat/webapps/
 ---> Using cache
 ---> 8b132ab37a0e
Successfully built 8b132ab37a0e
Successfully tagged myapp:latest

docker build 명령은 myapp 태그가 있는 Docker 이미지를 생성합니다

Dockerfile이 있는 디렉터리 내에서 Docker 이미지를 빌드해야 합니다. 위의 예에서 우리는 Docker 이미지를 빌드할 때 /baeldung 디렉터리 안에 있습니다.

3.3. Docker 컨테이너 실행

지금까지 Dockerfile을 만들고 Docker 이미지를 빌드했습니다. 이제 Docker 컨테이너를 실행해 보겠습니다.

$ docker run -itd -p 8080:8080 --name my_application_container myapp
e90c61fdb4ac85b198903e4d744f7b0f3c18c9499ed6e2bbe2f39da0211d42c0
$ docker ps 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
e90c61fdb4ac        myapp               "catalina.sh run"   6 seconds ago       Up 5 seconds        0.0.0.0:8080->8080/tcp   my_application_container

이 명령은 Docker 이미지 myapp를 사용하여 이름이 my_application_container 인 Docker 컨테이너를 시작합니다 

Tomcat 서버의 기본 포트는 8080입니다. 따라서 Docker 컨테이너를 시작하는 동안 항상 컨테이너 포트 8080을 사용 가능한 호스트 포트와 바인딩해야 합니다. 여기에서는 단순화를 위해 호스트 포트 8080을 사용했습니다.

3.4. 설정 확인

이제 지금까지 수행한 모든 작업을 확인하겠습니다. 애플리케이션을 보기 위해 브라우저에서 URL http://<IP>:<PORT>에 액세스합니다 .

여기서 IP는 Docker 호스트 시스템의 공용 IP(또는 경우에 따라 개인 IP)를 나타냅니다. PORT Docker 컨테이너(이 경우 8080)를 실행하는 동안 노출한 컨테이너 포트입니다.

Linux에서 curl 유틸리티를 사용하여 설정을 확인할 수도 있습니다 .

$ curl http://localhost:8080
Hi from Baeldung!!!

위의 명령에서 우리는 Docker 호스트 시스템에서 명령을 실행하고 있습니다. 따라서 localhost를 사용하여 애플리케이션에 연결할 수 있습니다 . 이에 대한 응답으로 curl 유틸리티는 애플리케이션 웹 페이지의 원시 HTML을 인쇄합니다.

4. 결론

이 기사에서는 Docker 컨테이너에 Java WAR 파일을 배포하는 방법을 배웠습니다. 공식 Tomcat Docker 이미지를 사용하여 Dockerfile을 만드는 것부터 시작했습니다. 그런 다음 Docker 이미지를 빌드하고 애플리케이션 컨테이너를 실행했습니다.

마지막으로 애플리케이션 URL에 액세스하여 설정을 확인했습니다.

res – REST with Spring (eBook) (everywhere)