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

이번에는 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

필자는 라즈베리 파이4로 구현한 웹 서버가 있다.

라즈비안 os를 설치하고 그 위에 db, tomcat을 설치하여 실행하는 식으로 구성했었다.

 

파이 구성도

 

웹서버만 사용하는 것이 아닌, OpenMediaVault도 설치해보고 여러가지 많이 하게되다 보니,

점점 느려지기도 하고 한번 오류가 나면 다른 서비스를 전부 이용하지 못하게 되는 문제가 생겼다.

 

그러다가 얼마전 웹서버가 제대로 돌아가지 않고, 기존에 등록했던 ssl 인증서도 만료된다는 메일이 날아왔다.

그래서 여러가지 설정은 건드려보고, 프로그램도 지우던 도중에 돌이킬 수 없는 문제가 발생하는데,

OpenMediaVault를 지우자, 파이에서 재실행을 해도 터미널에 접속이 되질 않았다.

 

결국 직접 모니터를 연결해서 상태를 확인해보니

No Wireless interface Found라는 메시지가 뜨고, 와이파이 연결이 되질 않았다.

해당 문제는 OpenMediaVault에서 시스템의 설정을 건드리는데, 삭제하는 과정에서 이게 제대로 해결되지 않은 거라고 생각이 들었다. (stackoverflow)

 

어차피 지금도 문제가 있는 데, 이참에 한번 싹 갈아버리는게 나을거 같다는 생각이 들어서,

기존의 웹서버 파일, db, ssl 인증서만 백업한 채 완전히 포맷해버렸다.

 


 

1. 우분투 이미지 다운로드

 

우분투 홈페이지에 들어가보면 Download 탭에 Ubuntu for IoT 항목이 있는데, 여기에 라즈베리 파이 다운로드가 있다.

여길 눌러주자

 

이동을 하고 나면, 여러가지 버전이 있을 텐데, 나는 나중에 라즈베리 파이로 원격접속을 할 수 도 있다고 생각해서 Desktop 버전을 다운로드 하였다.

다운로드가 완료되면 아래처럼 img.xz 파일이 생기게 된다.

 

 

 

2. 이미지를 sd 카드에 옮기기 위한 PI Imager 설치

 

RasberryPi OS로 구글에 검색하면 홈페이지가 나오게되는데, 여기서 PI Imager를 다운로드 할 수 있다.

다운로드를 눌러서, 설치를 진행해주자

 

 

 

3. 이미지 굽기

 

설치된 Imager를 실행하면 다음과 같은 화면이 나오는데, 여기서 운영체제 OS 선택 -> 사용자 정의 사용을 눌러서 우리가 다운로드 한 Ubuntu img.xz 파일로 지정해주자.

이후 저장소 선택에서는 연결된 sd 카드로 경로를 지정해준 이후에 쓰기 작업을 진행하면 된다.

쓰기 작업시 기존에 데이터는 전부 지워질 수 있으니 만약을 대비해서 Win32DiskImager 등을 이용해서 백업을 진행해주는 걸 권장한다.

 

 

4. 라즈베리 파이에 설치

 

쓰기 작업이 완료된 이후에 sd 카드를 라즈베리 파이에 꼽고 설치를 진행하면 된다.

'Pi' 카테고리의 다른 글

[PI] Docker를 이용한 WebServer 구성  (0) 2022.08.15

+ Recent posts