푸터 콘텐츠로 바로가기
Iron Academy Logo
C# 배우기
C# 배우기

다른 카테고리

Linux에서 Docker의 SQL Server

[[academy-video-youtube({"vid": "-H5mMexO4_I", "start_time": "0", "title": "SQL Server in Docker on Linux", "creator": "Tim Corey", "length": "18m 20s"})]]

개발 기계에 데이터베이스 엔진을 직접 설치하는 것은 장기적인 문제를 만들 수 있는 일반적인 지름길입니다. 데이터베이스 서버는 전용 하드웨어를 위해 설계되었습니다. 이는 상당한 메모리와 CPU를 사용하고, 여러 버전을 설치하면서 점점 누적되는 구성 부채와 다른 릴리스에 대한 테스트가 필요할 때 업그레이드를 복잡하게 만듭니다. Docker 컨테이너는 각 데이터베이스 인스턴스를 가볍고 폐기 가능한 환경에 격리함으로써 이를 모두 해결합니다.

그의 동영상 "Linux에서 Docker의 SQL Server"에서 Tim Corey는 단일 Docker 명령을 사용하여 Linux에서 Microsoft SQL Server 인스턴스를 띄우고, VS Code에서 연결하고, 그에 대해 쿼리를 실행하는 방법을 시연합니다. 그는 또한 여러 SQL Server 버전을 병행 실행하는 방법과 작업이 완료되면 삭제하는 방법을 보여줍니다. Linux에서 C# 시리즈를 따르고 있거나 개발을 위해 SQL Server를 실행하는 빠르고 반복 가능한 방법을 원한다면 이 시연이 전체 설정을 다룹니다.

Docker 대신 로컬 설치를 선택한 이유

[0:00 - 0:57] Tim은 네이티브 데이터베이스 설치에 반대하는 주장을 시작합니다. 핵심 주장: 데이터베이스 엔진은 전용 서버를 위해 설계되었습니다. 이를 로컬에 설치하면 사용 중이지 않더라도 자원을 소비하며, 같은 상자에 여러 버전(SQL 2019, 2022, 2025)을 관리하면 빠르게 유지보수 부담으로 이어집니다.

Docker 컨테이너는 이 모델을 뒤집습니다. 각 데이터베이스는 자체 격리된 환경에서 실행됩니다. 필요할 때 시작하고 필요하지 않을 때 중지합니다. 삭제하고 남은 구성 없이 새로 시작하세요. 개발 및 테스트 용도로, 이 접근 방식은 설치가 더 빠르고 유지보수하기 깔끔하며 전통적인 설치보다 유연합니다.

Portainer 재시작 정책 수정

[0:57 - 2:17] SQL Server를 시작하기에 앞서 Tim은 Portainer(이전 에피소드에서 Docker 컨테이너를 위한 GUI 관리 도구)가 실행되지 않는 것을 알아차립니다. 재시작 정책이 설정되지 않아서 기계가 마지막으로 종료될 때 종료되었습니다.

수정은 두 가지 명령입니다:

// Set Portainer to restart automatically (unless manually stopped)
docker update --restart unless-stopped portainer

// Start it now
docker start portainer
// Set Portainer to restart automatically (unless manually stopped)
docker update --restart unless-stopped portainer

// Start it now
docker start portainer

unless-stopped 정책은 Portainer가 재부팅 시 자동으로 재시작되지만 명시적으로 중지하면 그대로 중단됨을 의미합니다. 시작 후, Portainer는 브라우저에서 localhost:9000에 접근할 수 있습니다. Tim은 항상 실행을 원하는 관리 도구에는 이 정책을 권장하지만, 데이터베이스 컨테이너에는 수동 시작을 권장합니다.

SQL Server를 위한 Docker Run 명령

[2:17 - 6:09] SQL Server 설정 전체는 한 명령으로 요약됩니다. Tim은 이전에 측면 여정을 다룬 동영상에서 설명된 LocalSend를 사용하여 이를 Windows 기계에서 전송한 후 부분적으로 해체합니다:

// Single command to launch SQL Server 2025 in Docker
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Test12345" -p 1433:1433 --name sql2025 mcr.microsoft.com/mssql/server:2025-latest
// Single command to launch SQL Server 2025 in Docker
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Test12345" -p 1433:1433 --name sql2025 mcr.microsoft.com/mssql/server:2025-latest

