이전의 글에서 파이에 우분투를 설치하는 걸 진행했다.

이번에는 Docker를 이용해서 기존의 Tomcat을 운영해보려고 한다.

기존 Pi에서의 환경
구성할 Docker 환경

기존에는 Tomcat 9을 그대로 이용한 웹 서버였지만, 이제는 Docker를 이용해서 간편하게 컨테이너화 시키고자 한다.

컨테이너화의 장점으로는 형상관리의 편리함 뿐만 아니라 문제 발생시 빠른 대처가 가능하다. 또한 개별 컨테이너로 분리가 되어있기에, 다른 서비스까지 영향을 주지 않는다는 부분이다.

 

또한 여기서 Nginx가 추가되었는데, 이건 Reverse Proxy와 Multi Domain을 이용한 서비스 분리를 위한 부분이다.

전체적인 웹 구성을 아래의 그림과 동일하다.

출처 : ibmimedia


1. Docker Network 생성

 

docker create network 명령어로 새로운 브릿지를 만든다.

이후 컨테이너는 이 네트워크 브릿지를 사용해서 서로간의 통신하게 될 것이다.

docker create network -d web-network

 

 

2. Nginx Container 생성

--net으로 앞에서 만든 web-network 브릿지에 연결하고, 이후 컨테이너간의 dns 요청을 위한 --net-alias도 지정해준다.

-p 옵션으로 80번과 443번을 호스트(pi)와 연결해준다.

이후 pi ip의 모든 http 요청은 이 nginx 컨테이너가 담당하게 될 것이다.

-v 옵션은 호스트와 컨테이너간의 공유영역으로, /home/pi/docker/nginx/html 폴더의 내용물은 컨테이너가 /usr/share/nginx/html에서 접근가능하다.

docker run -d --name nginx \
-p 80:80 -p 443:443 \
--net web-network \
--net-alias nginx \
-v /home/pi/docker/nginx/html:/usr/share/nginx/html \
nginx

 

 

3. MariaDB Container 생성

 

포트 옵션은 하지 않아도 되지만, 외부와 연결하게 될 일이 있을 수도 있을거 같아서 미리 열어둔다.

docker run -d --name db \
-t 13306:3306 \
--net web-network \
--net-alias web-db \
mariadb

 

 

4. Tomcat Container 생성

 

여기서 포트 옵션은 하지 않아도 되지만, 디버깅을 목적으로 열어두었다.

container의 이미지가 ubuntu로 되어있는데,

이건 필자가 tomcat 이미지로 계속 시도를 해봤지만, 제대로 실행되지를 않아서 그냥 ubuntu로 이미지를 변경했다.

docker run -d --name tomcat \
-p 8080:8080 \
--net web-network \
--net-alias tomcat \
ubuntu

 

5. 컨테이너 간 연결 확인

 

docker exec -it tomcat bash

tomcat 컨테이너를 터미널과 연결한 후에 telnet으로 연결을 테스트 해본다.

기본적으로 깔려있지 않을테니 apt update && apt install telnet으로 명령어를 넣어주어야 한다.

 

telnet db 3306

성공 케이스

아래처럼 접속되었다는 말이 뜨면 잘 진행된 것이다.

만약 아래와 같이 결과가 나온다면, 브릿지 설정은 제대로 되었는지, 별칭 지정이 다르진 않은지 체크해보길 바란다.

실패 케이스

 

 

6. WAS 설정

 

tomcat에서는 db를 연결하도록 설정파일을 변경해주고, nginx에서는 리버스 프록시와 ssl 설정을 변경해준다.

리버스 프록시와 ssl 설정에 대한 자세한 내용은 추후에 글을 올릴 생각이다.

 

 

7. 실제 테스트

 

 

https://mon0mon.duckdns.org/ 으로 접속 했을 때는 Nginx의 기본 html이 뜬다.

 

https://lovedata.duckdns.org/ 으로 접속 했을 때는 tomcat의 웹화면이 뜨는 걸 확인할 수 있다.

 


위와 같이 구성한 이유는 매번 웹 사이트를 개발할 때마다 다른 ip의 서버를 새롭게 구성해야하는데,

매번 그렇게 할 수 없을 뿐더러, 관리가 쉽지가 않을 거 같아서 고민하다 이 방안을 생각하게 되었다.

 

사용자가 느끼기에는 개별의 서비스이지만, 운영하는 입장에서는 실질적으로 단일 환경인 셈이다.

더군다나 다른 서비스에 영향을 미치지 않는다는 점에서 더욱 마음에 든다.

이전에는 웹서버가 아닌 다른 것들 때문에 모든 서비스가 먹통이 되었던 것때문에 제법 고생한 적이 있었는데, 

이제는 그럴 일이 없을 것이다.

 

글 작성으로 봤을 때는 엄청 단순해 보이지만, 막상 해보니까 만만치 않았다.

도커 자체의 어려움보다는 tomcat을 실행하고, 이후에 제대로 작동하지 않는 것 때문에 3일 정도를 계속 허비했다.

 

그래도 막상 만들고 나니 뿌듯하기도 하고, 도커를 배우고 있는 입장에서 책을 읽고 예제만 따라하는 것보다

조금더 잘 이해하게된 거 같다.

 


P.S. 

위의 그림을 정정하기위해 내용을 추가

OMV는 구동에 실제 물리적 환경이 필요하므로, docker에서는 구동이 안된다고 함...

따라서 OMV를 구동하고 싶다면, OMV image를 이용해서 설치를 하거나 패키지 형태로 설치하는 것을 권장함

 

OMV포럼

'Pi' 카테고리의 다른 글

[PI] 라즈베리 파이 4 Ubuntu 설치  (0) 2022.08.15

+ Recent posts