SQL Server Linux 컨테이너 배포 및 연결
적용 대상: SQL Server - Linux
이 문서에서는 SQL Server Linux 컨테이너 배포 및 연결 방법을 설명합니다.
기타 배포 시나리오는 다음을 참조하세요.
참고 항목
이 문서에서는 특히 mssql-server-linux
이미지 사용에 중점을 둡니다. Windows 컨테이너의 SQL Server 배포는 지원되지 않습니다. 개발 및 테스트의 경우 Windows 컨테이너에서 SQL Server를 사용할 자체 사용자 지정 컨테이너 이미지를 만들 수 있습니다. 샘플 파일은 GitHub에서 사용할 수 있습니다. 샘플 파일은 참조 전용입니다.
중요
프로덕션 사용 사례를 위해 SQL Server 컨테이너를 실행하기로 선택하기 전에 SQL Server 컨테이너에 대한 지원 정책을 검토하여 지원되는 구성에서 실행 중인지 확인하세요.
6분 분량의 다음 동영상은 컨테이너에서 SQL Server를 실행하는 방법을 소개합니다.
컨테이너 이미지를 끌어와 실행하기
SQL Server용 Docker 컨테이너 이미지를 끌어오고 실행하려면 다음 빠른 시작의 필수 조건 및 단계를 따르세요.
- Docker에서 SQL Server 2017 컨테이너 이미지 실행
- Docker에서 SQL Server 2019 컨테이너 이미지 실행
- Docker에서 SQL Server 2022 컨테이너 이미지 실행
이 구성 문서의 다음 섹션에서는 추가 사용 시나리오를 제공합니다.
연결 및 쿼리
컨테이너 외부나 컨테이너 내에서 컨테이너의 SQL Server를 연결하고 쿼리할 수 있습니다. 다음 섹션에서는 두 시나리오를 모두 설명합니다.
컨테이너 외부 도구
SQL 연결을 지원하는 모든 외부 Linux, Windows 또는 macOS 도구에서 컨테이너 호스트의 SQL Server 인스턴스에 연결할 수 있습니다. 몇 가지 일반적인 도구는 다음과 같습니다.
다음 예제에서는 sqlcmd를 사용하여 컨테이너에서 실행되는 SQL Server에 연결합니다. 연결 문자열의 IP 주소는 컨테이너를 실행하는 호스트 머신의 IP 주소입니다.
참고 항목
최신 버전의 sqlcmd (mssql-tools18)는 기본적으로 안전합니다. 버전 18 이상을 사용하는 경우 sqlcmd에 No
옵션을 추가하여 암호화가 필수가 아니라 선택 사항임을 지정해야 합니다.
sqlcmd -S 10.3.2.4 -U SA -P '<YourPassword>'
sqlcmd -S 10.3.2.4 -U SA -P "<YourPassword>"
sqlcmd -S 10.3.2.4 -U SA -P "<YourPassword>"
기본값 1433
이 아닌 호스트 포트를 매핑한 경우 해당 포트를 연결 문자열에 추가합니다. 예를 들어 docker run
명령에 -p 1400:1433
을 지정한 경우 포트 1400을 명시적으로 지정하여 연결합니다.
sqlcmd -S 10.3.2.4,1400 -U SA -P '<YourPassword>'
sqlcmd -S 10.3.2.4,1400 -U SA -P "<YourPassword>"
sqlcmd -S 10.3.2.4,1400 -U SA -P "<YourPassword>"
컨테이너 내부 도구
SQL Server 2017(14.x)부터 SQL Server 명령줄 도구가 컨테이너 이미지에 포함되었습니다. 대화형 명령 프롬프트를 사용하여 이미지에 연결하는 경우 로컬에서 도구를 실행할 수 있습니다.
docker exec -it
명령을 사용하여 실행 중인 컨테이너 내에서 대화형 bash 셸을 시작합니다. 다음 예제에서e69e056c702d
는 컨테이너 ID입니다.docker exec -it e69e056c702d "bash"
팁
항상 전체 컨테이너 ID를 지정할 필요는 없습니다. 고유하게 식별하는 데 충분한 문자만 지정하면 됩니다. 따라서 이 예제에서는 전체 ID가 아닌
e6
또는e69
만 사용해도 충분할 수 있습니다. 컨테이너 ID를 확인하려면docker ps -a
명령을 실행합니다.컨테이너 내부에 들어가면 전체 경로를 사용하여 sqlcmd와 로컬로 연결합니다.
/opt/mssql-tools18/bin/sqlcmd -S localhost -U SA -P '<YourPassword>'
참고 항목
최신 버전의 sqlcmd는 기본적으로 안전합니다. 연결 암호화에 대한 자세한 내용은 Windows용 sqlcmd 유틸리티 및 Linux와 macOS용 sqlcmd를 사용하여 연결을 참조합니다. 연결이 성공하지 못하면 sqlcmd에
-No
옵션을 추가하여 암호화가 필수가 아니라 선택 사항임을 지정할 수 있습니다.sqlcmd를 마쳤으면
exit
를 입력합니다.대화형 명령 프롬프트를 마쳤으면
exit
를 입력합니다. 컨테이너는 대화형 bash 셸을 종료한 후에도 계속 실행됩니다.
컨테이너 버전 확인
실행 중인 컨테이너의 SQL Server 버전을 확인하려면 다음 명령을 실행하여 버전을 표시합니다. <Container ID or name>
을 대상 컨테이너 ID 또는 이름으로 바꿉니다. <YourStrong!Passw0rd>
를 SA(시스템 관리자) 계정의 SQL Server 암호로 바꿉니다.
docker exec -it <Container ID or name> /opt/mssql-tools/bin/sqlcmd \
-S localhost -U SA -P '<YourStrong!Passw0rd>' \
-Q 'SELECT @@VERSION'
참고 항목
최신 버전의 sqlcmd는 기본적으로 안전합니다. 연결 암호화에 대한 자세한 내용은 Windows용 sqlcmd 유틸리티 및 Linux와 macOS용 sqlcmd를 사용하여 연결을 참조합니다. 연결이 성공하지 못하면 sqlcmd에 -No
옵션을 추가하여 암호화가 필수가 아니라 선택 사항임을 지정할 수 있습니다.
docker exec -it <Container ID or name> /opt/mssql-tools/bin/sqlcmd `
-S localhost -U SA -P "<YourStrong!Passw0rd>" `
-Q "SELECT @@VERSION"
참고 항목
최신 버전의 sqlcmd는 기본적으로 안전합니다. 연결 암호화에 대한 자세한 내용은 Windows용 sqlcmd 유틸리티 및 Linux와 macOS용 sqlcmd를 사용하여 연결을 참조합니다. 연결이 성공하지 못하면 sqlcmd에 -No
옵션을 추가하여 암호화가 필수가 아니라 선택 사항임을 지정할 수 있습니다.
docker exec -it <Container ID or name> /opt/mssql-tools/bin/sqlcmd ^
-S localhost -U SA -P "<YourStrong!Passw0rd>" ^
-Q "SELECT @@VERSION"
참고 항목
최신 버전의 sqlcmd는 기본적으로 안전합니다. 연결 암호화에 대한 자세한 내용은 Windows용 sqlcmd 유틸리티 및 Linux와 macOS용 sqlcmd를 사용하여 연결을 참조합니다. 연결이 성공하지 못하면 sqlcmd에 -No
옵션을 추가하여 암호화가 필수가 아니라 선택 사항임을 지정할 수 있습니다.
대상 컨테이너 이미지의 SQL Server 버전 및 빌드 번호를 확인할 수도 있습니다. 다음 명령은 mcr.microsoft.com/mssql/server:2022-latest
이미지의 SQL Server 버전 및 빌드 정보를 표시합니다. 이 작업을 위해 PAL_PROGRAM_INFO=1
환경 변수를 사용하여 새 컨테이너를 실행합니다. 생성된 컨테이너는 즉시 종료되고 docker rm
명령이 컨테이너를 제거합니다.
docker run -e PAL_PROGRAM_INFO=1 --name sqlver \
-ti mcr.microsoft.com/mssql/server:2022-latest && \
docker rm sqlver
docker run -e PAL_PROGRAM_INFO=1 --name sqlver `
-ti mcr.microsoft.com/mssql/server:2022-latest; `
docker rm sqlver
docker run -e PAL_PROGRAM_INFO=1 --name sqlver ^
-ti mcr.microsoft.com/mssql/server:2022-latest && ^
docker rm sqlver
위 명령은 다음 출력과 비슷한 버전 정보를 표시합니다.
sqlservr
Version 16.0.1000.6
Build ID d81e9b6de06534e649bd57dd609aa3050f5e380f361b7f8a80a80eeb71e7422c
Build Type release
Git Version 2aede92f
Built at Tue Nov 01 06:11:40 GMT 2022
PAL
Build ID 754097e8f0db68f559e1cbc9d46952ac9fd518b5da9f12964ef40fc9033720e3
Build Type release
Git Version d88e3e1130
Built at Tue Nov 01 06:08:02 GMT 2022
Packages
system.security mssql-16.0.1000.6_26_official-release
system.certificates mssql-16.0.1000.6_26_official-release
sqlagent 16.0.1000.6
system.wmi 10.0.17763.2061.202107231
system.netfx 4.7.0.0.202104262
system mssql-16.0.1000.6_26_official-release
system.common 10.0.17763.2061.202107231
sqlservr 16.0.1000.6
secforwarderxplat 16.0.1000.6
특정 SQL Server 컨테이너 이미지 실행
참고
- SQL Server 2019(15.x) CU3부터 Ubuntu 18.04가 지원됩니다.
- SQL Server 2019(15.x) CU10부터 Ubuntu 20.04가 지원됩니다.
- https://mcr.microsoft.com/v2/mssql/server/tags/list에서 mssql/server에 사용 가능한 모든 태그 목록을 검색할 수 있습니다.
최신 SQL Server 컨테이너 이미지를 사용하지 않으려는 시나리오도 있습니다. 특정 SQL Server 컨테이너 이미지를 실행하려면 다음 단계를 사용합니다.
사용하려는 릴리스의 Docker
tag
를 확인합니다. 사용 가능한 태그를 보려면 Microsoft 아티팩트 레지스트리를 참조하세요.태그를 사용하여 SQL Server 컨테이너 이미지를 끌어옵니다. 예를 들어
2019-CU18-ubuntu-20.04
이미지를 끌어오려면 다음 명령에서<image_tag>
를2019-CU18-ubuntu-20.04
로 바꿉니다.docker pull mcr.microsoft.com/mssql/server:<image_tag>
해당 이미지를 사용하여 새 컨테이너를 실행하려면
docker run
명령에 태그 이름을 지정합니다. 다음 명령에서<image_tag>
를 실행하려는 버전으로 바꿉니다.중요
SA_PASSWORD
환경 변수는 사용되지 않습니다. 대신MSSQL_SA_PASSWORD
를 사용하세요.docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1401:1433 -d mcr.microsoft.com/mssql/server:<image_tag>
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:<image_tag>
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:<image_tag>
이러한 단계를 사용하여 기존 컨테이너를 다운그레이드할 수도 있습니다. 예를 들어 문제 해결이나 테스트를 위해 실행 중인 컨테이너를 롤백 또는 다운그레이드할 수 있습니다. 실행 중인 컨테이너를 다운그레이드하려면 데이터 폴더에 대해 지속성 방법을 사용해야 합니다. 업그레이드 섹션에 간략하게 설명된 것과 동일한 단계를 수행하지만, 새 컨테이너를 실행할 때 이전 버전의 태그 이름을 지정합니다.
RHEL 기반 컨테이너 이미지 실행
SQL Server Linux 컨테이너 이미지에 대한 문서는 Ubuntu 기반 컨테이너를 가리킵니다. SQL Server 2019(15.x)부터 RHEL(Red Hat Enterprise Linux)을 기반으로 하는 컨테이너를 사용할 수 있습니다. RHEL용 이미지의 예는 mcr.microsoft.com/mssql/rhel/server:2019-CU15-rhel-8
과 같습니다.
예를 들어, 다음 명령은 RHEL 8을 사용하는 SQL Server 2019(15.x) 컨테이너의 누적 업데이트 18을 끌어옵니다.
docker pull mcr.microsoft.com/mssql/rhel/server:2019-CU18-rhel-8.4
docker pull mcr.microsoft.com/mssql/rhel/server:2019-CU18-rhel-8.4
docker pull mcr.microsoft.com/mssql/rhel/server:2019-CU18-rhel-8.4
프로덕션 컨테이너 이미지 실행
이전 섹션의 빠른 시작에서는 Microsoft Artifact Registry에서 무료 SQL Server Developer 버전을 실행합니다. 하지만 대부분의 정보는 Enterprise, Standard 또는 Web Edition과 같은 프로덕션 컨테이너 이미지를 실행하려는 경우에도 적용됩니다. 그러나 여기서 설명하는 몇 가지 차이점이 있습니다.
유효한 라이선스가 있는 경우에만 프로덕션 환경에서 SQL Server를 사용할 수 있습니다. 여기서 체험용 SQL Server Express 프로덕션 라이선스를 받을 수 있습니다. SQL Server Standard 및 Enterprise Edition 라이선스는 Microsoft 볼륨 라이선싱을 통해 사용할 수 있습니다.
프로덕션 버전도 실행하도록 개발자 컨테이너 이미지를 구성할 수 있습니다.
프로덕션 버전을 실행하려면 빠른 시작에서 요구 사항을 검토하고 절차를 실행합니다. MSSQL_PID
환경 변수를 사용하여 프로덕션 버전을 지정해야 합니다. 다음 예제에서는 Enterprise Core Edition용 최신 SQL Server 2022(16.x) 컨테이너 이미지를 실행하는 방법을 보여 줍니다.
docker run --name sqlenterprise \
-e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' \
-e 'MSSQL_PID=EnterpriseCore' -p 1433:1433 \
-d mcr.microsoft.com/mssql/server:2022-latest
docker run --name sqlenterprise `
-e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" `
-e "MSSQL_PID=EnterpriseCore" -p 1433:1433 `
-d "mcr.microsoft.com/mssql/server:2022-latest"
docker run --name sqlenterprise ^
-e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" ^
-e "MSSQL_PID=EnterpriseCore" -p 1433:1433 ^
-d "mcr.microsoft.com/mssql/server:2022-latest"
Important
ACCEPT_EULA
환경 변수에 Y
값을 전달하고 MSSQL_PID
에 버전 값을 전달하면 사용하려는 SQL Server 에디션 및 버전에 유효한 기존 라이선스가 있음을 나타냅니다. 또한 컨테이너 이미지에서 실행되는 SQL Server 소프트웨어 사용에 SQL Server 사용 조건이 적용되는 것에 동의하게 됩니다.
참고
MSSQL_PID
에 사용 가능한 값의 전체 목록은 Linux에서 환경 변수를 사용하여 SQL Server 설정 구성을 참조하세요.
여러 SQL Server 컨테이너 실행
Docker는 동일한 호스트 머신에서 여러 SQL Server 컨테이너를 실행하는 방법을 제공합니다. 동일한 호스트에 여러 개의 SQL Server 인스턴스가 필요한 시나리오에서 이 방법을 사용합니다. 각 컨테이너가 다른 포트에 공개되어야 합니다.
다음 예제에서는 SQL Server 2017(14.x) 컨테이너 2개를 만들고 호스트 컴퓨터의 포트 1401
및 1402
에 매핑합니다.
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1401:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1402:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2017-latest
다음 예제에서는 SQL Server 2019(15.x) 컨테이너 2개를 만들고 호스트 컴퓨터의 포트 1401
및 1402
에 매핑합니다.
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1401:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1402:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2019-latest
다음 예제에서는 SQL Server 2022(16.x) 컨테이너 2개를 만들고 호스트 머신의 1401
및 1402
포트에 매핑합니다.
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1401:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1402:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2022-latest
이제 개별 컨테이너에서 실행되는 SQL Server 인스턴스 2개가 있습니다. 클라이언트는 컨테이너 호스트의 IP 주소와 컨테이너의 포트 번호를 사용하여 각 SQL Server 인스턴스에 연결할 수 있습니다.
참고 항목
최신 버전의 sqlcmd (mssql-tools18)는 기본적으로 안전합니다. 버전 18 이상을 사용하는 경우 sqlcmd에 No
옵션을 추가하여 암호화가 필수가 아니라 선택 사항임을 지정해야 합니다.
sqlcmd -S 10.3.2.4,1401 -U SA -P '<YourPassword>'
sqlcmd -S 10.3.2.4,1402 -U SA -P '<YourPassword>'
sqlcmd -S 10.3.2.4,1401 -U SA -P "<YourPassword>"
sqlcmd -S 10.3.2.4,1402 -U SA -P "<YourPassword>"
sqlcmd -S 10.3.2.4,1401 -U SA -P "<YourPassword>"
sqlcmd -S 10.3.2.4,1402 -U SA -P "<YourPassword>"
컨테이너의 SQL Server 업그레이드
Docker에서 컨테이너 이미지를 업그레이드하려면 먼저 업그레이드 릴리스의 태그를 확인합니다. docker pull
명령을 사용하여 레지스트리에서 이 버전을 끌어옵니다.
docker pull mcr.microsoft.com/mssql/server:<image_tag>
그러면 새로 만든 컨테이너의 SQL Server 이미지가 업데이트되지만 실행 중인 컨테이너의 SQL Server는 업데이트되지 않습니다. 이렇게 하려면 최신 SQL Server 컨테이너 이미지를 사용하여 새 컨테이너를 만들고 데이터를 새 컨테이너로 마이그레이션해야 합니다.
기존 SQL Server 컨테이너에 대해 데이터 지속성 방법 중 하나를 사용해야 합니다. 그러면 동일한 데이터를 사용하여 새 컨테이너를 시작할 수 있습니다.
docker stop
명령을 사용하여 SQL Server 컨테이너를 중지합니다.docker run
을 사용하여 새 SQL Server 컨테이너를 만들고 매핑된 호스트 디렉터리 또는 데이터 볼륨 컨테이너를 지정합니다. SQL Server 업그레이드의 특정 태그를 사용해야 합니다. 이제 새 컨테이너에서 기존 SQL Server 데이터와 함께 새 SQL Server 버전을 사용합니다.중요
업그레이드는 현재 RC1, RC2 및 GA 간에만 지원됩니다.
새 컨테이너의 데이터베이스와 데이터를 확인합니다.
필요에 따라
docker rm
을 사용하여 이전 컨테이너를 제거합니다.
관련 콘텐츠
- 빠른 시작을 진행하여 Docker에서 SQL Server 2017(14.x) 컨테이너 이미지로 시작합니다.
- 빠른 시작을 진행하여 Docker에서 SQL Server 2019(15.x) 컨테이너 이미지로 시작합니다.
- 빠른 시작을 진행하여 Docker에서 SQL Server 2022(16.x) 컨테이너 이미지로 시작합니다.
- Docker 컨테이너에 대한 추가 구성 및 사용자 지정 참조
- 리소스, 피드백 및 알려진 문제는 mssql-docker GitHub 리포지토리를 참조하세요.
- SQL Server Docker 컨테이너 문제 해결
- SQL Server 컨테이너의 고가용성을 살펴봅니다.
- SQL Server Docker 컨테이너 보안 유지
SQL 설명서 작성에 참여하세요.
SQL 콘텐츠를 직접 편집할 수 있다는 것을 알고 계셨나요? 직접 편집하여 설명서를 개선하고, 페이지에 기여자로 참여하세요.
자세한 내용은 SQL Server 설명서에 기여하는 방법을 참조하세요