다음을 통해 공유


SQL Server Linux 컨테이너 배포 및 연결

적용 대상: SQL Server - Linux

이 문서에서는 SQL Server Linux 컨테이너 배포 및 연결 방법을 설명합니다.

기타 배포 시나리오는 다음을 참조하세요.

참고 항목

이 문서에서는 특히 mssql-server-linux 이미지 사용에 중점을 둡니다. Windows 컨테이너의 SQL Server 배포는 지원에서 다루지 않습니다. 개발 및 테스트의 경우 Windows 컨테이너에서 SQL Server를 사용할 자체 사용자 지정 컨테이너 이미지를 만들 수 있습니다. 샘플 파일은 GitHub에서 사용할 수 있습니다. 샘플 파일은 참조 전용입니다.

Important

프로덕션 사용 사례에 대해 SQL Server 컨테이너를 실행하도록 선택하기 전에 SQL Server 컨테이너에 대한 지원 정책을 검토하여 지원되는 구성에서 실행 중인지 확인하세요.

6분 분량의 다음 동영상은 컨테이너에서 SQL Server를 실행하는 방법을 소개합니다.

컨테이너 이미지를 끌어와 실행하기

SQL Server용 Docker 컨테이너 이미지를 끌어오고 실행하려면 다음 빠른 시작의 필수 조건 및 단계를 따르세요.

이 구성 문서의 다음 섹션에서는 추가 사용 시나리오를 제공합니다.

연결 및 쿼리

컨테이너 외부나 컨테이너 내에서 컨테이너의 SQL Server를 연결하고 쿼리할 수 있습니다. 다음 섹션에서는 두 시나리오를 모두 설명합니다.

컨테이너 외부 도구

SQL 연결을 지원하는 모든 외부 Linux, Windows 또는 macOS 도구에서 컨테이너 호스트의 SQL Server 인스턴스에 연결할 수 있습니다. 몇 가지 일반적인 도구는 다음과 같습니다.

다음 예제에서는 sqlcmd를 사용하여 컨테이너에서 실행되는 SQL Server에 연결합니다. 연결 문자열의 IP 주소는 컨테이너를 실행하는 호스트 머신의 IP 주소입니다.

참고 항목

최신 버전의 sqlcmd (mssql-tools18)는 기본적으로 안전합니다. 버전 18 이상을 사용하는 경우 sqlcmdNo옵션을 추가하여 암호화가 필수가 아니라 선택 사항임을 지정해야 합니다.

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 명령줄 도구가 컨테이너 이미지에 포함되었습니다. 대화형 명령 프롬프트를 사용하여 이미지에 연결하는 경우 로컬에서 도구를 실행할 수 있습니다.

  1. docker exec -it 명령을 사용하여 실행 중인 컨테이너 내에서 대화형 bash 셸을 시작합니다. 다음 예제에서 e69e056c702d는 컨테이너 ID입니다.

    docker exec -it e69e056c702d "bash"
    

    항상 전체 컨테이너 ID를 지정할 필요는 없습니다. 고유하게 식별하는 데 충분한 문자만 지정하면 됩니다. 따라서 이 예제에서는 전체 ID가 아닌 e6 또는 e69만 사용해도 충분할 수 있습니다. 컨테이너 ID를 확인하려면 docker ps -a 명령을 실행합니다.

  2. 컨테이너 내부에 들어가면 전체 경로를 사용하여 sqlcmd와 로컬로 연결합니다.

    /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P '<YourPassword>'
    

    참고 항목

    최신 버전의 sqlcmd는 기본적으로 안전합니다. 연결 암호화에 대한 자세한 내용은 Windows용 sqlcmd 유틸리티 및 Linux와 macOS용 sqlcmd를 사용하여 연결을 참조합니다. 연결이 성공하지 못하면 sqlcmd-No 옵션을 추가하여 암호화가 필수가 아니라 선택 사항임을 지정할 수 있습니다.

  3. sqlcmd를 마쳤으면 exit를 입력합니다.

  4. 대화형 명령 프롬프트를 마쳤으면 exit를 입력합니다. 컨테이너는 대화형 bash 셸을 종료한 후에도 계속 실행됩니다.

컨테이너 버전 확인

실행 중인 컨테이너의 SQL Server 버전을 확인하려면 다음 명령을 실행하여 버전을 표시합니다. <Container ID or name>을 대상 컨테이너 ID 또는 이름으로 바꿉니다. 시스템 관리자(sa) 계정의 SQL Server 암호로 바꿉 <password> 니다.