각 플래그는 특정한 목적을 가집니다. -e "ACCEPT_EULA=Y" 플래그는 Microsoft의 라이선스 계약에 동의합니다. -e "SA_PASSWORD=Test12345" 플래그는 시스템 관리자의 비밀번호를 평문으로 설정하며, Tim은 이것이 로컬 개발에는 괜찮지만 프로덕션 용도로는 절대 사용하면 안 된다고 인식합니다. -p 1433:1433 플래그는 컨테이너의 내부 SQL Server 포트를 호스트 머신의 동일한 포트에 매핑합니다. --name sql2025 플래그는 컨테이너에 사람이 읽을 수 있는 라벨을 부여합니다. 이미지 태그 2025-latest는 Microsoft의 컨테이너 레지스트리에서 가장 최근의 SQL Server 2025 빌드를 가져옵니다.

명령을 실행한 후, Docker는 이미지 레이어를 다운로드하고, 추출하며, 서버를 시작합니다. 전체 프로세스는 몇 분 정도 소요되며 대부분은 초기 다운로드입니다.

Portainer에서 확인하기

[6:09 - 7:04] 다시 Portainer로 돌아와서, 새로운 SQL Server 컨테이너가 컨테이너 목록에 나타나며 상태는 실행 중으로 표시됩니다. Tim은 여기에 의도적인 선택을 합니다: 데이터 지속성을 위한 볼륨 마운트가 없습니다. 컨테이너가 삭제되면, 내부의 데이터베이스도 사라집니다.

이는 의도적으로 개발 설정에 맞춰진 것입니다. 새로 시작하면 누적된 테스트 데이터가 없고, 이전 실험에서 나온 스키마 변화가 없으며, 남아 있는 상태로 인해 발생하는 "내 기계에서는 작동하는데" 문제가 없습니다. 컨테이너를 삭제하기 전에 데이터베이스를 보존해야 하는 경우, 먼저 export 할 수 있지만, 깨끗한 상태로 시작하는 접근이 로컬 작업에 선호되는 워크플로입니다.

VS Code에서 연결하기

[7:04 - 8:50] 데이터베이스를 관리하기 위해 Tim은 Microsoft의 VS Code용 SQL Server 확장을 설치합니다. 설치 후, 사이드바에 새 SQL Server 패널이 나타나며, 여기에서 연결을 추가할 수 있습니다.

연결 매개변수는 최소화되어 있습니다. 서버 이름은 . (점)이며, 이는 localhost를 의미합니다. 컨테이너가 포트 1433(SQL Server 기본값)을 매핑하므로 포트 번호를 지정할 필요가 없습니다. 사용자 이름은 sa이고, 비밀번호는 Docker 명령어에서 사용된 것이며, 기본 데이터베이스는 master입니다. 서버 인증서를 신뢰하세요.

연결이 완료되면 VS Code는 연결 옆에 Docker 아이콘을 표시해 컨테이너식 환경을 감지했음을 확인합니다. 시스템 데이터베이스 (master, model, msdb, tempdb)는 트리 내에서 사용 준비가 되어 나타납니다.

데이터베이스 생성 및 쿼리 실행하기

[8:50 - 12:45] 연결이 설정되면, Tim은 VS Code 사이드바에서 PeopleDB이라는 새로운 데이터베이스를 만듭니다. 그 안에서 그는 비주얼 디자이너를 사용하여 자동 증가하는 Id 열, FirstName 열, LastName 열(둘 다 NVARCHAR(50), not null)을 추가하고 People 테이블을 만듭니다.

그리고 새 쿼리 창을 열어 테스트 데이터를 삽입합니다:

INSERT INTO dbo.People (FirstName, LastName)
VALUES
    ('Tim', 'Corey'),
    ('Sue', 'Storm'),
    ('Dave', 'Corey')
INSERT INTO dbo.People (FirstName, LastName)
VALUES
    ('Tim', 'Corey'),
    ('Sue', 'Storm'),
    ('Dave', 'Corey')

SELECT를 실행하면 행이 올바르게 위치해 있음을 확인합니다:

SELECT * FROM dbo.People
-- Returns: Tim Corey, Sue Storm, Dave Corey

SELECT * FROM dbo.People WHERE LastName = 'Corey'
-- Returns: Tim Corey, Dave Corey
SELECT * FROM dbo.People
-- Returns: Tim Corey, Sue Storm, Dave Corey

SELECT * FROM dbo.People WHERE LastName = 'Corey'
-- Returns: Tim Corey, Dave Corey

전체 과정 (데이터베이스 생성, 테이블 디자인, 데이터 삽입, 필터 사용 쿼리)은 몇 분만에 완료됩니다. 모든 것은 호스트 머신에 SQL Server를 설치하지 않고 Docker 컨테이너 내부에서 실행되며, VS Code를 통해 관리됩니다.

중지, 시작 및 리소스 관리

[12:45 - 14:20] SQL Server와의 작업이 완료되었을 때, 중지는 Portainer에서 클릭 한 번이거나 터미널에서 한 명령입니다:

docker stop sql2025
docker stop sql2025

