Synology NAS / Docker - 2부. (응용편)

목적/목표

Synology Docker 패키지를 이용해 서비스를 구동하는 방법에 대해 알아보도록 하겠습니다.

 

순서

  1. Synology Docker의 고급 설정
  2. Docker 고급설정의 항목 기능 설명
  3. dockercompose.yml 정보를 이용해 서비스 구성하는 방법

 

1. Synology Docker의 고급 설정

신규 컨테이너를 생성하면, 해당 Docker의 레지스트리에서 설명된 정의된 환경정보를 고급 설정의 내용에 입력 해야한다. 

레지스트리의 도커 허브 연결페이지 링크
도커허브 페이지의 레드마인 환경설정 정보(Environment Variables)

 

2. Docker 고급설정의 항목 기능 설명

  • 일반설정 :  컨테이너 이름과 컨테이너 권한 및 리소스 사용 정보, 재시작 정보 등을 설정 하는 부분입니다.
  • 볼륨(Volume) : 도커 컨테이너 내부의 파일을 NAS의 특정 폴더로 하기 위해 사용한다. 통상적으로 초기 이미지 외에 변경되는 파일 또는 폴더를 연결합니다. 아래의 이미지는 NAS의 /docker/lxqt 폴더를 컨테이너의 /home/ubuntu로 연결한다는 의미 입니다. 컨테이너 내부에서 작성되거나 액세스 하는 내용은 실제 NAS의 /docker/lxqt 폴더에 저장 됩니다.

  • 포트 설정(Port Mapping) : 실제 서비스가 연결될 서비스 네트워크의 포트 정보로 도커 컨테이너의 외부 접근 네트워크 정보를 설정합니다. 아래의 이미지는 TCP통신으로 로컬 포트 localhost:13100로 접속시, 컨테이너 포트 6080으로 연결한다는 의미 입니다.

  • 링크(Link) : 해당 컨테이너와 연결되는 Database와 같은 컨테이너의 링크정보를 입력합니다. 컨테이너가 연결되면, 별칭 설정을 이용해 컨테이너와 컨테이너 끼리의 연결성이 좋아집니다. 아래는 컨테이너 링크를 두어 연결하는 것에 대한 샘플 구성입니다. (실제는 연결되지 않음)

  • 환경(Environment Variables) : 서비스 구동에 필요한, DB 연결정보 및 관리자 정보, 서비스 구동에 필요한 환경 정보입니다. 이를테면 DB 연결된 정보 등을 입력합니다. 아래의 이미지는 레드마인의 DB커넥션 정보를 입력한 부분이며, REDMINE_DB_MYSQL의 값이 db 인 부분은 위의 링크에서 DB의 컨테이너의 별칭을 db로 하고 있기 때문입니다.

  • 환경 > 실행 명령 : 최초 도커 컨테이너 생성시 실행되는 명령입니다. 특정한 도커 이미지의 경우, 초기 설정이 필요한 경우 요구되기도 합니다.

 

3. dockercompose.yml 정보를 이용해 서비스 구성하는 방법

NextCloud 설치

NextCloud 의 dockercompose.yml를 이용해 구성해보도록 하겠습니다.

① service : 밑의 image: 를 보면 mariadb와 nextcloud 이미지가 필요한 것을 확인할 수 있습니다. 

version: '2'

volumes:
  nextcloud:
  db:

services:
  db:
    image: mariadb
    restart: always
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
    volumes:
      - db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=
      - MYSQL_PASSWORD=
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud

  app:
    image: nextcloud
    restart: always
    ports:
      - 8080:80
    links:
      - db
    volumes:
      - nextcloud:/var/www/html
    environment:
      - MYSQL_PASSWORD=
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_HOST=db

② 레지스트리에서 mariadb, nextcloud 의 이미지를 다운받습니다. (lastest로 다운받습니다.)

③ 이미지에서 각 이미지가 다운되면, 선택 후 실행합니다.

④ Mariadb 이미지를 실행하고, 일반 설정의 내용중 고급설정을 클릭하고, 입력하는 상세정보는 dockercompose.yml 파일을 참고합니다. 

 

# Mariadb 고급설정

  • 볼륨 : yml 파일의 13번째 행을 참고하여, NAS에 위치할 폴더를 선택(생성)해주고, 마운트 경로를 입력 합니다.

 

  • 환경 : yml 파일의 15~18번 행을 참고로 하여 입력해줍니다.

  • 환경 > 실행 명령 추가 : 명령어의 시작은 회색글씨로 표기된 부분을 참고 합니다. (이미지에 따라 다름) mysqld 로 시작하는 명령어와 yml 파일의 11번 행의 command 내용을 추가합니다. 명령어 입력 형식 오류가 발생시에는 앞뒤로 감싸주어 mysqld "--transaction....ROW"와 같이 입력해주세요.

명령어는 mysqld 로 시작되어야 합니다.
yml의 command 내용을 입력합니다.

 

⑤ mariadb 컨테이너 생성에 최종적으로 내용을 확인하고, 적용을 클릭합니다.

 

⑥ nextcloud 이미지를 실행하고, 일반 설정의 내용중 고급설정을 클릭하고, 입력하는 상세정보는 dockercompose.yml 파일을 참고합니다. 

 

# Nextcloud 고급설정

  • 링크 : yml 파일의 00째 행을 참고하여, 위에서 생성했던 mariadb를 선택하고 db라는 별칭을 입력합니다. 
    (추후 환경 설정에서 db 라는 별칭을 사용합니다.)

  • 포트설정 : yml 파일의 24번째 행을 참고하여, 외부로 연결되는 포트를 설정합니다.
    이후 8000번 포트로 Nextcloud 페이지가 연결됩니다.

  • 볼륨 : yml 파일의 27번째 행을 참고하여, NAS에 위치할 폴더를 선택(생성)해주고, 마운트 경로를 입력 합니다.

  • 환경 : yml 파일의 30~33번 행을 참고로 하여 입력해줍니다. db 연결 정보로 mariadb에서 설정한 정보와 동일하게 입력해 줍니다. 

⑦ nextcloud 컨테이너 생성에 최종적으로 내용을 확인하고, 적용을 클릭합니다.

※ 이때, 컨테이너를 실행하게되면, 링크로 연결된 mariadb 컨테이너를 자동으로 실행합니다.

⑨ http://(NAS의 IP):8000으로 접속해 웹페이지를 확인합니다.

 

트러블 슈팅

  • Nextcloud 컨테이너가 다운될 경우, 버전을 낮추어서 이미지를 다운 받으시기 바랍니다.
    • AH00141 오류발생의 경우 NAS 커널 또는 php버전 및 커널 이슈로 동작이 안되는 경우가 있는 부분으로 저같은 경우 21.0.0 으로 버전을 낮추어서 설정하니 정상 구동이 가능했습니다.
  • Mariadb 컨테이너가 다운될 경우, 커멘드를 지우고 실행해봐 주시기 바랍니다. 
  • 웹 페이지 접속에 문제가 있는 경우 역방향 프록시 등을 이용해 설정이 필요 할 수 있습니다.

 

 

이상입니다.