Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 3개 있습니다.)
(시리즈 글이 8개 있습니다.)
개발 환경 구성: 399. Synology NAS(DS216+II)에 gcc 컴파일러 설치
; https://www.sysnet.pe.kr/2/0/11705

개발 환경 구성: 403. Synology NAS(DS216+II)에 docker 설치 후 .NET Core 2.1 응용 프로그램 실행하는 방법
; https://www.sysnet.pe.kr/2/0/11713

개발 환경 구성: 404. (opkg가 설치된) Synology NAS(DS216+II)에 cmake 설치
; https://www.sysnet.pe.kr/2/0/11718

Linux: 3. Synology NAS(DS216+II)에서 FTDI 장치를 C/C++로 제어
; https://www.sysnet.pe.kr/2/0/11733

Linux: 4. Synology NAS(DS216+II)에 FTDI 장치 연결 후 C#(.NET Core)으로 DTR 제어
; https://www.sysnet.pe.kr/2/0/11734

사물인터넷: 51. Synology NAS(DS216+II)를 이용한 원격 컴퓨터의 전원 스위치 제어
; https://www.sysnet.pe.kr/2/0/11740

개발 환경 구성: 446. Synology NAS를 Windows 10에서 iSCSI로 연결하는 방법
; https://www.sysnet.pe.kr/2/0/11967

개발 환경 구성: 720. Synology NAS - docker 원격 제어를 위한 TCP 바인딩 추가
; https://www.sysnet.pe.kr/2/0/13712




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

비밀번호

댓글 작성자
 




... [106]  107  108  109  110  111  112  113  114  115  116  117  118  119  120  ...
NoWriterDateCnt.TitleFile(s)
11272정성태8/21/201724725VS.NET IDE: 120. 비주얼 스튜디오 2017 버전 15.3.1 - C# 7.1 공개 [2]
11271정성태8/19/201719155VS.NET IDE: 119. Visual Studio 2017에서 .NET Core 2.0 프로젝트 환경 구성하는 방법
11270정성태8/17/201730588.NET Framework: 673. C#에서 enum을 boxing 없이 int로 변환하기 [2]
11269정성태8/17/201721387디버깅 기술: 93. windbg - 풀 덤프에서 .NET 스레드의 상태를 알아내는 방법
11268정성태8/14/201720971디버깅 기술: 92. windbg - C# Monitor Lock을 획득하고 있는 스레드 찾는 방법
11267정성태8/10/201725071.NET Framework: 672. 모노 개발 환경
11266정성태8/10/201724848.NET Framework: 671. C# 6.0 이상의 소스 코드를 Visual Studio 설치 없이 명령행에서 컴파일하는 방법
11265정성태8/10/201753111기타: 66. 도서: 시작하세요! C# 7.1 프로그래밍: 기본 문법부터 실전 예제까지 [11]
11264정성태8/9/201723978오류 유형: 414. UWP app을 signtool.exe로 서명 시 0x8007000b 오류 발생
11263정성태8/9/201719452오류 유형: 413. The C# project "..." is targeting ".NETFramework, Version=v4.0", which is not installed on this machine. [3]
11262정성태8/5/201718190오류 유형: 412. windbg - SOS does not support the current target architecture. [3]
11261정성태8/4/201720759디버깅 기술: 91. windbg - 풀 덤프 파일로부터 강력한 이름의 어셈블리 추출 후 사용하는 방법
11260정성태8/3/201718855.NET Framework: 670. C# - 실행 파일로부터 공개키를 추출하는 방법
11259정성태8/2/201718124.NET Framework: 669. 지연 서명된 어셈블리를 sn.exe -Vr 등록 없이 사용하는 방법
11258정성태8/1/201718884.NET Framework: 668. 지연 서명된 DLL과 서명된 DLL의 차이점파일 다운로드1
11257정성태7/31/201719111.NET Framework: 667. bypassTrustedAppStrongNames 옵션 설명파일 다운로드1
11256정성태7/25/201720559디버깅 기술: 90. windbg의 lm 명령으로 보이지 않는 .NET 4.0 ClassLibrary를 명시적으로 로드하는 방법 [1]
11255정성태7/18/201723153디버깅 기술: 89. Win32 Debug CRT Heap Internals의 0xBAADF00D 표시 재현 [1]파일 다운로드3
11254정성태7/17/201719467개발 환경 구성: 322. "Visual Studio Emulator for Android" 에뮬레이터를 "Android Studio"와 함께 쓰는 방법
11253정성태7/17/201719711Math: 21. "Coding the Matrix" 문제 2.5.1 풀이 [1]파일 다운로드1
11252정성태7/13/201718409오류 유형: 411. RTVS 또는 PTVS 실행 시 Could not load type 'Microsoft.VisualStudio.InteractiveWindow.Shell.IVsInteractiveWindowFactory2'
11251정성태7/13/201717049디버깅 기술: 88. windbg 분석 - webengine4.dll의 MgdExplicitFlush에서 발생한 System.AccessViolationException의 crash 문제 (2)
11250정성태7/13/201720655디버깅 기술: 87. windbg 분석 - webengine4.dll의 MgdExplicitFlush에서 발생한 System.AccessViolationException의 crash 문제 [1]
11249정성태7/12/201718445오류 유형: 410. LoadLibrary("[...].dll") failed - The specified procedure could not be found.
11248정성태7/12/201724887오류 유형: 409. pip install pefile - 'cp949' codec can't decode byte 0xe2 in position 208687: illegal multibyte sequence
11247정성태7/12/201719208오류 유형: 408. SqlConnection 객체 생성 시 무한 대기 문제파일 다운로드1
... [106]  107  108  109  110  111  112  113  114  115  116  117  118  119  120  ...