내용 보기

작성자

관리자 (IP : 172.17.0.1)

날짜

2020-07-13 02:28

제목

[Docker] NAS에서 ASP.NET Core + MSSQL 돌리기 - 리눅스 도커 이용


NAS서버에서 ASP.NET Core 웹 서버와 MSSQL을 연동해서 돌리는 방법 입니다.

ASP.NET Core는 Kestrel서버로 돌려서 셀프 호스팅으로 사용하고
제목과 같이 ASP.NET Core 웹어플리케이션 자체 이미지를 사용하지 않고 리눅스 도커 안에서 실행시킵니다.


  • 사전 준비
  1. NAS서버
  2. NAS에 도커 설치
  3. 리눅스 도커 이미지 [dotent core가 포함된 리눅스]


  • 리눅스 컨테이너 설정

먼저 리눅스  도커 이미지를 받습니다.

centos8 이미지는 카카오톡 : 닷넷 개발자 모임 - bluepope님이 만드신걸 사용했습니다.

이미지를 컨테이너에 추가하고 컨테이너 설정을 합니다.
[포트설정]
포트 설정은 ASP.NET Core에서 사용되는 포트로 설정하면 됩니다.

[볼륨]
볼륨은 NAS내 로컬 경로와 컨테이너 가상화에서 사용할 경로를 맞춰주면 됩니다.


  • MSSQL 컨테이너 설정

MSSQL 서버 이미지를 받습니다.


이미지를 받고 컨테이너에 추가해 다음과 같이 설정을 합니다.


[포트설정]
MSSQL기본 포트인 1433으로 설정합니다. (다른 포트로 변경해도 됩니다.)


[볼륨]
볼륨설정을 하지 않으면 컨테이너를 지울때 해당 SQL의 DB데이터도 같이 삭제 됩니다.
데이터를 유지 하기 위해서 볼륨을 다음과 같이 설정해 줍니다.

[환경 변수]
SQL의 사용 동의 및 SA계정의 패스워드 설정을 환경 변수를 통해 설정합니다.


  • MSSQL 링크 설정

ASP.NET Core 웹서버에서 MSSQL의 접속설정은 도커 링크를 통해 설정해 줍니다.
MSSQL 포트를 별도 외부로 포워딩 하지 않고 내부 링크를 통해 접근할 수 있도록 설정합니다.

centos8 컨테이너의 편집화면에서 링크 부분을 다음과 같이 설정해 줍니다.

위 처럼 링크설정을 하게 되면 centos8 컨테이너 실행시 MSSQL 컨테이너도 같이 따라서 실행 되어집니다.

ASP.NET Core에서 DB접속 부분은 다음과 같이 사용할 수 있습니다.

{
  "ConnectionStrings": {
    "MsSql_Linux_Docker": "Server=링크별칭;uid=sa;pwd=패스워드;database=데이터베이스명;Pooling=true;Min Pool Size=20;Max Pool Size=100;Connection Timeout=90"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*"
}
cs

참고로 UseKestrel옵션으로 ListenAnyIP포트로 도커에서 설정한 포트로 설정해주어야 해당 포트로 바인딩 되서 호스팅 되도록 사용됩니다.

Program.cs

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
    .ConfigureWebHostDefaults(webBuilder =>
    {
        webBuilder.UseStartup<Startup>();
        webBuilder.UseKestrel(option =>
        {
            option.ListenAnyIP(5008);
        });
    });
cs


출처1

출처2