Synology NAS에 Docker 설치하고 사용하는 방법

Synology DSM리눅스 커널에 기반해서 개발되었으며, 여느 리눅스와 마찬가지로 OpenSSH 서버를 사용해 커맨드라인 작업을 하는 것도 가능합니다. 하지만 Ubuntu나 CentOS 등 메이저 리눅스 배포판은 아니며, apt나 yum과 같은 패키지 매니저를 기본적으로 포함하고 있지 않기 때문에 리눅스 서버로 활용하는 데는 한계가 있었습니다. 예를 들어 Synology 패키지로 제공되는 Wordpress는 바로 사용해볼 수 있지만, 비슷한 오픈소스 블로그 Ghost를 사용해보려면 (불가능하지는 않지만) 난이도가 급격히 올라갑니다.

하지만 [[]]가 등장하면 이야기가 달라집니다. Docker는 리눅스 컨테이너를 구현하는 도구로 Wordpress 이미지가 있으면 Wordpress를 바로 실행할 수 있고, Ghost 이미지가 있으면 Ghost 블로그 서버를 바로 실행해볼 수 있습니다. Docker의 개념을 다루는 것은 이 글의 범위를 넘어섭니다만, 리눅스 용 포터블 애플리케이션이라고 이해해도 무방합니다. 2015년 Docker 등장과 함께 DSM에서도 빠르게 Docker를 지원했고, Synology NAS들의 홈 서버 활용 범위가 아주 넓어졌습니다. 이 글에서는 Synology NAS에서 Docker를 사용하는 방법에 대해서 소개합니다.

Windows 10, macOS, Linux 등 다른 환경에서 Docker를 설치하는 방법은 아래 글을 참고해주세요.

Docker 지원 모델 확인하는 방법#

Docker는 시놀로지의 공식 애드온 패키지로 제공되고 있으며, 패키지 센터에서 간편하게 설치할 수 있습니다.

단, 모든 Synology NAS 모델에서 Docker를 지원하는 것은 아닙니다. Intel이나 AMD의 64-bit CPU를 탑재한 경우 큰 문제 없이 사용이 가능합니다만, 정확한 지원 여부는 공식 페이지의 지원 모델을 확인해주세요. 아래 목록은 2021년 7월 기준 공식적으로 Docker를 지원하는 Synology NAS 모델들입니다. NAS를 홈 서버 목적으로 구매할 예정이라면 아래 모델들을 고려해보시기 바랍니다. 가능하면 가능하면 최신 모델이고 메모리가 많으면 유리합니다.

  • FS 시리즈 : FS6400, FS3600, FS3400, FS3017, FS2017, FS1018
  • SA 시리즈 : SA3600, SA3400, SA3200D
  • 21 시리즈 : RS4021xs+, RS3621xs+, RS3621RPxs, RS2821RP+, RS2421RP+, RS2421+, RS1221RP+, RS1221+, DS1821+, DS1621xs+, DS1621+, DVA3221
  • 20 시리즈 :RS820RP+, RS820+, DS1520+, DS920+, DS720+, DS620slim, DS420+, DS220+
  • 19 시리즈 : RS1619xs+, RS1219+, DS2419+II, DS2419+, DS1819+, DS1019+, DVA3219
  • 18 시리즈 : RS3618xs, RS2818RP+, RS2418RP+, RS2418+, RS818RP+, RS818+, DS3018xs, DS1618+, DS918+, DS718+, DS218+
  • 17 시리즈 : RS18017xs+, RS4017xs+, RS3617xs+, RS3617RPxs, RS3617xs, DS3617xs, DS1817+, DS1517+
  • 16 시리즈 : RS18016xs+, RS2416RP+, RS2416+, DS916+, DS716+II, DS716+, DS216+II, DS216+
  • 15 시리즈 : RS815RP+, RS815+, RC18015xs+, DS3615xs, DS2415+, DS1815+, DS1515+, DS415+
  • 14 시리즈 : RS3614xs+, RS3614RPxs, RS3614xs, RS2414RP+, RS2414+, RS814RP+, RS814+
  • 13 시리즈 : RS10613xs+, RS3413xs+, DS2413+, DS1813+, DS1513+, DS713+
  • 12 시리즈 : RS3412RPxs, RS3412xs, RS2212RP+, RS2212+, RS812RP+, RS812+, DS3612xs, DS1812+, DS1512+, DS712+, DS412+
  • 11 시리즈 : RS3411RPxs, RS3411xs, RS2211RP+, RS2211+, DS3611xs, DS2411+, DS1511+, DS411+II, DS411+
  • 10 시리즈 : RS810RP+, RS810+, DS1010+, DS710+

