Synology NAS에서 Docker 이용하여 Tomcat(톰캣) 구동하기

Synology NAS의 패키지 중 Tomcat(톰캣)이 존재합니다. 패키지로 톰캣을 설치하게 되면 나스의 OS 환경에 직접 설치가 됩니다.

Docker를 이용하게 되면 가상 환경에 설치가 되고, 각종 환경을 원하는대로 설정한 후 파일로 내보낸 후 다른 시스템에서 불러오면 미리 설정된 그 환경 그대로 구동할 수 있습니다.

새로운 시스템에서 따로 프로그램 설치나 각종 설정을 해줄 필요가 없는 것이죠..

 

설치과정

 

1. 패키지 센터에서 Docker 설치

먼저 아래 사이트에 접속하여 자신의 나스가 Docker를 지원하는지 확인하기 바랍니다.

https://www.synology.com/ko-kr/dsm/app_packages/Docker

현재 지원 모델 리스트


패키지 Docker 설치

  

2. Docker 실행 후 톰캣 설치

  • Docker – 레지스트리 – “tomcat” 검색 후 “tomcat” 다운로드
  • Docker – 이미지 – tomcat 선택 – 실행 – 마법사로 실행

Docker에서 톰캣 설정

1단계에서

컨테이너 이름에 원하는 이름(여기서는 tomcat) 넣고..

로컬 포트에는 실제 접속 시 사용할 포트(여기서는 8081)를, 컨테이너 포트에는 8080, 유형은 TCP로 설정

2단계는 그냥 기본값으로 설정

 

 3. 톰캣 실행

톰캣 실행

빨간색 부분의 스위치 버튼을 클릭하여 실행 후 아래 사이트 접속하여 동작 확인

http://나스IP:8081/

아래와 같은 화면이 표시되면 제대로 동작되는 것입니다.

톰캣 기본 페이지

 

4. 톰캣 환경 설정 및 프로그램 설치

telnet 또는 ssh로 나스의  쉘에 접속한 후 아래 명령 실행(tomcat 대신에 2단계에서 설정한 컨테이너 이름으로 설정)

위 명령을 내리면 tomcat 컨테이너의 쉘에 접속됩니다. 이제 필요한 프로그램 설치나 개발한 프로그램을 이곳에 배포하면 됩니다.
테스트로 sampler.war를 배포해봅니다. tomcat 컨테이너의 쉘에서 아래 명령을 내려서 sample.war를 배포합니다.

wget은 원격지의 웹서버에 있는 파일을 다운로드하는 것인데요.. 만약 나스에 war 파일을 올려두고 컨테이너에 넣고 싶다면 아래와 같은 방법이있습니다.

-나스의 웹루트 폴더에 올려두고 wget 명령으로 다운로드

-컨테이너에서 ftp, ssh 등의 명령으로 나스에 접근하여 다운로드

-나스의 특정 폴더를 컨테이너에 연결

 위 방법 중 마지막 방법을 소개합니다.

[Doker-비디오 형식 – 컨테이너 중지 후 선택 – 편집 – 볼륨 – 폴더 추가]에서 파일/폴더는 나스의 공유 폴더를 선택하고, 마운트 경로에는 컨테이너에서 사용할 폴더명을 입력합니다.

위와 같이 설정하면 컨테이너의 /data로 접근하면 나스의 특정 공유 폴더의 내용이 보입니다.

위에서 설명한 wget 명령대신 아래와 같이 cp 명령으로 복사하면 됩니다.

 

http://나스IP:8081/sample 로 접속해서 아래와 같은 화면이 표시되면 제대로 동작되는 것입니다.

sample 페이지

쉘에서 apt-get update,apt-get upgrade 명령을 내려 모든 프로그램을 업데이트 합니다.

 

5. 내보내기

 이제 설정이 완료된 컨테이너를 파일로 내보냅니다. 다른 시스템에서 그대로 이용하기 위함이죠.

[비디오 형식 – 설정 – 내보내기] 클릭

 

내보내기

 

[컨테이너 콘텐츠 및 설정 내보내기]를 선택

 

내보내기 설정

 

진행 상태 확인

export3

완료되기까지 약 5분 정도 걸리는 것 같습니다.

 

파일스테이션에서 확인해보니 tomcat.syno.txz라는 117.9MB 파일이 하나 생성되었습니다.

 컨테이너 export