docker exec -it <Container ID or name> /opt/mssql-tools/bin/sqlcmd \
-S localhost -U sa -P '<password>' \
-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 "<password>" `
-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 "<password>" ^
-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 컨테이너 이미지를 실행하려면 다음 단계를 사용합니다.

  1. 사용하려는 릴리스의 Docker tag를 확인합니다. 사용 가능한 태그를 보려면 Microsoft 아티팩트 레지스트리를 참조하세요.

  2. 태그를 사용하여 SQL Server 컨테이너 이미지를 끌어옵니다. 예를 들어 2019-CU18-ubuntu-20.04 이미지를 끌어오려면 다음 명령에서 <image_tag>2019-CU18-ubuntu-20.04로 바꿉니다.

    docker pull mcr.microsoft.com/mssql/server:<image_tag>
    
  3. 해당 이미지를 사용하여 새 컨테이너를 실행하려면 docker run 명령에 태그 이름을 지정합니다. 다음 명령에서 <image_tag>를 실행하려는 버전으로 바꿉니다. 암호는 SQL Server 기본 암호 정책을 따라야 합니다. 기본적으로 암호는 8자 이상이어야 하며 대문자, 소문자, 0~9까지의 숫자 및 기호 네 가지 집합 중 세 집합의 문자를 포함해야 합니다. 암호 길이는 128자까지 가능하며 되도록 길고 복잡한 암호를 사용합니다.

    Important

    SA_PASSWORD 환경 변수는 사용되지 않습니다. 대신 MSSQL_SA_PASSWORD를 사용하세요.

    docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' -p 1401:1433 -d mcr.microsoft.com/mssql/server:<image_tag>
    
    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:<image_tag>
    
    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -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) 컨테이너 이미지를 실행하는 방법을 보여 줍니다.

암호는 SQL Server 기본 암호 정책을 따라야 합니다. 기본적으로 암호는 8자 이상이어야 하며 대문자, 소문자, 0~9까지의 숫자 및 기호 네 가지 집합 중 세 집합의 문자를 포함해야 합니다. 암호 길이는 128자까지 가능하며 되도록 길고 복잡한 암호를 사용합니다.

docker run --name sqlenterprise \
-e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' \
-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=<password>" `
-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=<password>" ^
-e "MSSQL_PID=EnterpriseCore" -p 1433:1433 ^
-d "mcr.microsoft.com/mssql/server:2022-latest"

Important

환경 변수 ACCEPT_EULA 및 버전 값MSSQL_PID에 값을 Y 전달하면 사용하려는 SQL Server 버전 및 버전에 대한 유효한 기존 라이선스가 있음을 나타냅니다. 또한 컨테이너 이미지에서 실행되는 SQL Server 소프트웨어 사용에 SQL Server 사용 조건이 적용되는 것에 동의하게 됩니다.

MSSQL_PID에 사용 가능한 값의 전체 목록은 Linux에서 환경 변수를 사용하여 SQL Server 설정 구성을 참조하세요.

여러 SQL Server 컨테이너 실행

Docker는 동일한 호스트 머신에서 여러 SQL Server 컨테이너를 실행하는 방법을 제공합니다. 동일한 호스트에 여러 개의 SQL Server 인스턴스가 필요한 시나리오에서 이 방법을 사용합니다. 각 컨테이너가 다른 포트에 공개되어야 합니다.

다음 예제에서는 SQL Server 2017(14.x) 컨테이너 2개를 만들고 호스트 컴퓨터의 포트 14011402에 매핑합니다.

docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' -p 1401:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' -p 1402:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2017-latest

다음 예제에서는 SQL Server 2019(15.x) 컨테이너 2개를 만들고 호스트 컴퓨터의 포트 14011402에 매핑합니다.

docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' -p 1401:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' -p 1402:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2019-latest

다음 예제에서는 SQL Server 2022(16.x) 컨테이너 2개를 만들고 호스트 머신의 14011402 포트에 매핑합니다.

docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' -p 1401:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' -p 1402:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2022-latest

주의

암호는 SQL Server 기본 암호 정책을 따라야 합니다. 기본적으로 암호는 8자 이상이어야 하며 대문자, 소문자, 0~9까지의 숫자 및 기호 네 가지 집합 중 세 집합의 문자를 포함해야 합니다. 암호 길이는 128자까지 가능하며 되도록 길고 복잡한 암호를 사용합니다.

이제 개별 컨테이너에서 실행되는 SQL Server 인스턴스 2개가 있습니다. 클라이언트는 컨테이너 호스트의 IP 주소와 컨테이너의 포트 번호를 사용하여 각 SQL Server 인스턴스에 연결할 수 있습니다.

참고 항목

최신 버전의 sqlcmd (mssql-tools18)는 기본적으로 안전합니다. 버전 18 이상을 사용하는 경우 sqlcmdNo옵션을 추가하여 암호화가 필수가 아니라 선택 사항임을 지정해야 합니다.

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 컨테이너 이미지를 사용하여 새 컨테이너를 만들고 데이터를 새 컨테이너로 마이그레이션해야 합니다.

  1. 기존 SQL Server 컨테이너에 대한 데이터 지속성 기술 중 하나를 사용해야 합니다. 그러면 동일한 데이터를 사용하여 새 컨테이너를 시작할 수 있습니다.

  2. docker stop 명령을 사용하여 SQL Server 컨테이너를 중지합니다.

  3. docker run을 사용하여 새 SQL Server 컨테이너를 만들고 매핑된 호스트 디렉터리 또는 데이터 볼륨 컨테이너를 지정합니다. SQL Server 업그레이드의 특정 태그를 사용해야 합니다. 이제 새 컨테이너에서 기존 SQL Server 데이터와 함께 새 SQL Server 버전을 사용합니다.

    중요

    업그레이드는 현재 RC1, RC2 및 GA 간에만 지원됩니다.

  4. 새 컨테이너의 데이터베이스와 데이터를 확인합니다.

  5. 필요에 따라 docker rm을 사용하여 이전 컨테이너를 제거합니다.

  • 빠른 시작을 진행하여 Docker에서 SQL Server 2017(14.x) 컨테이너 이미지로 시작합니다.
  • 빠른 시작을 진행하여 Docker에서 SQL Server 2019(15.x) 컨테이너 이미지로 시작합니다.
  • 빠른 시작을 진행하여 Docker에서 SQL Server 2022(16.x) 컨테이너 이미지로 시작합니다.

SQL 설명서 작성에 참여하세요.

SQL 콘텐츠를 직접 편집할 수 있다는 것을 알고 계셨나요? 직접 편집하여 설명서를 개선하고, 페이지에 기여자로 참여하세요.

자세한 내용은 SQL Server 설명서에 기여하는 방법을 참조하세요