Docker의 설치 가능 여부는 Synology 패키지 센터에서 검색해보면 바로 확인할 수 있습니다. 설치가 불가능한 경우 패키지 센터에서 docker를 검색해도 결과에 나타나지 않습니다. 🥲

공식 지원하지 않으면 Docker 패키지를 검색해도 결과가 나오지 않습니다

DSM 패키지 센터에서 Docker 설치하는 방법#

Docker를 설치하기 위해서 먼저 Synology DSM 웹 페이지에 접속합니다. NAS의 IP나 접속 방법을 모른다면 다음 글을 참고해주세요.

좌측 상단의 시작 버튼을 클릭하고 패키지 센터를 찾아 실행합니다.

시작 버튼을 클릭하고 패키지 센터를 엽니다

패키지 센터 상단의 검색 창에 docker를 검색합니다. 결과에 Docker 패키지가 나타나면 클릭해서 상세 페이지로 이동합니다.

Container Manager 패키지

Docker 패키지는 2023년 6월 현재 Container Manager 패키지로 이름이 변경되었습니다. 패키지 매니저에서 Docker로 검색해서 Container Manager를 찾을 수 있습니다.

Container Manager - Synology Inc.
검색 창에 Docker를 검색합니다

상세 페이지에서는 Docker 패키지에 관한 정보를 확인할 수 있습니다. 설치 버튼을 누르면 곧바로 설치가 시작됩니다.

Docker 상세 페이지에서 설치 버튼을 클릭합니다

설치에는 몇 분 정도 시간이 걸립니다. 설치가 끝나면 실행 중으로 상태가 변경되며, 설치 버튼이 열기 버튼으로 바뀝니다.

Docker 설치가 끝나면 열기 버튼이 활성화됩니다

열기를 누르면 시놀로지의 Docker 애플리케이션이 실행됩니다. 이 메뉴를 통해 도커 허브에서 이미지를 풀 받거나 컨테이너를 실행할 수 있습니다.

Docker GUI 앱이 실행되었습니다

Docker는 커맨드라인에서 주로 사용합니다만, 커맨드라인 환경에 익숙하지 않다면 GUI 애플리케이션으로 사용할 수도 있습니다.

Synology Docker 앱으로 nginx 서버 실행해보기#

Synology Docker를 사용하는 간단한 예로 nginx 서버를 실행해보겠습니다. Docker에 대한 자세한 설명은 이 글의 범위를 넘어섭니다만, 도커를 사용하는 기본적인 방법은 이렇습니다.1. 먼저 사용하고자 하는 (서버) 애플리케이션이 포함된 도커 이미지를 풀(다운로드) 받습니다. 2. 이 도커 이미지를 기반으로 서버 컨테이너(애플리케이션)를 실행합니다. 생각보다 간단하죠?

이미지를 풀 받기 위해 Docker 앱의 왼쪽 사이드 바에서 레지스트리 메뉴로 이동합니다. 레지스트리는 미리 만들어놓은 Docker 이미지를 모아놓은 서비스입니다. 제일 위에 nginx(Official build of Nginx) 이미지가 보입니다. 혹시 보이지 않는다면 우측 상단의 검색 창(키워드 삽입)에 nginx를 검색해주세요. 파란색 체크 아이콘은 Docker의 공식 이미지를 의미합니다. 꼭 파란색 체크 아이콘을 확인하고, nginx 이미지를 더블 클릭합니다.

레지스트리에는 많은 이미지들이 있지만 Docker에 대해 잘 모른다면, 보안상 체크 마크가 표시된 공식 이미지만 사용하는 것을 강력하게 추천드립니다.