해당 파일은 단순히 시스템 폴더 전체를 tar로 두 번 묶고 압축한 파일인 것 같습니다.  압축해제를 몇 차례하니 시스템 폴더 전체 구조가 나오네요.

이제 만들어진 파일(tomcat.syno.txz)을 다른 시스템으로 전송합니다.

 

6. 불러오기

다른 시스템에서 위 과정에서 생성한 컨테이너 파일(tomcat.syno.txz)을 불러와 봅니다.

 

  • 다른 나스에서 불러오기

[이미지 – 추가 – 파일에서 추가]

 컨테이너 불러오기

 추가하는데 시간이 좀 걸립니다. 한 2~3분 정도 걸린 것 같습니다.

아래와 같이 이미지에 추가한 놈이 들어와 있습니다.

 이미지

 

비디오 형식에도 표시됩니다. 선택 후 실행하고..

 비디오 형식

 

샘플 사이트에 접속해보니 제대로 표시됩니다.

import4  

 

  • 일반 리눅스 시스템에서 불러오기

먼저 docker를 설치하고 실행합니다.

 

5번 과정에서 내보내기한 이미지 파일(tomcat.syno.txz)을 가져온 후 아래 명령으로 풀고, 임포트합니다. (내보내기한 *.txz는 시놀로지 나스 전용 파일이라서 임포트해봐야 제대로 구동이 안됨)

docker에 이미지가 제대로 등록되었습니다.

이제 아래 명령으로 실행합니다.

웹브라우저로 http://서버아이피:8081/sample로 접속해서 샘플 사이트가 표시되면 완료된 것입니다.

 

이미지 삭제는 아래 명령으로..

 

 일반적인 자바, 톰캣 설치, 각종 설정 과정이 전혀없이 docker만 설치하고 미리 만들어진 이미지만 가져와서 구동해주면 끝입니다.

 

* 이미지는 클릭하여 크게 볼 수 있습니다.
* 이 팁에서 생성한 이미지 파일: http://fft.kr/tmp/tomcat.syno.txz

