Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

Synology NAS(DS216+II)에 docker 설치 후 .NET Core 2.1 응용 프로그램 실행하는 방법

아쉽지만, .NET Core는 Synology NAS 버전의 리눅스는 지원하지 않습니다. 아마 누군가 포팅을 하면 되겠지만 ^^ 아직 그렇게까지는 작업이 안 된 것 같습니다. 대신 Synology NAS에서도 docker가 설치되기 때문에 docker 위에서 .NET Core 응용 프로그램을 실행하는 것은 가능합니다. 이에 대해서는 다음의 글에서 소개하고 있습니다.

How to install and use Docker on Synology
; https://blog.pavelsklenar.com/how-to-install-and-use-docker-on-synology/

How to deploy asp.net core 2.0 to synology NAS
; https://www.mysharings.com/coderblog/how-to-deploy-asp-net-core-2-0-to-synology-nas/

어디 한번 ^^ 직접 해볼까요?

다행히, 제가 가진 "DS216+II"은 Intel CPU 계열로 docker를 지원하는 모델에 포함되므로 Synology Diskstation 관리 페이지의 "패키지 센터"에 보면 다음과 같이 "docker"가 올라와 있습니다.

netcore_on_docker_on_synologynas_1.png

ipkg, opkg 등의 패키지 관리자가 아닌, 저렇게 Diskstation의 패키지 센터에서 지원해 주니 매우 쉽게 설치가 끝납니다. 물론 설치 후 Diskstation 관리 화면의 시작 메뉴에서 docker 아이콘을 선택해 GUI 화면으로 docker를 관리할 수도 있고 SSH 연결 콘솔에서 docker 명령을 이용해 관리하는 것도 가능합니다.

자, 그럼 이제 docker에 올릴 .NET Core 2.1 응용 프로그램을 담은 이미지만 준비하면 되겠군요. ^^ 테스트를 위해 간단하게 .NET Core Console 응용 프로그램만을 docker 이미지로 만든 것을,

.NET Core 콘솔 응용 프로그램을 배포(publish) 시 docker image 자동 생성
; https://www.sysnet.pe.kr/2/0/11708

사용해 보겠습니다. 위의 글에 따라 실습하면 로컬 docker에 netcore_app 이미지가 생겼을 것입니다. 그럼 이것을 파일로 저장하고,

C:\> docker save -o c:\temp\netcore_app.img netcore_app

NAS 디스크에 복사합니다. Synology에 docker가 설치되면 기본적으로 \docker 디렉터리가 하나 생성되므로 다음과 같이 네트워크 복사를 할 수 있습니다.

C:\> robocopy c:\temp \\...[NAS 주소]...\docker netcore_app.img

마지막으로 Diskstation의 관리 화면에서 docker 프로그램을 이용해 netcore_app.img를 로드할 수 있지만, 여기서는 SSH 연결로 NAS 측 docker에서 docker load로 다음과 같이 직접 실행해 봅니다.

~# docker load -i netcore_app.img
8b15606a9e3e: Loading layer [==================================================>]  58.44MB/58.44MB
e21eadb9b098: Loading layer [==================================================>]  44.23MB/44.23MB
afd643d90d06: Loading layer [==================================================>]   7.17MB/7.17MB
adce30b608bb: Loading layer [==================================================>]  74.28MB/74.28MB
27a7cfe11541: Loading layer [==================================================>]  1.536kB/1.536kB
a6eb8fcaefd7: Loading layer [==================================================>]  9.728kB/9.728kB
Loaded image: netcore_app:latest

~# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
netcore_app         latest              205ea304ca0b        8 minutes ago       180MB

~# docker run --rm -it netcore_app
Hello World!

출력 결과가 잘 나오는군요. ^^




콘솔 프로그램을 배포해 봤으니, 이제 ASP.NET Core 웹 애플리케이션도 배포해 보겠습니다. 처음부터 ASP.NET Coer 웹 응용 프로그램의 프로젝트를 생성 시 "Enable Docker Support"를 지정해 docker 이미지를 만드는 것도 가능하지만 그 옵션을 끈 프로젝트에 대해서도 다음의 글에 설명한 것에 따라,

.NET Core 콘솔 응용 프로그램을 배포(publish) 시 docker image 자동 생성
; https://www.sysnet.pe.kr/2/0/11708

Dockerfile의 내용을 다음과 같이 채워 docker 이미지를 만들 수 있습니다.

# .NET Core 2.1 기준
FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base

FROM base AS final
ARG CONFIGNAME

WORKDIR /app
COPY /bin/${CONFIGNAME}/netcoreapp2.1/publish/  .

ENV ASPNETCORE_URLS http://*:7500
EXPOSE 7500

ENTRYPOINT ["dotnet", "netcore_web.dll"]

어떤 방식으로든 docker 이미지를 만들었으면 역시 마찬가지로 내보내기 한 다음,

C:\> docker save -o c:\temp\netcore_web.img netcore_web

NAS 디스크에 복사하고,

C:\> robocopy c:\temp \\...[NAS 주소]...\docker netcore_web.img

SSH 콘솔이든,

~# docker load -i netcore_app.img

Diskstation의 docker 관리 화면이든 이용해서 이미지를 로드해 실행하면 됩니다.

docker run --rm -it -d -p 8080:7500 --name myweb netcore_web

일단 실행이 되면 "docker ps -a"를 이용해 실행 중인 container를 확인하거나 역시 Diskstation의 docker 관리 화면을 통해 다음과 같이 제어할 수 있습니다.