레지스트리 탭에서 nginx 이미지를 검색해봅니다

이미지가 바로 풀 받아지지 않고, 태그를 선택하는 팝업이 나타납니다. 최신 버전을 의미하는 latest를 선택해줍니다.

태그는 latest를 선택합니다

왼쪽 사이드바에서 이미지 메뉴를 선택합니다. 아래 예시에서는 nginx:latest 이미지를 확인할 수 있습니다. 풀을 받는 동안에는 디스크 아이콘이 반짝입니다. 풀이 끝나면 알람이 오고, 디스크 아이콘이 파란색으로 고정됩니다.

이 이미지를 선택하고 실행을 클릭합니다.

이미지를 선택하고 실행합니다

컨테이너 실행을 위한 설정 창이 나타납니다. 기본값을 그대로 사용해도 무방합니다. 단, nginx는 서버 애플리케이션이라서 동작을 확인하려면 포트 설정을 추가로 해야합니다. 아래에 보이는 고급 설정 버튼을 클릭합니다.

설정 창이 나타납니다

고급 설정에서는 컨테이너 실행에 필요하면 볼륨, 네트워크, 포트 설정, 링크, 환경 등에 대한 추가 설정을 할 수 있습니다. 네 번째에 보이는 포트 설정 탭을 클릭합니다. 컨테이너 포트가 80으로 설정된 설정이 자동으로 추가되어있습니다. nginx는 웹 서버이며 HTTP 프로토콜의 기본 포트인 80 포트를 사용합니다.

단, 사용자가 nginx 서버에 접속하기 위해서는 컨테이너 포트와는 별개로 로컬 포트를 설정해주어야합니다. 여기서 로컬 포트는 NAS 서버의 포트를 의미합니다. 예를 들어 아래와 같이 로컬 포트 8080, 컨테이너 포트 80으로 설정하면, NAS의 8080 포트에 접근했을 때 Nginx 컨테이너의 80 포트로 연결해줍니다. 포트 포워딩과 비슷하다고 이해하서도 무방합니다.

포트 설정에서 nginx 컨테이너의 포트 관련 설정을 합니다

적용을 누르면 실행하려는 컨테이너에 대한 리뷰를 진행합니다. 내용을 확인하고 우측 하단의 완료 버튼을 클릭하면 컨테이너가 실행됩니다.

설정 리뷰를 하고 완료 버튼을 클릭합니다

왼쪽 사이드바에서 컨테이너를 선택하면, 실행중인 컨테이너를 확인할 수 있습니다. 컨테이너는 단 몇 초면 실행되기 때문에 거의 바로 ‘실행 중’ 상태가 됩니다.

nginx1 컨테이너가 실행되었습니다

NAS 서버의 8080 포트로 접속해봅니다. 예를 들어 NAS 서버의 IP가 192.168.0.39라면 웹 브라우저에서 192.168.0.39:8080을 주소 창에 입력합니다. 아래와 같이 Nginx 서버가 나타나면 성공입니다!

NAS IP의의 8080 포트로 접속하면 nginx 페이지가 열립니다

다시 DSM의 Docker 앱으로 돌아와서 컨테이너를 종료해봅니다. 컨테이너 목록의 가장 오른쪽에 있는 토글 버튼을 클릭하면 ’실행 중’에서 ’정지됨’으로 상태가 변경됩니다.

nginx 커테이너를 정지합니다

다시 웹 브라우저에서 192.168.0.39:8080에 접속해보면 이번에는 사이트에 연결할 수가 없다고 나올 것입니다.

다시 8080 포트로 접속해보면 서버가 동작하지 않습니다

여기까지 Docker를 설치하고 Nginx 서버를 띄우는 방법을 빠르게 살펴보았습니다!

Synology NAS에서 Ghost 블로그 실행하는 방법#

앞서 Nginx 서버 실행을 응용해서 Ghost 블로그를 실행해보겠습니다(여기서는 맛보기로 서버를 실행만 해봅니다. 제대로 블로그를 운영하려면 추가적인 작업들이 필요한데 이는 다음 기회에 다뤄보겠습니다).