41 thoughts to “Synology NAS에서 Docker 이용하여 Tomcat(톰캣) 구동하기”

  1. 강좌 감사합니다~
    Docker를 설치 후에 레지스트리에서 검색후 다운 받으면 바로 사라져버립니다
    어디 등록 되있는것도 아니고 아예 없어져버려서 난감합니다;;
    혹시 이런 증상은 없으신지요?
    링크해주신 파일로 비디오형식에서 불러오면 잘 됩니다
    1515+ 사용중입니다

    1. 저도 막 테스트 해보니 다운로드 되다 갑자기 사라져 버립니다.
      얼마전에 Docker가 업데이트 되었는데요..
      업데이트 후 문제가 발생한 듯합니다.
      해결방법 찾으면 댓글로 남겨두겠습니다.

    2. Docker 패키지의 이미지 다운로드 기능에 문제가 있는 듯합니다. 쉘에 접속하여 수동으로 다운로드하니 이미지 리스트에 나옵니다.

      임시 방편으로 레지스트리에서 특정 단어로 검색해서 나온 결과 이름을 이용하여 텔넷 또는 SSH로 쉘에 접속한 후 아래처럼 명령을 내리면 됩니다.
      docker pull million12/varnish

      1. 정말 감사합니다~ 덕분에 해결되었습니다~ 명령어로 받으니 이미지 리스트에도 잘 올라오고 실행도 잘 되네요~ 이제 우분투랑 airvideo를 노려봐야겠어요~ 감사합니다~

  2. 시놀로지나스716+사용중입니다.

    마리아디비10버전을 사용해보려고
    도커를 설치하고
    마리아디비 최신 이미지를 받고
    컨테이너를 생성했는데
    컨테이너가 켜지지않습니다.

    마리아디비 도커세팅방법 알수있을까요?

    1. 안녕하세요.
      기본 상태로 그냥 실행하면 에러가 발생합니다.
      아래의 환경 변수를 하나 추가해야 됩니다.
      MYSQL_ROOT_PASSWORD
      [비디오 형식 – 마리아디비 선택 – 환경 – 환경 변수]에서 추가하면 됩니다.
      값에는 root 사용자가 사용할 암호를 입력하면 됩니다^^

  3. docker에 이미지로 받은 tomcat은 filestation이나 이런곳에 보여질 수 있도록 할 수 없는지요?  JSP 파일을 일일이 쉘에서 다 처리 할려니 어려운 점이 많네요.

    1. jsp 소스 파일을 업로드하거나 수정하려고 하는거죠?
      컨테이너에서 DSM의 공유폴더를 사용하도록 서로 연결 설정하면 됩니다.

      Docker – 비디오 형식(컨테이너) – 해상 컨테이너 선택 후 – 편집 – 볼륨 – 폴더 추가 – 특정 공유 폴더 선택 – 마운트 경로에 컨테이너에서 사용되는 톰켓의 소스 폴더를 입력해주면 됩니다.

      이렇게 설정하면 공유폴더에 파일을 올리면, 컨테이너에서 그 파일을 그대로 사용하게 됩니다.

  4. 위에 작성해주신 답변은 매우 감사드립니다.제가 아직 리눅스 쪽은 전혀 문외한이라 추가적인 질문을 조금 드리고자 합니다. 현재 Window 서버를 통해 구동되는 Tomcat을 Synology로 옴겨서 관리할려고 합니다.Tomcat의 주 용도는 Oracle DB와의 연결 및 SQL 처리를 위한 통신입니다.현재 Docker를 통해서 받은 톰켓은 Jsp 파일을 통해서 JDBC로 컨넥션하는데 에러가 발생하네요.. 해당 내용을 조금 보니 Tomcat 모듈 자체에 컨넥션하기 위한 모듈 자체가 포함되지 않은것 같습니다…한 2틀째 머리 싸매고 있는데…. 좋은 방법이나 고견 좀 부탁드리겠습니다. 

    1. 현재 환경을 정확히 알 수 없어서 정확한 답변을 드릴 수 없지만…
      오라클 연결을 위한 JDBC 드라이버 파일이 없는 듯합니다.

      JDBC 드라이버는 톰캣의 lib 폴더에 넣는 방식과 소스의 WEB-INF/lib/에 넣는 방식이 있습니다.
      일반적으로 많이 사용하는 방식은 소스의 WEB-INF/lib/에 넣는 방식입니다.

      아마 기존(Windows 환경)에 톰캣의 lib 폴더에 JDBC 드라이버를 넣어두셨는데..
      현재 구성한 Docker 기반에는 톰캣의 lib 폴더에 JDBC 드라이버가 없어서 발생하는 문제가 아닌가 싶습니다.

      소스의 WEB-INF/lib/에 JDBC 드라이버 파일을 구해서 넣어보세요.

      톰캣의 에러 로그를 올려주시면 무엇이 문제인지 정확히 알 수 있습니다.

  5. /usr/local/tomcat/webapps/ROOT/WEB-INF/lib 를 마운트한후,폴더에 classe12.jar을 넣어 두었습니다.그리고 tomcat에서 서버와의 연결을 수행하는 jsp 파일을 만들고 웹에시 실행하면..

     라고 에러가 발생합니다. 아마도 올바르게 JDBC 드라이버가 설치 되지 않아서 나타나는 현상인것 같습니다.에러가 나는 소스를 윈도우상의 Tomcat 폴더에 넣고 실행하면 정상적으로 잘 실행이 됩니다. 리눅스가 참 어렵네요… 웹을 수천번 뒤져봐도 내가 원하는 답변이 없고….혹여라도 해당건 관련해서 잘알고 계신다면 원격으로라도 한번 지원 부탁드릴수 있을까요?    

    1. classe12.jar는 JDK 1.2, JDK 1.3에서 사용되는 파일인데요..
      1.3 이후는 ojdbc로 시작하는 드라이버 파일을 사용합니다.
      Docker로 설치한 컨테이너의 JDK 버전이 어떻게 되나요?
      보통 아래 명령 내리면 나옵니다.

  6. java version “1.7.0_65″말씀하신대로 추가적으로 ojdbc7.jar 을 새로 받아서 수행해봤지만 결과는 동일하게 나오네요.. 

    1. 윈도우 환경에서 이클립스에서 구동하여 정상적으로 돌아가도록 해두신 후 WAR로 내보내기 한 다음..
      Docker에서 그 war를 불러와서 구동해보세요..
      윈도우 환경와 Docker 환경의 자바, 톰캣 버전을 동일하게 해두고 테스트 해보세요.

  7. 216 사용자 입니다.
    bridge에 tomcat을 연결했는데요
    host에 연결하면 화면이 연결되는데 bridge에 연결하면 화면이 안나오는데 
    해결방법이 있을까요?

    1. 안녕하세요.
      host에 연결이라는 것이 “나스아이피:로컬포트”로 접속했다는 것인가요?
      bridge는 “컨테이너아이피:컨테이너포트 “로 접속했다는 것인가요?
      host와 bridge의 정확한 의미를 모르겠습니다.

  8. 샘플사이트에 접속하는 것 까지 성공했습니다.
    그런데 wget을 통해 웹에서 war파일을 받아 서버에 올리지않고 nas내에 존재하는 war파일을 올리고 싶은데  어떻게 해야할까요 ?

    1. 컨테이너(비디오형식) 편집에서 나스의 공유폴더를 컨테이너의 특정 폴더로 링크를 걸어주면 컨테이너에서 나스의 공유폴더에 접근할 수 있습니다.

        1. 컨테이너가 구동 중이면 편집이 비활성화됩니다 중지하고 진행하세요. 폴더 링크는 환경설정에 있을겁니다. 지금밖이라 좀 있다 확인하고 정확하게 글 남기겠습니다

  9. 저번에 도움받고 잘 진행하던 도중 또한가지 문제가 발생했습니다.
    webapps 디렉터리에 있는 A라는 파일과 A.war파일을 지운뒤 나스 공유폴더에 새로운  war 파일을 업로드 했습니다. 물론 이전 파일은 지우고 진행했습니다.
    그렇게 쭉 진행한뒤 url을통해 들어가보니 이전에 업로드했던 버전으로 뜨네요..
    분명 파일을 삭제하고 새파일을 올린건데 무슨 이유때문일까요..

    1. 톰캣 설치 폴더 하위의 /work/Catalina/localhost 안에 있는 A 폴더를 삭제하고 해보세요.
      일반적으로 .jsp 파일이 .java 파일로 변환되어 저곳에 들어갑니다. 간혹 갱신 안되는 경우가 있어요.
      그래도 안되면 war 파일을 올린 뒤 톰캣을 재시작 해보세요.

  10. 안녕하세요. 최근 시놀로지 NAS를 구매하여 일단은 스트리밍 서버 및 백업 용도로 사용하고 있는 사람입니다.

    아직까지는 어떻게 활용을 해야 유용하게 사용하는건지 잘 모르겠네요.

    찾다보니 Docker 라는게 있는데 주로 어떤 용도로 사용되나요?
    위에 글을 읽긴 읽었는데 기존 NAS에서 쓰던 설정을 다른 NAS에 올려서 그대로 사용하다는거 말고는 아는게 없네요.

    1. 안녕하세요.
      Synology 나스는 리눅스 기반의 OS를 사용합니다. 일반 PC용 범용 리눅스 OS와 달리 특수 목적으로 최적화되어 구성되어 있어서 일반 PC용 OS에서 사용하는 각종 프로그램을 정상적으로 설치 또는 구동할 수 없습니다.
      이런 환경에서 Docker를 이용하면 나스의 메인 OS와 관계없이 각종 프로그램을 설치 또는 구동할 수 있습니다.
      누군가 미리 각종 프로그램을 설치 및 설정해두고 그것을 배포(이미지)하면 다른 사람들은 그냥 그 이미지를 받아서 실행만 하면 바로 사용 가능합니다.
      본문에 있는 것처럼 제가 톰캣을 미리 설치해두고, 각종 설정을 해둔 이미지를 배포하면 다른 사람들은 그것을 그냥 받아서 실행만 하면 바로 사용할 수 있습니다.
      아래 링크에 있는 웹브라우저로 원격데스크탑에 접속할 수 있는 Apache Guacamole의 경우도 Docker를 이용하여 쉽게 사용할 수 있는 것입니다.
      https://isulnara.com/wp/archives/1166

  11. 안녕하세요. 글 잘읽었습니다.
    본문과는 조금 다른 내용이지만 혹여 답을 얻을 수 있을까해서 글을 남기게 되었습니다.
    저는 기존에 관리하는 서버에 오라클을 두고 host에 docker를 설치한 후 톰캣에서 .war파일을 풀어 배포하려 합니다.
    프로젝트는 mybatis와 JDBC를 통해서 서버에 접속을 하는데 host에서는 잘되는게 도커로 올라가니 could not get a databaseId from dataSource라는 오류가 출력이되는군요…
    물론 ping과 telnet으로 테스트해 보았는데 정상접근됩니다…
    또 host에 오라클 컨테이너와 was컨테이너를 띄워서 link시키고 테스트를 해도 역시 같은 오류가 납니다.. 어떤 문제인지 설명이 부족하지만 간단한 조언이라도 듣고싶어 글남깁니다..

    1. 상세한 에러 로그가 없어서 원인을 찾기가 어렵네요.
      혹시나 데이터베이스 접속 정보에서 데이터베이스 서버 주소가 호스트명으로 되어 있다면 아이피 주소로 변경해서 시도해보세요.
      전 도커 컨테이너에서 도메인으로 접속할 경우 접속이 안되는 경우가 종종 발생되더군요.. /etc/hosts에 해당 호스트에 대한 아이피에 대한 주소를 설정하니 문제 없이 동작되는 경험을 몇 번 했었습니다.

    1. 일단 도메인을 구입하시고,
      – 나스의 아이피가 고정아이피라면 도메인 구입한 곳에서 A 레코드를 나스 아이피로해서 추가하면 됩니다.
      – 유동 아이피라면 나스 또는 나스가 연결된 공유기에 DDNS 기능을 사용하고, 도메인 구입한 곳에서 CNAME으로 그 DDNS용 도메인을 추가하면 됩니다.
      도메인 구입한 곳이 호스트 관리 기능을 지원하지 않거나 유료라면 무료 호스트 관리 기능 제공하는 서비스를 찾아서 도메인의 네임서버를 그 서비스가 제공하는 아이피로 설정해서 위 과정을 진행하면 됩니다.

  12. 안녕하세요.

    도커입문자로서 많은 도움 되었습니다.
    알려주신 방법으로 톰켓 구동은 성공했는데
    톰켓 관리자 페이지에 로그인 하기 위해서 관리자 계정을
    tomcat-user.xml에 아래와 같이 설정했음에도 접근이 안되는데요
    뭐가 문제일까요? 도움 부탁드립니다^^;

      1. 아래와 같이 설정하고, 톰캣을 재시작하니 잘 됩니다.

        웹브라우저 새로고침하면 안되고 종료 후 재시작해야 다시 암호 물어보고 적용되네요.

        1. 오래된 포스팅이라 이렇게 빨리 답글 달아주실지 몰랐는데 감사합니다^^;

          알려주신 방법으로도 안되길래 8.0.23 버전을 받아서 해보니 잘 됩니다.
          저는 8.5.9 버전으로 테스트 했었는데,,,
          검색해 보니 설정 방법이 바뀌어서 그런 것 같습니다.

          conf/Catalina/localhost/manager.xml에 아래 내용을 추가하니 되네요
          도커쪽 문제인가 라고 생각 했었는데…
          알려주신 덕분에 힌트를 얻어서 해결방법을 찾았습니다.

          1. xml 입력이 안되네요… 아래와 같이 했습니다.^^

            Context privileged=”true” antiResourceLocking=”false” docBase=”${catalina.home}/webapps/manager”
            Valve className=”org.apache.catalina.authenticator.BasicAuthenticator”
            Context

          2. 해결하셨다니 다행입니다.
            해결 방법까지 알려주셔서 고맙습니다.
            참고로 댓글에는 HTML 태그에 사용되는 “<“이 금지되어 있어서 내용이 제대로 표시되지 않습니다.

  13. 안녕하세요.
    혹시 synology 에서 docker에 jenkins이미지를 받고,
    설치 및 설정 후 재시작하면 다시 처음부터 설치 및 설정하라고 뜨는데

    설치된 경로를 synology volume 에 마운트시켜서 (심볼릭링크처럼) 사용하면 될것같은데,
    해당 설치된 경로를 마운트하면 실행이 되지를 않네요..

    혹시 이런식으로 사용한 사례나 예시를 아시나요?

    1. 본문의 “4. 톰캣 환경 설정 및 프로그램 설치”에 있는 것처럼 폴더 마운트하신 건가요?
      아니면 다음과 같이 해보세요.
      설치/설정 후 재시작하지 마시고, 그대로 이미지로 내보내기하고 기존 컨테이너를 삭제하고 내보낸 이미지를 불러와보세요.

      1. 혹시나 해서 댓글 달았는데,
        빠른 답변 감사드립니다.

        말씀해주신방법대로 해보고 다시 댓글 기록하겠습니다.ㅎ

      2. 내보내기 후 기존컨테이너 삭제 후 내보낸 이미지를 불러와도 설치하라고 뜨네요ㅠ
        답변 감사드립니다. 좀 더 방법을 찾아봐야겠네요ㅎ

답글 남기기

이메일은 공개되지 않습니다.