지난번에는 도커로 MySQL 컨테이너와 워드프레스를 연동해서 워드프레스 기본 사이트를 올려보는 과정을 보여주었다.
오늘 부터는 우선 도커 명령으로 WEB-WAS-DB를 연동하고 이후 포스팅에서 똑같은 과정을 docker-compose로 하는 과정을 보여주겠다.
여기서 필자가 중간에 한 실수들 까지 알려주겠다.
실습 환경 및 버전 정보
로컬 컴퓨터 OS : Window11
WSL : Ubuntu
WEB : NginX 컨테이너 최신 버전 1.25.3
WAS : Tomcat 컨테이너 최신버전 10.1.17
NginX 최신 버전 컨테이너 생성
docker run -d -p 80:80 --name nginx000ex01 nginx
Tocmat 최신 버전 컨테이너 생성
docker run -d -p 8080:8080 --name tomcat000ex01 tomcat
이렇게 NginX와 Tomcat 두 미들웨어의 컨테이너를 생성해 주었다. 그럼 이제 NginX와 Tomcat 컨테이너 두개를 연동해야 한다.
도커말고 VM이나 AWS 퍼블릭 클라우드의 EC2 등의 환경에서 NginX와 Tomcat을 연동해봤으면 알겠지만, NginX의 설정파일(nginx.conf)를 수정해서 proxy_pass를 추가해주어야 한다.
그렇게 하기 위해선, 두 컨테이너의 CLI 환경에 접속해서 설정 파일을 수정해줄 필요가 있다.
컨테이너에 리눅스 명령어를 입력하려면 shell이 있어야 하고, 대부분 컨테이너에는 bash가 설치되어있다.
그래서 이 bash를 실행하여 명령어를 입력할 수 있는 상태로 들어가야 한다.
이런 상황에서는 docker exec 커맨드를 꼭 기억해 두어야한다.
도커 컨테이너의 CLI 환경에 접속하는 방법
docker exec (옵션) 컨테이너 이름 /bin/bash
NginX 컨테이너의 CLI에 접속
docker exec -it nginx000ex01 /bin/bash

컨테이너의 CLI 환경에 접속했다. 이제 vi 에디터로 nginx.conf를 수정해주자. nginx.conf는 /etc/nginx 디렉토리에 있다.
그 전에, 우리는 vi 에디터를 설치해주어야 한다. 도커 컨테이너는 리눅스 기반이지만, 완전히 리눅스는 아니다.
vi에디터가 VM등의 환경에 기본으로 설치되어있는 것이 아니다. 그래서 apt나 yum, 등의 명령으로 설치해주어야한다.
apt-get update
apt-get install -y vim

여기서 잠깐, 필자의 환경에서는 왜 apt를 쓸까? 필자가 사용하는 WSL이 우분투이기 때문이다.

윈도우에서 도커를 설치해서 사용하려면 리눅스 운영체제가 깔려있어야 한다. 도커를 사용하는 컴퓨터에 어떻게든 리눅스 환경이 설치되어있어야 하고 그 위에서 도커로 컨테이너를 생성하고 관리할 수 있는 것이다.

필자의 윈도우에서는 WSL을 우분투로 설치했기 때문에 도커 컨테이너는 apt를 쓰는 것이다.
여튼 apt로 vi 에디터를 설치했으니 nginx.conf 파일을 수정하자
vi /etc/nginx/nginx.conf
nginx.conf에 추가할 내용
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://<톰캣 컨테이너의 이름!!>:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
그리고 브라우저에 localhost를 입력했다.
그런데, 이렇게 연동이 안 되고 오류가 일어났다.

여기서 필자의 실수를 눈치 챈 사람들 있는가?
바로 도커 네트워크를 생성을 안 해줬다는 것이다. 도커 네트워크가 생성이 되고 두 컨테이너가 그 네트워크에 속해 있어야 두 컨테이너가 통신을 할 수 있는데 필자가 그것을 빼먹은것이다.
도커 네트워크를 생성했다
Docker Network 생성
docker network create
docker network create network01
그리고 이 네트워크에 docker 컨테이너 두 개를 연해주자.
docker network connect network01 nginx000ex01
docker network connect network01 tomcat000ex01
그리고 다시 localhost로 들어가서 브라우저 테스트를 해 보았다.

화면을 잘 보자. 404오류가 뜨는데, 밑에 보면 톰캣에 연결은 잘 되었다. 엔진엑스-톰캣 연결은 되어있는데 뭐가 문제일까?
톰캣에는 DocumentRoot라는것이 있다.
https://jdm.kr/blog/93#google_vignette
톰캣의 DocumentRoot는 server.xml이라는 파일에 정의되어있다.
톰캣 컨테이너에 접속해서 server.xml파일을 한 번 보자
docker exec -it tomcat000ex01 /bin/bash
root@accaef06ba50:/usr/local/tomcat# vi conf/server.xml
위Tomcat은 기본적으로 weㅠapps가 DocumentROOT다.

위의 화면을 보면 appBase에 “webapps”라고 정의되어있다.
그래서 필자는 webapps라는 디렉토리로 가 봤다
cd /usr/local/tomcat/webapps
ls -a
여기에 들어가 봤더니 아니나 다를까 아무것도 없었다. DocumentROOT로 정의된 디렉토리에 아무것도 없었던 것이다.
그래서 필자는 index.jsp 파일이 어디있는지 찾아보았다.
root@accaef06ba50:/usr/local/tomcat/webapps# find / -name index.jsp
/usr/local/tomcat/webapps.dist/host-manager/index.jsp
/usr/local/tomcat/webapps.dist/examples/jsp/security/protected/index.jsp
/usr/local/tomcat/webapps.dist/examples/jsp/async/index.jsp
/usr/local/tomcat/webapps.dist/ROOT/index.jsp
/usr/local/tomcat/webapps.dist/manager/index.jsp
webapps.dist라는 엉뚱한 디렉토리에 있는 것을 발견했다.
그래서 필자는 우선 /usr/local/tomcat/webapps 디렉토리 및에 ROOT라는 디렉토리를 만들고, index.jsp파일을 포함 /usr/local/tomcat/webapps.dist/ROOT 디렉토리에 있는 모든 파일들을 /usr/local/tomcat/webapps/ROOT라는 파일에 옮겨주었다.
cp -r /usr/local/tomcat/webapps.dist/ROOT/* /usr/local/tomcat/webapps/ROOT/
그리고 다시 도커 컨테이너를 2개를 stop/start 실행해 주었더니 이제서야 톰캣의 화면까지 띄워냈다.

그럼 다음 시간에 MariaDB 까지 연동해서 보여주겠다.