1. 먼저 Docker 앱의 레지스트리에서 ghost를 검색해서 공식 이미지를 풀 받아주세요. 태그는 4.9를 선택합니다. 이미지는 400MB 정도 되서 풀을 받는 데 시간이 조금 걸립니다.

레지스트리 탭에서 ghost 이미지를 검색합니다

2. 이미지로 이동해서 ghost:4.9 이미지의 풀이 완료될 때까지 기다립니다. 이미지 풀이 끝났으면 ghost:4.9 이미지를 선택하고 상단의 실행 버튼을 클릭합니다.

3. 고급 설정을 클릭하고 포트 설정으로 이동합니다. 로컬 포트 2368, 컨테이너 포트 2368로 설정합니다. 환경 탭으로 이동해서 추가 버튼을 클릭하고 변수 server__host, 값 0.0.0.0을 입력해줍니다. 차례대로 적용 > 다음 > 완료를 클릭합니다.

4. 사이드바에서 컨테이너로 이동해 ghost1이 실행 중인 것을 확인합니다. 컨테이너가 실행되고 Ghost 블로그가 초기화되는 데까지 1~2분 정도의 시간이 걸립니다.

ghost1 컨테이너가 실행되었습니다

5. 웹 브라우저에서 [NAS_IP]:2368로 접속해봅니다. Ghost 블로그 서버가 나타나면 성공입니다. 정상적으로 접속이 되면 [NAS_IP]:2368/ghost로 접속해서 어드민 페이지열 수 있습니다.

NAS:2368 포트에서 Ghost 블로그에 접속할 수 있습니다

여기까지 맛보기로 Ghost 서버를 NAS에서 Docker를 사용해 실행해보았습니다.

실행한 컨테이너를 중지하고 삭제하는 방법#

앞에서 실행한 nginx나 ghost 컨테이너를 중지하려면 컨테이너를 선택하고, 목록 오른쪽의 토글을 클릭하면 됩니다. 혹은 작업 > 중지를 눌러서 중지할 수도 있습니다.

컨테이너를 선택하고 작업 -> 중지를 클릭합니다.

컨테이너가 중지된 상태에서 다시 작업을 누르면 삭제가 활성화됩니다. 사용하지 않는 컨테이너를 삭제해줍니다.

중지된 컨테이너를 선택하고 작업 -> 삭제를 클릭합니다

커맨드라인에서 Docker 사용하는 방법#

앞서 잠깐 언급한 대로 Docker는 GUI보다는 커맨드라인에서 주로 사용합니다. Synology NAS에 설치한 Docker를 커맨드라인에서 사용하려면 먼저 SSH로 NAS에 접속해야합니다.

NAS에 접속하더라도 docker를 바로 사용할 수는 없습니다.

lainyzine@my-synology-nas:~$ docker ps
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json": dial unix /var/run/docker.sock: connect: permission denied

Docker를 사용하려면 먼저 사용자에게 Docker에 대한 권한을 추가해주어야합니다. 이를 위해 먼저 root로 접속합니다.

lainyzine@my-synology-nas:~$ sudo -i
root@my-synology-nas:~$

root 권한으로 다음 명령어를 차례대로 입력합니다. 마지막의 lainyzine은 본인의 NAS 계정 ID로 바꿔서 실행합니다.

$ synogroup --add docker
$ chown root:docker /var/run/docker.sock
$ synogroup --member docker lainyzine

SSH 접속을 종료하고, 다시 접속합니다. docker ps 명령어를 실행해봅니다.

$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

아까와는 결과가 다릅니다. 실행중인 컨테이너가 없어서 결과가 비어있습니다만, 정상적으로 동작하고 있습니다.

앞서 생성한 nginx 컨테이너를 만드는 docker 명령어는 다음과 같습니다.

$ docker run -d -p 8080:80 --name nginx1 nginx:latest

그리고 앞서 생성해본 ghost 컨테이너를 만드는 docker 명령어는 다음과 같습니다.

$ docker run -d -p 2368:2368 --name ghost1 ghost:4.9