netcore_on_docker_on_synologynas_2.png

당연히, NAS의 주소를 이용해 웹 브라우저로 접근하면,

http://...NAS 주소...:8080/

ASP.NET Core 웹 응용 프로그램의 응답을 받을 수 있습니다.




참고로, docker load로 동일한 이름의 이미지를 로드하는 경우,

~# docker load -i netcore_web.img
7ebd9b53a052: Loading layer [==================================================>]  2.761MB/2.761MB
The image netcore_web:latest already exists, renaming the old one with ID sha256:5df6f0dcd890152230aec7e5ab075de333dd4b865fe60e16626000297e8e1f33 to empty string
Loaded image: netcore_web:latest

docker는 자동으로 기존 이미지 파일에 대해 ID 값 변경을 한 후 이름을 "<none>"으로 바꿔 버립니다. 따라서 docker load를 하기 전 기존 이미지를 docker rmi 명령어로 지우거나, 아니면 "<none>" 이름의 이미지를 때때로 "docker image prune -f" 명령어로 지우는 것이 좋습니다.




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]





[최초 등록일: ]
[최종 수정일: 10/3/2018 ]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer@outlook.com

비밀번호

댓글 쓴 사람
 




... 16  17  18  19  20  21  22  [23]  24  25  26  27  28  29  30  ...
NoWriterDateCnt.TitleFile(s)
11830정성태2/26/20191292오류 유형: 522. 이벤트 로그 - Error opening event log file State. Log will not be processed. Return code from OpenEventLog is 87.
11829정성태12/12/20191634개발 환경 구성: 430. 마이크로소프트의 CoreCLR 프로파일러 예제 빌드 방법 - 리눅스 환경 [1]
11828정성태9/24/20204130개발 환경 구성: 429. Component Services 관리자의 RuntimeBroker 설정이 2개 있는 경우 [2]
11827정성태2/26/20192074오류 유형: 521. Visual Studio - Could not start the 'rsync' command on the remote host, please install it using your system package manager.
11826정성태2/26/20191721오류 유형: 520. 우분투에 .NET Core SDK 설치 시 패키지 의존성 오류
11825정성태2/25/20194450개발 환경 구성: 428. Visual Studio 2019 - CMake를 이용한 리눅스 빌드 환경 설정 [1]
11824정성태2/25/20192315오류 유형: 519. The SNMP Service encountered an error while accessing the registry key SYSTEM\CurrentControlSet\Services\SNMP\Parameters\TrapConfiguration. [1]
11823정성태2/21/20191723오류 유형: 518. IIS 관리 콘솔이 뜨지 않는 문제
11822정성태2/20/20191514오류 유형: 517. docker에 설치한 MongoDB 서버로 연결이 안 되는 경우
11821정성태2/20/20191777오류 유형: 516. Visual Studio 2019 - This extension uses deprecated APIs and is at risk of not functioning in a future VS update. [1]
11820정성태2/20/20194573오류 유형: 515. 윈도우 10 1809 업데이트 후 "User Profiles Service" 1534 경고 발생
11819정성태2/20/20192325Windows: 158. 컴퓨터와 사용자의 SID(security identifier) 확인 방법
11818정성태2/20/20192538VS.NET IDE: 131. Visual Studio 2019 Preview의 닷넷 프로젝트 빌드가 20초 이상 걸리는 경우 [2]
11817정성태2/17/20191848오류 유형: 514. WinDbg Preview 실행 오류 - Error : DbgX.dll : WindowsDebugger.WindowsDebuggerException: Could not load dbgeng.dll
11816정성태2/17/20191933Windows: 157. 윈도우 스토어 앱(Microsoft Store App)을 명령행에서 직접 실행하는 방법
11815정성태2/14/20192191오류 유형: 513. Visual Studio 2019 - VSIX 설치 시 "The extension cannot be installed to this product due to prerequisites that cannot be resolved." 오류 발생
11814정성태2/12/20191551오류 유형: 512. VM(가상 머신)의 NT 서비스들이 자동 시작되지 않는 문제
11813정성태2/12/20191958.NET Framework: 809. C# - ("Save File Dialog" 등의) 대화 창에 확장 속성을 보이는 방법
11812정성태1/2/20201361오류 유형: 511. Windows Server 2003 VM 부팅 후 로그인 시점에 0xC0000005 BSOD 발생
11811정성태2/11/20192088오류 유형: 510. 서버 운영체제에 NVIDIA GeForce Experience 실행 시 wlanapi.dll 누락 문제
11810정성태2/11/20191477.NET Framework: 808. .NET Profiler - GAC 모듈에서 GAC 비-등록 모듈을 참조하는 경우의 문제
11809정성태2/11/20191833.NET Framework: 807. ClrMD를 이용해 메모리 덤프 파일로부터 특정 인스턴스를 참조하고 있는 소유자 확인
11808정성태2/8/20192425디버깅 기술: 123. windbg - 닷넷 응용 프로그램의 메모리 누수 분석
11807정성태1/29/20191996Windows: 156. 가상 디스크의 용량을 복구 파티션으로 인해 늘리지 못하는 경우 [3]
11806정성태1/29/20191675디버깅 기술: 122. windbg - 덤프 파일로부터 PID와 환경 변수 등의 정보를 구하는 방법
11805정성태1/28/20192640.NET Framework: 806. C# - int []와 object []의 차이로 이해하는 제네릭의 필요성 [4]파일 다운로드1
... 16  17  18  19  20  21  22  [23]  24  25  26  27  28  29  30  ...