중지된 컨테이너는 모든 CPU 및 메모리 리소스를 해제합니다. 계속 소모하는 것은 이미지와 컨테이너 파일에 대한 디스크 공간뿐이며 이는 네이티브 SQL Server 설치와 비교해도(보통 덜) 유사합니다.

Tim은 이것이 전통적인 설치에 비해 핵심 이점이라고 지적합니다. 로컬에 설치된 SQL Server는 Windows 또는 Linux 서비스로 작동하며 항상 자원을 소비합니다. Docker 컨테이너는 사용자가 시작하기를 선택했을 때만 자원을 사용합니다.

여러 버전 병행 실행하기

[14:20 - 17:17] 데이터베이스 개발의 가장 실용적인 기능 중 하나는 Docker를 사용하여 여러 버전을 동시에 실행할 수 있다는 것입니다. Tim은 기존 2025 컨테이너와 함께 SQL Server 2022를 실행하여 이를 시연합니다:

// SQL Server 2022 on a different port
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Test12345" -p 2022:1433 --name sql2022 mcr.microsoft.com/mssql/server:2022-latest
// SQL Server 2022 on a different port
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Test12345" -p 2022:1433 --name sql2022 mcr.microsoft.com/mssql/server:2022-latest

주요 차이점은 포트 매핑입니다: -p 2022:1433는 컨테이너의 내부 포트 1433을 호스트의 포트 2022에 매핑합니다. 이는 이미 1433을 사용 중인 2025 인스턴스와의 포트 충돌을 피합니다. 다운로드가 완료되면, 두 컨테이너 모두 Portainer에 나타나고 동시에 실행됩니다.

클라이언트가 SQL Server 2022를 프로덕션에서 실행하지만 팀이 2025에 대해 개발하는 경우에 유용합니다. 버전 간 전환은 재설치가 필요하지 않으며, 단지 올바른 컨테이너를 시작하면 됩니다. 모든 사용 가능한 SQL Server 이미지 (2017, 2019, 2022, 2025)가 mcr.microsoft.com에 나열되어 있으며, 동일한 접근 방식이 MySQL, PostgreSQL, MongoDB, Cosmos DB에 대해서도 작용합니다.

마무리: 완전한 데이터베이스 환경 구축을 위한 명령 하나

[17:17 - 17:47] 이 설명은 Docker 명령 하나가 구성 마법사, 서비스 관리 및 버전 충돌의 번거로운 설치 과정을 대체하는 과정을 보여줍니다. 컨테이너는 몇 분 내에 시작되고 필요할 때만 실행되며 호스트 시스템에 흔적을 남기지 않고 삭제할 수 있습니다.

다양한 데이터베이스 요구가 있는 여러 프로젝트에서 작업하는 개발자를 위해 이 패턴은 깔끔하게 확장됩니다. 각 프로젝트는 자신의 컨테이너, 자신의 버전, 자신의 격리된 데이터를 갖습니다.

결론

[17:47 - 18:20] 요약하자면: Linux에서의 SQL Server는 Docker에서 단일 docker run 명령으로 실행됩니다. VS Code에서 SQL Server 확장을 사용하여 연결하고, 사이드바를 통해 데이터베이스와 테이블을 생성하고, 다른 SQL Server 인스턴스와 마찬가지로 쿼리를 작성합니다. 작업이 완료되면 컨테이너를 중지하고 리소스를 회수하세요.

데이터베이스 관리를 위해 Docker와 쿼리를 위해 VS Code를 결합함으로써 Linux에서 네이티브 데이터베이스 설치 없이 완전한 SQL 개발 워크플로를 제공합니다.

예제 팁: 특정 SQL Server 버전으로 테스트해야 할 경우, 모든 사용 가능한 태그를 위해 mcr.microsoft.com를 확인하십시오. 2017, 2019, 2022 및 2025를 동시에 실행하며 각 컨테이너에 다른 호스트 포트(1433, 2019, 2022, 2025)를 할당할 수 있습니다. Portainer와 docker ps 출력이 읽기 쉽게 유지되도록 설명적으로 이름을 설정하세요(sql2019, sql2022).

전체 동영상을 그의 YouTube 채널에서 시청하고, Linux에서 C#을 사용한 데이터베이스 개발에 관한 더 많은 인사이트를 얻으세요.

Hero Worlddot related to Linux에서 Docker의 SQL Server
Hero Affiliate related to Linux에서 Docker의 SQL Server

사랑하는 것을 공유하여 더 많은 수익을 얻으세요

당신은 .NET, C#, Java, Python, 또는 Node.js를 다루는 개발자를 위한 콘텐츠를 만드나요? 당신의 전문성을 추가 수입으로 전환하세요!

아이언 서포트 팀

저희는 주 5일, 24시간 온라인으로 운영합니다.
채팅
이메일
전화해