Docker에서 nginx + tomcat 연동시키기

2tsumo·2022년 6월 2일
1

docker

목록 보기
4/4

docker 설치 부터 하고 싶다면 이전글을 참고해주세요

docker 설치 + nginx 설치
https://velog.io/@sherlockid8/centos7%EC%97%90-Docker%EC%84%A4%EC%B9%98-%ED%9B%84-nginx-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0

tomcat설치
https://velog.io/@sherlockid8/Docker%EC%97%90-Tomcat-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88-%EC%8B%A4%ED%96%89-%EB%A1%9C%EC%BB%AC-%ED%8C%8C%EC%9D%BC-%EB%B3%B5%EC%82%AC%ED%95%B4%EC%84%9C-%EC%8B%A4%ED%96%89%EC%8B%9C%ED%82%A4%EA%B8%B0

Docker설치 -> nginx설치 -> tomcat설치 후의 작업입니다!

centos7에서 nginx와 tomcat 연동 작업을 해본적이 있는데 거의 비슷합니다.

제 방법이 100프로 정답은 아니지만 제가 한 경험을 기록해보자 합니다.

1.nginx.conf 수정

docker ps로 확인해보면 저는 nginx라는 이름으로 nginx가 올라가 있습니다 실행 시켜주세여

docker exec -it nginx /bin/bash

etc/nginx로 가시면 nginx.conf파일이 있습니다

저는 이 파일을 로컬로 가지고 와서 수정한뒤 다시 docker로 올려줄 것 입니다.

exit하시고

docker cp nginx:/etc/nginx/nginx.conf /home/nginx.conf  

해서 저는 home밑으로 파일을 가져 왔습니다.
가져온 파일은

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

이렇게 생겼을 것 입니다.
include /etc/nginx/conf.d/*.conf; 이부분 때문에
conf.d아래에 conf파일이 실행되는데 확인해보시면 거기엔 default.conf 파일이 있습니다. 그 곳에서 server을 정의하고 있는데 그 파일을 두고 여기서 바로 서버를 세팅해줄 것 입니다. 따라서 아래와 같이 수정해주세요

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;
	#include /etc/nginx/conf.d/*.conf; 이 아래로는 새로 작성한 부분입니다
    upstream tomcat {
        server 컨테이너ip:8080;
        server 컨테이너ip:8080;
    }
    server {
      listen       80;
      listen  [::]:80;
      server_name  localhost;
            location / {
               root   /usr/share/nginx/html;
               index  index.html index.htm;
               proxy_pass http://tomcat;

			 }
    }
}

저는 upstream으로 서버 2개를 정의해 주었는데 하나는 main서버고 하나는 backup서버입니다. proxy_pass http://tomcat 이 부분이 upstream tomcat과 같아야합니다. upstream tomcat1로 하였다면 proxy_pass http://tomcat1로 해주어야합니다.

그리고 컨테이너 ip는 아래 명령어로 확인이 가능합니다.

docker inspect 컨테이너명 | grep IPAddress

포트는 기본포트인 8080으로 해주셔야합니다.

2. 수정한 파일을 다시 docker로

수정이 완료 되었으면 수정한 파일을 다시 docker로 옮겨줍니다.

docker cp /home/nginx.conf nginx:/etc/nginx/nginx.conf

그리고 docker restart nginx을 하면 끝입니다!

서버ip:서버nginx포트 치면 아래와같이 tomcat이 연동되어 톰캣화면이 나오는걸 확인하실 수 있습니다

만약 오류가 난다면


docker logs -f --tail 100 nginx

로그를 확인해보기!

헤맨 부분은 tomcat과 연동할때 ip 부분인데 컨테이너끼리 연동이기때문에 해당 컨테이너의 ip를 정확히 입력해주어야 합니다... 그리고 nginx도 서버에서 설정한 포트와 컨테이너에서는 다르다는 것을 알아야한다.!

나의 경우엔 서버 80 포트가 사용중이라서 8089로 nginx를 올렸고 톰캣은 8888과 8080으로 올렸는데 내 서버포트와 상관없이 conf파일은 컨테이너 내에서 돌아가는 실행환경이란걸.. 생각이 짧은 바보(나)는,, 빠르게 알지 못했고,, 나와같은 사람이 더 있길 ㅎ 바란다..ㅎㅎ

profile
👨‍💻

0개의 댓글