이 명령어를 실행하고 Docker GUI 앱을 열어보면 컨테이너가 실행중인 것을 확인할 수 있습니다.

CLI에서 실행한 컨테이너들을 GUI에서도 확인할 수 있습니다

이 글에서 다루지 못 한 Docker의 기초 사용법은 다음 튜토리얼을 참고해보시기 바랍니다.

그 외에도 다양한 글들이 있으니 참고해주세요. Synology NAS의 Docker도 아래 글들에서 다루는 내용과 완전히 똑같습니다.

시놀로지 DSM에서 가상머신 사용하는 방법#

시놀로지에서는 Docker 뿐만 아니라 Virtual Machine Manager(VMM) 패키지로 가상 머신을 사용하는 것도 가능합니다. 가상머신은 일반적으로 Docker 보다 무겁고 많은 자원을 필요로 합니다만, NAS와는 독립적으로 동작하는 시스템이 필요할 때 유용합니다. DSM에서 가상머신을 사용하는 방법은 다음 글에서 상세히 소개합니다.

LainyZine Profile;
LainyZine
이 블로그는 LainyZine이 직접 테스트하고 작성한 내용입니다. CC BY-NC-ND 라이센스에 의해서 사용하실 수 있으며, 반드시 링크 형태로 출처를 남겨주세요. 웹사이트 이용에 대한 더 자세한 정보는 LainyZine 소개 페이지를 참고해주세요.
    1. 운영체제 별 Docker 설치 방법
      1. 리눅스에서 Docker 설치하기
      2. 윈도우에서 Docker 설치하기(Home 포함)
      3. 맥에서 Docker 설치하는 방법
        1. Docker Desktop 최신 버전으로 업데이트하는 방법
    2. Docker 입문 튜토리얼
      1. 컨테이너 실행부터 삭제까지
      2. 도커 이미지의 동작 원리
      3. 도커로 설치 없이 애플리케이션 실행하기
      4. 서버 컨테이너(nginx 편)
      5. 예제로 배우는 Docker Compose
    3. Docker 기초
      1. 컨테이너와 이미지의 차이
    4. Docker 컨테이너
      1. docker run 컨테이너 실행 완벽 가이드
        1. docker run과 docker create의 차이
        2. Docker 컨테이너 DNS 서버 변경하는 방법
        3. 도커 컨테이너 자동으로 재시작하는 방법
        4. Docker 컨테이너 이름 지정
      2. 도커 컨테이너 리스트 출력하기
        1. docker ps 명령어 사용법(컨테이너 목록)
        2. docker stats 사용법(컨테이너 모니터링)
      3. 도커 컨테이너에 접속하는 방법
        1. docker exec 사용법: 실행중인 컨테이너에 명령이 실행
      4. docker cp 컨테이너에 파일 복사
      5. 컨테이너 종료 명령어: docker stop과 docker kill
      6. docker rm 사용법: Docker 컨테이너 삭제
    5. Docker 이미지
      1. docker images로 도커 이미지 목록 확인
      2. docker pull 사용법: 도커 이미지 다운로드
      3. docker push 사용법(이미지 업로드)
      4. docker tag: 도커 이미지 이름을 변경하는 방법
      5. docker 이미지 이름 지정하는 방법
      6. docker 이미지 이름 규칙
    6. 기타 명령어
      1. docker prune: 사용하지 않는 Docker 오브젝트 일괄 삭제
      2. docker version: 도커 서버 및 클라이언트 버전 확인
    7. Docker Hub
      1. Docker Hub 계정 생성 방법
      2. Docker Hub와 Docker 공식 이미지의 이해
      3. docker login 사용법
      4. Docker와 리눅스 배포판 공식 이미지들
      5. Docker Hub에서 이미지 검색
    8. Docker 활용
      1. docker로 무설치 ffmpeg 사용하기
    9. Docker 팁
      1. 로컬 시스템의 모든 컨테이너와 이미지 삭제하는 방법
    10. 부록
      1. WSL에 Docker 설치하는 법
      2. Docker Compose 설치
      3. 윈도우 Docker에서 NVIDIA GPU 사용하는 방법
      4. Synology NAS에 Docker 설치하는 방법