서론
스프링웹서버를 시놀로지 NAS에 있는 도커에 올리기 위한 과정을 포스팅하려고 합니다.
docker registry를 이용해서 이미지를 NAS에 private하게 올려 사용하는 과정을 포스팅했습니다.
스킵한 내용
SSH를 이용해 NAS에 접속한 방법은 건너뛰었습니다.
SSH 설정은 아래 포스팅 참고해주세요.
ssh 로그인 설정 (tistory.com)
환경
ASUS 공유기 (RT-AC68U Merin firmware 386.5_2)
NAS (헤놀로지, 타오나스 DSM6.2.1-23824)
맥북 M1 Pro Ventura 13.6
1) DSM에서 도커 설치
패키지 센터에서 도커 검색 후 설치
도커 경로) /volume2/docker
* 볼륨은 본인의 하드디스크 설정을 어떻게 했느냐에 따라 다르기때문에 다를 수 있습니다.
2) Registry 설치를 위한 사전 폴더 경로 설정
registry 경로)
/volume2/docker/registry/varlibregistry : registry 이미지를 넣기 위한 경로
/volume2/docker/registry/tmpregistry : 임시 이미지 경로
/volume2/docker/registry/tmpregistrydev : 임시 이미지 경로
/volume2/docker/registry/auth : htpasswd를 설정을 위한 경로
/volume2/docker/registry/certs : 인증키를 넣기 위한 경로
3) DSM에서 Registry 이미지 설치 및 설정
Docker 열기 후 왼쪽 사이드바 레지스트리 클릭 및 registry 검색
설치 시 latest가 아닌 최신 버전으로 설치
(작성일 기준 2.8.3이 최신)
고급 설정을 누른 후 포트설정과 볼륨 설정을 합니다.
포트 설정 탭에서 포트를 설정.
로컬 포트 5050 (원하는 포트로 변경 하셔도 됩니다)
컨테이너 포트 5000
마운트 경로 설정.
2)에서 설정한 폴더 경로를 아래 사진과 같이 마운트 경로를 설정해줍니다.
4) 인증 설치
로컬에서 도커로 로그인할 때 필요한 아이디와 비밀번호를 만듭니다.
SSH로 NAS 접속 후 아래 명령어 입력
docker run --rm -ti xmartlabs/htpasswd [아이디] [비밀번호] > /volume2/docker/registry/auth/htpasswd
5) dockerd.json 설정
NAS 경로) /usr/syno/etc/packages/Docker/dockerd.json
(vi or vim을 이용해 넣는다.)
"insecure-registries" : ["192.168.1.100:5050"] 를 입력 후 본인의 내부IP 주소를 넣는다.
6) 역방향 프록시 설정
도메인 주소는 ASUS 공유기에서 제공하는 ***.asuscomm.com을 이용했습니다.
프로토콜: HTTPS
호스트이름: * (*으로 했을 시 NAS에 설정된 도메인주소가 기본설정으로 됩니다.)
포트: 5454 (변경해도 됩니다.)
HSTS 활성화: HTTP 연결을 자동으로 HTTPS으로 변경해줍니다.
대상: HTTP
호스트이름: localhost
포트: 5050 (registry 도커 이미지 설정 시 로컬 포트를 입력하면 됩니다)
7) NAS 방화벽 설정 및 포트포워딩 설정
모든 설정을 다 했는데 방화벽으로 인해서 막히는 경우가 있습니다.
내장 응용 프로그램 규칙을 선택해 역방향 프록시 및 도커 포트 설정을 합니다.
또한 5454 포트도 방화벽에 추가해줍니다.
ASUS 공유기의 관리자페이지에서 포트포워딩 설정을 진행합니다.
역방향 프록시에서 설정한 소스포트를 열어줍니다.
8) 테스트
iterm 및 터미널에서 아래 curl 명령어를 이용 혹은 postman을 이용해봅니다.
curl -X GET https://도메인주소:5454/v2/_catalog
응답 결과가 아래와 같이 나오면 성공입니다.
{"repositories":[]}
저는 이미 테스트한 이미지가 올라가서 repositories 목록에 이미지가 떠있네요
마무리
DSM에서 도커 대시보드를 누릅니다
레지스트리 -> 상단 설정 -> 추가
레지스트리 이름 : 원하는 이름 설정
레지스트리 URL : https://admin.asuscomm.com:5454
이제 터미널에서 docker login을 진행 후 로컬에서 만든 이미지를 push해봅니다.
정상적으로 push가 완료되면 레지스트리에 올린 이미지 목록이 뜹니다.