성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] VT sequences to "CONOUT$" vs. STD_O...
[정성태] NetCoreDbg is a managed code debugg...
[정성태] Evaluating tail call elimination in...
[정성태] What’s new in System.Text.Json in ....
[정성태] What's new in .NET 9: Cryptography ...
[정성태] 아... 제시해 주신 "https://akrzemi1.wordp...
[정성태] 다시 질문을 정리할 필요가 있을 것 같습니다. 제가 본문에...
[이승준] 완전히 잘못 짚었습니다. 댓글 지우고 싶네요. 검색을 해보...
[정성태] 우선 답글 감사합니다. ^^ 그런데, 사실 저 예제는 (g...
[이승준] 수정이 안되어서... byteArray는 BYTE* 타입입니다...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>Synology NAS(DS216+II)에 docker 설치 후 .NET Core 2.1 응용 프로그램 실행하는 방법</h1> <p> 아쉽지만, .NET Core는 Synology NAS 버전의 리눅스는 지원하지 않습니다. 아마 누군가 포팅을 하면 되겠지만 ^^ 아직 그렇게까지는 작업이 안 된 것 같습니다. 대신 Synology NAS에서도 docker가 설치되기 때문에 docker 위에서 .NET Core 응용 프로그램을 실행하는 것은 가능합니다. 이에 대해서는 다음의 글에서 소개하고 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > How to install and use Docker on Synology ; <a target='tab' href='https://blog.pavelsklenar.com/how-to-install-and-use-docker-on-synology/'>https://blog.pavelsklenar.com/how-to-install-and-use-docker-on-synology/</a> How to deploy asp.net core 2.0 to synology NAS ; <a target='tab' href='https://www.mysharings.com/coderblog/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/</a> </pre> <br /> 어디 한번 ^^ 직접 해볼까요?<br /> <br /> 다행히, 제가 가진 "DS216+II"은 Intel CPU 계열로 docker를 지원하는 모델에 포함되므로 Synology Diskstation 관리 페이지의 "패키지 센터"에 보면 다음과 같이 "docker"가 올라와 있습니다.<br /> <br /> <img alt='netcore_on_docker_on_synologynas_1.png' src='/SysWebRes/bbs/netcore_on_docker_on_synologynas_1.png' /><br /> <br /> ipkg, opkg 등의 패키지 관리자가 아닌, 저렇게 Diskstation의 패키지 센터에서 지원해 주니 매우 쉽게 설치가 끝납니다. 물론 설치 후 Diskstation 관리 화면의 시작 메뉴에서 docker 아이콘을 선택해 GUI 화면으로 docker를 관리할 수도 있고 SSH 연결 콘솔에서 docker 명령을 이용해 관리하는 것도 가능합니다.<br /> <br /> 자, 그럼 이제 docker에 올릴 .NET Core 2.1 응용 프로그램을 담은 이미지만 준비하면 되겠군요. ^^ 테스트를 위해 간단하게 .NET Core Console 응용 프로그램만을 docker 이미지로 만든 것을,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > .NET Core 콘솔 응용 프로그램을 배포(publish) 시 docker image 자동 생성 ; <a target='tab' href='http://www.sysnet.pe.kr/2/0/11708'>http://www.sysnet.pe.kr/2/0/11708</a> </pre> <br /> 사용해 보겠습니다. 위의 글에 따라 실습하면 로컬 docker에 netcore_app 이미지가 생겼을 것입니다. 그럼 이것을 파일로 저장하고,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > C:\> docker save -o c:\temp\netcore_app.img netcore_app </pre> <br /> NAS 디스크에 복사합니다. Synology에 docker가 설치되면 기본적으로 \docker 디렉터리가 하나 생성되므로 다음과 같이 네트워크 복사를 할 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > C:\> robocopy c:\temp \\...[NAS 주소]...\docker netcore_app.img </pre> <br /> 마지막으로 Diskstation의 관리 화면에서 docker 프로그램을 이용해 netcore_app.img를 로드할 수 있지만, 여기서는 SSH 연결로 NAS 측 docker에서 <a target='tab' href='https://docs.docker.com/engine/reference/commandline/image_load/'>docker load</a>로 다음과 같이 직접 실행해 봅니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > ~# <span style='color: blue; font-weight: bold'>docker load -i netcore_app.img</span> 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 ~# <span style='color: blue; font-weight: bold'>docker images</span> REPOSITORY TAG IMAGE ID CREATED SIZE netcore_app latest 205ea304ca0b 8 minutes ago 180MB ~# <span style='color: blue; font-weight: bold'>docker run --rm -it netcore_app</span> Hello World! </pre> <br /> 출력 결과가 잘 나오는군요. ^^<br /> <br /> <hr style='width: 50%' /><br /> <br /> 콘솔 프로그램을 배포해 봤으니, 이제 ASP.NET Core 웹 애플리케이션도 배포해 보겠습니다. 처음부터 ASP.NET Coer 웹 응용 프로그램의 프로젝트를 생성 시 "Enable Docker Support"를 지정해 docker 이미지를 만드는 것도 가능하지만 그 옵션을 끈 프로젝트에 대해서도 다음의 글에 설명한 것에 따라,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > .NET Core 콘솔 응용 프로그램을 배포(publish) 시 docker image 자동 생성 ; <a target='tab' href='http://www.sysnet.pe.kr/2/0/11708'>http://www.sysnet.pe.kr/2/0/11708</a> </pre> <br /> Dockerfile의 내용을 다음과 같이 채워 docker 이미지를 만들 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > # .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"] </pre> <br /> 어떤 방식으로든 docker 이미지를 만들었으면 역시 마찬가지로 내보내기 한 다음,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > C:\> docker save -o c:\temp\netcore_web.img netcore_web </pre> <br /> NAS 디스크에 복사하고,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > C:\> robocopy c:\temp \\...[NAS 주소]...\docker netcore_web.img </pre> <br /> SSH 콘솔이든,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > ~# docker load -i netcore_app.img </pre> <br /> Diskstation의 docker 관리 화면이든 이용해서 이미지를 로드해 실행하면 됩니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > docker run --rm -it -d -p 8080:7500 --name myweb netcore_web </pre> <br /> 일단 실행이 되면 "docker ps -a"를 이용해 실행 중인 container를 확인하거나 역시 Diskstation의 docker 관리 화면을 통해 다음과 같이 제어할 수 있습니다.<br /> <br /> <img onclick='toggle_img(this)' class='imgView' alt='netcore_on_docker_on_synologynas_2.png' src='/SysWebRes/bbs/netcore_on_docker_on_synologynas_2.png' /><br /> <br /> 당연히, NAS의 주소를 이용해 웹 브라우저로 접근하면,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > http://...NAS 주소...:8080/ </pre> <br /> ASP.NET Core 웹 응용 프로그램의 응답을 받을 수 있습니다.<br /> <br /> <hr style='width: 50%' /><br /> <br /> 참고로, docker load로 동일한 이름의 이미지를 로드하는 경우,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > ~# <span style='color: blue; font-weight: bold'>docker load -i netcore_web.img</span> 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 </pre> <br /> docker는 자동으로 기존 이미지 파일에 대해 ID 값 변경을 한 후 이름을 "<none>"으로 바꿔 버립니다. 따라서 docker load를 하기 전 기존 이미지를 docker rmi 명령어로 지우거나, 아니면 "<none>" 이름의 이미지를 때때로 "docker image prune -f" 명령어로 지우는 것이 좋습니다.<br /> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
2048
(왼쪽의 숫자를 입력해야 합니다.)