Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 4개 있습니다.)

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 at outlook.com

비밀번호

댓글 작성자
 




... 76  77  78  79  80  81  82  83  [84]  85  86  87  88  89  90  ...
NoWriterDateCnt.TitleFile(s)
11543정성태6/9/201813952.NET Framework: 764. C# 7.2 - private protected 접근자 추가파일 다운로드1
11542정성태6/9/201850874개발 환경 구성: 381. Azure Web App 확장 예제 - Remove Custom Headers
11541정성태6/9/201811743개발 환경 구성: 380. Azure Web App 확장 배포 방법 [1]
11540정성태6/9/201813105개발 환경 구성: 379. Azure Web App 확장 예제 제작 [2]
11539정성태6/8/201812270.NET Framework: 763. .NET Core 2.1 - Tiered Compilation 도입파일 다운로드1
11538정성태6/8/201811452.NET Framework: 762. .NET Core 2.1 - 확장 도구(Tools) 관리
11537정성태6/8/201815354.NET Framework: 761. C# - SmtpClient로 SMTP + SSL/TLS 서버를 이용하는 방법 [5]
11536정성태6/7/201814326.NET Framework: 760. Microsoft Build 2018 - The future of C# 동영상 내용 정리 [1]파일 다운로드1
11535정성태6/7/201815305.NET Framework: 759. C# - System.Span<T> 성능 [1]
11534정성태6/6/201820832.NET Framework: 758. C# 7.2 - Span<T> [6]
11533정성태6/5/201823342.NET Framework: 757. 포인터 형 매개 변수를 갖는 C++ DLL의 함수를 C#에서 호출하는 방법파일 다운로드1
11532정성태6/5/201814514.NET Framework: 756. JSON의 escape sequence 문자 처리 방식
11531정성태6/4/201818480오류 유형: 468. JSON.parse가 허용하지 않는 문자 [9]
11530정성태5/31/201817952.NET Framework: 755. C# 7.2 - 스택에만 생성할 수 있는 값 타입 지원 - "ref struct" [2]파일 다운로드1
11529정성태5/23/201815235.NET Framework: 754. 닷넷의 관리 포인터(Managed Pointer)와 System.TypedReference [6]파일 다운로드1
11528정성태5/17/201815219.NET Framework: 753. C# 7.2 - 3항 연산자에 ref 지원(conditional ref operator) [1]
11527정성태5/17/201813281오류 유형: 467. RDP 로그인 에러 - This could be due to CredSSP encryption oracle remediation.
11526정성태5/16/201813517.NET Framework: 752. C# 7.2 - 메서드의 반환값 및 로컬 변수에 ref readonly 기능 추가파일 다운로드1
11525정성태5/16/201816612.NET Framework: 751. C# 7.2 - 메서드의 매개 변수에 in 변경자 추가 [3]파일 다운로드1
11524정성태5/15/201815848.NET Framework: 750. C# 7.2 - readonly 구조체 [5]파일 다운로드1
11523정성태5/15/201814648.NET Framework: 749. C# - 값 형식의 readonly 인스턴스에 대한 메서드 호출 시 defensive copy 발생 [1]파일 다운로드1
11522정성태5/15/201812217개발 환경 구성: 378. Azure - VM 진단 설정 화면의 "This subscription is not registered with the Microsoft.Insights resource provider."
11521정성태5/15/201811578개발 환경 구성: 377. Azure - 원하는 성능 데이터로 모니터링 대시보드 구성
11520정성태5/12/201812385.NET Framework: 748. C# 7.1 - 참조 어셈블리(Ref Assemblies)
11519정성태5/12/201813724개발 환경 구성: 376. ASP.NET Web Application 프로젝트의 FileSystem 배포(Publish) 시 Before/After Task 설정 방법 [1]
11518정성태5/10/201811984.NET Framework: 747. C# 7.0에서도 부분적으로 가능해진 "타입 추론을 통한 튜플의 변수명 자동 지정"
... 76  77  78  79  80  81  82  83  [84]  85  86  87  88  89  90  ...