[Docker] Tomcat container & Volume

hugingstar·2026년 2월 10일

Docker

목록 보기
15/19
post-thumbnail

Apache tomcat은 자바 기반의 웹 애플리케이션을 실행하기 위한 오픈소스 웹 애플리케이션 서버(WAS, Web Application Server)이다.

필요없는 컨테이너들은 지우고 시작한다.

docker container stop $(docker ps -q)
docker container rm $(docker ps -aq)

# 설치
docker pull tomcat

톰캣은 단순히 파일을 전달하는 웹 서버(Web Server)와 달리, 동적인 처리를 담당합니다

서블릿 컨테이너(Servlet Container): 사용자의 요청을 받아 자바 서블릿을 실행하고, 그 결과를 웹 브라우저로 전달합니다.

동적 페이지 생성: 데이터베이스와 통신하거나 복잡한 비즈니스 로직을 처리하여 실시간으로 변하는 HTML 페이지를 만들어냅니다.

HTTP 웹 서버 기능 포함: 자체적으로 정적 파일(HTML, CSS 등)을 처리하는 기능도 갖추고 있어 별도의 웹 서버 없이도 구동이 가능합니다.

# tomcat 컨테이너 실행
docker container run --name tc -itd tomcat:latest

# nginx 컨테이너 실행
docker container run --name ng -itd -p 80:80 nginx:latest
  • 앞에는 host:container 형식인데 tomcat은 8080/tcp라고 써져있다. tomcat은 8080/tcp은 컨테이너의 포트이다. tomcat은 일반적으로는 외부접속이 불가능하다.
  • 외부접속만 안되고, 다른 컨테이너에서는 접속이 된다.

  • 호스트 PC에서는 연결이 거부된것이 보인다.

# network 조회
docker network inspect

#tomcat
172.0.0.2

  • 외부에서 접근하면 안되는 경우에는 내부 포트만 남겨놓고 안쪽에서만 잘 연결되게 한다.
  • nginx 컨테이너 쪽에서 접속해본다.
# exec
docker container exec -it ng /bin/bash

  • 이제 이 컨테이너에 파일을 올려줘야 하는데, 도커 안에 있는 저장소를 사용하면 편리하다.
  • docker 명령어 중에 volume이 있다.
docker volume ls

  • 컨테이너 생성하면서 볼륨 생성
# 볼륨 생성
docker container run --name web_01 -d -p 80:80 -v v_01:/v_01  nginx:latest

# exec로 접속
docker container exec -it web_01 /bin/bash

# 볼륨 확인
cd /v_01

# 파일 생성
touch 1.txt

# 컨테이너에서 나온다.
exit

# Volume 정보
docker volume inspect v_01

#호스트에서 MountPoint 확인
[
    {
        "CreatedAt": "2026-02-10T14:16:04+09:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/v_01/_data",
        "Name": "v_01",
        "Options": null,
        "Scope": "local"
    }
]

  • 마운트 포인트는 Ubuntu로 만든 호스트의 경로이다. 경로 안으로 들어가보면, 1.txt가 만들어졌다.

  • volume을 공유하기 때문에 한 군데에 모두 모아둘 수 있다.
# 새로운 컨테이너 생성해서 접속 확인
docker container run --name web_02 -d -p 8080:80 -v v_01:/v_01 nginx:latest

docker container exec -it web_02 /bin/bash

# 파일 확인
ls /v_01/

Docker volume test 2

  • v_02 볼륨을 생성한다.
# Volume
docker volume create v_02

docker volume ls

# 테스트할 파일 생성
echo "Volume test" > /var/lib/docker/volumes/v_02/_data/2.txt

# 볼륨 설정해서 컨테이너 생성
docker container run --name web_03 -d -p 8081:80 -v v_02:/v_02

# 설정
docker container exec -it web_03 /bin/bash

# 파일 내용 확인
cat /v_02/2.txt

-최상위 아래 mountpoint 폴더 생성하고, /root/mountpoint를 볼륨으로 사용할 수 있게 만들기
-v_04까지 갔으면 다시 나와서 volume ls를 확인해보면, v_04s는 별도로 경로를 만들었기 때문에 docker volume ls에는 등록되지 않았다.

# 마운트할 폴더 생성
 mkdir mountpoint
 
# 테스트할 파일 하나 생성 
echo "Hi" > mountpoint/3.txt

# 컨테이너 run
docker container run --name web_04 -d -v /root/mountpoint:/v_04 nginx:latest

# 확인
ls

# cat 확인
cat /v_04/3.txt

#나와서 볼륨 리스트 확인
Ctrl + p + q
docker volume ls

Docker volume test 3

  • Dockerfile을 하나 volume_test로 만든다.
FROM ubuntu:latest

RUN apt update && apt install -y -q nginx

VOLUME ["/vol"]

COPY index.html /val/www/html

CMD ["nginx", "-g", "daemon off;"]

# 도커 이미지를 빌드(경로 설정을 잘보고 -f 옵션은 Dockerfile이 아닌 이름을 사용할 경우)
docker image build -t v_test:1.0 -f docker/volume_test docker/

# 80번 포트
docker container run --name web_01 -d -p 80:80 v_test:1.0

# 로컬호스트
curl localhost

# exec
docker container exec -it web_01 /bin/bash

# 볼륨설정
docker volume ls

# web_01에 연결된 것 확인 "Mount"의 "Source" 부분으로 들어가야한다.
docker container inspect web_01

# 접속하여 /bin/bash 실행
docker container exec -it web_01 /bin/bash

#안으로 들어가서 확인
ls /vol/

0개의 댓글