Docker를 사용하여 SQL Server 2017 컨테이너 이미지를 실행합니다.Run the SQL Server 2017 container image with Docker

이 항목 적용 대상: 예(Linux에만 해당) SQL Server없습니다Azure SQL 데이터베이스없습니다Azure SQL 데이터 웨어하우스없습니다 병렬 데이터 웨어하우스 THIS TOPIC APPLIES TO: yesSQL Server (Linux only)noAzure SQL DatabasenoAzure SQL Data WarehousenoParallel Data Warehouse

이 빠른 시작에서 Docker를 사용하여 SQL Server 2017 컨테이너 이미지인 mssql-server-linux를 끌어와 실행합니다.In this quickstart, you use Docker to pull and run the SQL Server 2017 container image, mssql-server-linux. 그런 다음, sqlcmd로 연결하여 첫 번째 데이터베이스를 만들고 쿼리를 실행합니다.Then connect with sqlcmd to create your first database and run queries.

이 이미지는 Ubuntu 16.04 기반 Linux에서 실행 중인 SQL Server로 구성됩니다.This image consists of SQL Server running on Linux based on Ubuntu 16.04. Linux 또는 Mac/Windows용 Docker에서 Docker Engine 1.8+와 함께 사용할 수 있습니다.It can be used with the Docker Engine 1.8+ on Linux or on Docker for Mac/Windows.

참고

이 빠른 시작은 구체적으로 mssql-server-linux 이미지를 사용하는 데 집중합니다.This quick start specifically focuses on using the mssql-server-linux image. Windows 이미지는 다루지 않지만, mssql-server-windows-developer Docker 허브 페이지에서 자세히 알아볼 수 있습니다.The Windows image is not covered, but you can learn more about it on the mssql-server-windows-developer Docker Hub page.

PrerequisitesPrerequisites

컨테이너 이미지를 끌어와 실행하기Pull and run the container image

  1. Docker Hub를 사용하여 SQL Server 2017 Linux 컨테이너 이미지를 끌어오기.Pull the SQL Server 2017 Linux container image from Docker Hub.

    sudo docker pull microsoft/mssql-server-linux:2017-latest
    
    docker pull microsoft/mssql-server-linux:2017-latest
    

    이전 명령은 최신 SQL Server 2017 컨테이너 이미지를 끌어옵니다.The previous command pulls the latest SQL Server 2017 container image. 특정 이미지를 끌어오려면 콜론 및 태그 이름(예를 들어 microsoft/mssql-server-linux:2017-GA)을 추가합니다.If you want to pull a specific image, you add a colon and the tag name (for example, microsoft/mssql-server-linux:2017-GA). 사용 가능한 모든 이미지를 보려면 mssql-server-linux Docker 허브 페이지를 참조하세요.To see all available images, see the mssql-server-linux Docker hub page.

  2. Docker를 사용하여 컨테이너 이미지를 실행하려면 bash 셸(Linux/macOS) 또는 상승된 권한 PowerShell 명령 프롬프트에서 다음 명령을 사용할 수 있습니다.To run the container image with Docker, you can use the following command from a bash shell (Linux/macOS) or elevated PowerShell command prompt.

    sudo docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' \
       -p 1401:1433 --name sql1 \
       -d microsoft/mssql-server-linux:2017-latest
    
    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" `
       -p 1401:1433 --name sql1 `
       -d microsoft/mssql-server-linux:2017-latest
    

    참고

    암호는 SQL Server 기본 암호 정책이 따라야 합니다. 그렇지 않으면 컨테이너는 SQL 서버를 설정할 수 없어 작동이 중지됩니다.The password should follow the SQL Server default password policy, otherwise the container can not setup SQL server and will stop working. 기본적으로 암호는 8자 이상이어야 하며 다음 네 집합 중 세 집합의 문자를 포함해야 합니다. 대문자, 소문자, 십진수 숫자 및 기호입니다.By default, the password must be at least 8 characters long and contain characters from three of the following four sets: Uppercase letters, Lowercase letters, Base 10 digits, and Symbols. docker 로그 명령을 실행하여 오류 로그를 검사할 수 있습니다.You can examine the error log by executing the docker logs command.

    참고

    기본적으로 이렇게 하면 개발자 버전의 SQL Server 2017를 사용하여 컨테이너를 만듭니다.By default, this creates a container with the Developer edition of SQL Server 2017. 컨테이너에서 프로덕션 버전을 실행하는 프로세스는 약간 다릅니다.The process for running production editions in containers is slightly different. 자세한 내용은 프로덕션 컨테이너 이미지 실행을 참조하세요.For more information, see Run production container images.

    다음 표에서는 이전 docker run 보기의 매개 변수에 대해 설명합니다.The following table provides a description of the parameters in the previous docker run example:

    매개 변수Parameter DescriptionDescription
    -e 'ACCEPT_EULA=Y'-e 'ACCEPT_EULA=Y' 최종 사용자 사용권 계약 수락을 확인하기 위해 ACCEPT_EULA 변수를 어떤 값에 설정합니다.Set the ACCEPT_EULA variable to any value to confirm your acceptance of the End-User Licensing Agreement. SQL Server 이미지에 대한 설정을 해야 합니다.Required setting for the SQL Server image.
    -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>'-e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' 8자 이상이고 SQL Server 암호 요구 사항을 충족하는 자신만의 강력한 암호를 지정합니다.Specify your own strong password that is at least 8 characters and meets the SQL Server password requirements. SQL Server 이미지에 대한 설정을 해야 합니다.Required setting for the SQL Server image.
    -p 1401:1433-p 1401:1433 호스트 환경의 TCP 포트(첫 번째 값)를 컨테이너의 TCP 포트(두 번째 값)로 매핑합니다.Map a TCP port on the host environment (first value) with a TCP port in the container (second value). 이 예제에서 SQL Server는 컨테이너의 TCP 1433에서 수신 대기하고 호스트에서 1401 포트에 노출됩니다.In this example, SQL Server is listening on TCP 1433 in the container and this is exposed to the port, 1401, on the host.
    --name sql1--name sql1 컨테이너에 대해 임의로 생성된 이름보다는 사용자 지정 이름을 지정합니다.Specify a custom name for the container rather than a randomly generated one. 둘 이상의 컨테이너를 실행하는 경우 이 동일한 이름을 다시 사용할 수 없습니다.If you run more than one container, you cannot reuse this same name.
    microsoft/mssql-server-linux:2017-latestmicrosoft/mssql-server-linux:2017-latest SQL Server 2017 Linux 컨테이너 이미지입니다.The SQL Server 2017 Linux container image.
  3. Docker 컨테이너를 보려면 docker ps 명령을 사용합니다.To view your Docker containers, use the docker ps command.

    sudo docker ps -a
    
    docker ps -a
    

    다음 스크린샷과 비슷한 내용이 출력됩니다.You should see output similar to the following screenshot:

    Docker ps 명령 출력

  4. 상태 열이 Up의 상태를 표시하는 경우, SQL Server는 컨테이너에서 실행되며 포트 열의 지정된 포트에서 수신 대기합니다.If the STATUS column shows a status of Up, then SQL Server is running in the container and listening on the port specified in the PORTS column. SQL Server 컨테이너의 상태 열이 Exited를 표시하는 경우, 구성 가이드의 문제 해결 섹션을 참조하세요.If the STATUS column for your SQL Server container shows Exited, see the Troubleshooting section of the configuration guide.

-h(호스트 이름) 매개 변수도 유용하지만 간단한 설명을 위해 이 자습서에서 사용되지 않습니다.The -h (host name) parameter is also useful, but it is not used in this tutorial for simplicity. 이렇게 하면 컨테이너의 내부 이름이 사용자 지정 값으로 변경됩니다.This changes the internal name of the container to a custom value. 이 값은 다음 Transact SQL 쿼리에서 반환되는 이름입니다.This is the name you'll see returned in the following Transact-SQL query:

SELECT @@SERVERNAME,
    SERVERPROPERTY('ComputerNamePhysicalNetBIOS'),
    SERVERPROPERTY('MachineName'),
    SERVERPROPERTY('ServerName')

-h--name을 같은 값에 설정하는 것은 대상 컨테이너를 쉽게 식별하는 데 유용한 좋은 방법입니다.Setting -h and --name to the same value is a good way to easily identify the target container.

SA 암호 변경Change the SA password

SA 계정은 설치 중에 생성되는 SQL Server 인스턴스의 시스템 관리자입니다.The SA account is a system administrator on the SQL Server instance that gets created during setup. SQL Server 컨테이너를 만든 후 컨테이너에서 echo $MSSQL_SA_PASSWORD를 실행하여 지정한 MSSQL_SA_PASSWORD 환경 변수를 검색할 수 있습니다.After creating your SQL Server container, the MSSQL_SA_PASSWORD environment variable you specified is discoverable by running echo $MSSQL_SA_PASSWORD in the container. 보안을 위해 SA 암호를 변경합니다.For security purposes, change your SA password.

  1. SA 사용자에게 사용할 강력한 암호를 선택합니다.Choose a strong password to use for the SA user.

  2. docker exec를 사용하여 sqlcmd를 실행하고 Transact-SQL을 사용하여 암호를 변경합니다.Use docker exec to run sqlcmd to change the password using Transact-SQL. <YourStrong!Passw0rd><YourNewStrong!Passw0rd>를 사용자 고유의 암호 값으로 바꿉니다.Replace <YourStrong!Passw0rd> and <YourNewStrong!Passw0rd> with your own password values.

    sudo docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd \
       -S localhost -U SA -P '<YourStrong!Passw0rd>' \
       -Q 'ALTER LOGIN SA WITH PASSWORD="<YourNewStrong!Passw0rd>"'
    
    docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd `
       -S localhost -U SA -P "<YourStrong!Passw0rd>" `
       -Q "ALTER LOGIN SA WITH PASSWORD='<YourNewStrong!Passw0rd>'"
    

SQL Server에 연결Connect to SQL Server

다음 단계에서는 SQL Server에 연결하기 위해 컨테이너 내에서 SQL Server 명령줄 도구 sqlcmd를 사용합니다.The following steps use the SQL Server command-line tool, sqlcmd, inside the container to connect to SQL Server.

  1. docker exec -it 명령을 사용하여 실행 중인 컨테이너 내에서 대화형 bash 셸을 시작합니다.Use the docker exec -it command to start an interactive bash shell inside your running container. 다음 예에서 sql1은 컨테이너를 만들 때 --name 매개 변수가 지정한 이름입니다.In the following example sql1 is name specified by the --name parameter when you created the container.

    sudo docker exec -it sql1 "bash"
    
    docker exec -it sql1 "bash"
    
  2. 컨테이너 내부로 들어가면 sqlcmd를 사용하여 로컬로 연결합니다.Once inside the container, connect locally with sqlcmd. Sqlcmd는 기본적으로 경로에 있지 않으므로 전체 경로를 지정해야 합니다.Sqlcmd is not in the path by default, so you have to specify the full path.

    /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P '<YourNewStrong!Passw0rd>'
    

    명령줄에서 암호를 생략하여 입력하라는 메시지가 표시되도록 할 수 있습니다.You can omit the password on the command-line to be prompted to enter it.

  3. 성공하면 sqlcmd 명령 프롬프트 1>이 표시됩니다.If successful, you should get to a sqlcmd command prompt: 1>.

데이터 만들기 및 쿼리Create and query data

다음 섹션에서는 sqlcmd 및 Transact-SQL을 사용하여 새 데이터베이스를 만들고, 데이터를 추가하고, 간단한 쿼리를 실행하는 단계를 안내합니다.The following sections walk you through using sqlcmd and Transact-SQL to create a new database, add data, and run a simple query.

새 데이터베이스 만들기Create a new database

다음 단계에서는 TestDB라는 새 데이터베이스를 만듭니다.The following steps create a new database named TestDB.

  1. sqlcmd 명령 프롬프트에서 다음 Transact-SQL 명령을 붙여넣어 테스트 데이터베이스를 만듭니다.From the sqlcmd command prompt, paste the following Transact-SQL command to create a test database:

    CREATE DATABASE TestDB
    
  2. 다음 줄에 서버에 있는 모든 데이터베이스의 이름을 반환하는 쿼리를 작성합니다.On the next line, write a query to return the name of all of the databases on your server:

    SELECT Name from sys.Databases
    
  3. 앞의 두 명령은 즉시 실행되지 않았습니다.The previous two commands were not executed immediately. 앞의 명령을 실행하려면 새 줄에 GO를 입력해야 합니다.You must type GO on a new line to execute the previous commands:

    GO
    

데이터 삽입Insert data

다음으로 새 테이블 Inventory를 만들고 두 개의 새 행을 삽입합니다.Next create a new table, Inventory, and insert two new rows.

  1. sqlcmd 명령 프롬프트에서 컨텍스트를 새 TestDB 데이터베이스로 전환합니다.From the sqlcmd command prompt, switch context to the new TestDB database:

    USE TestDB
    
  2. Inventory라는 새 테이블을 만듭니다.Create new table named Inventory:

    CREATE TABLE Inventory (id INT, name NVARCHAR(50), quantity INT)
    
  3. 새 테이블에 데이터를 삽입합니다.Insert data into the new table:

    INSERT INTO Inventory VALUES (1, 'banana', 150); INSERT INTO Inventory VALUES (2, 'orange', 154);
    
  4. GO를 입력하여 앞의 명령을 실행합니다.Type GO to execute the previous commands:

    GO
    

데이터 선택Select data

이제 쿼리를 실행하여 Inventory 테이블에서 데이터를 반환합니다.Now, run a query to return data from the Inventory table.

  1. sqlcmd 명령 프롬프트에서 Inventory 테이블에서 수량이 152보다 큰 행을 반환하는 쿼리를 입력합니다.From the sqlcmd command prompt, enter a query that returns rows from the Inventory table where the quantity is greater than 152:

    SELECT * FROM Inventory WHERE quantity > 152;
    
  2. 명령을 실행합니다.Execute the command:

    GO
    

sqlcmd 명령 프롬프트 종료Exit the sqlcmd command prompt

  1. sqlcmd 세션을 종료하려면 QUIT를 입력합니다.To end your sqlcmd session, type QUIT:

    QUIT
    
  2. 컨테이너에서 대화형 명령 프롬프트를 종료하려면 exit을 입력합니다.To exit the interactive command-prompt in your container, type exit. 컨테이너는 대화형 bash 셸을 종료한 후에도 계속 실행됩니다.Your container continues to run after you exit the interactive bash shell.

컨테이너 외부에서 연결Connect from outside the container

SQL 연결을 지원하는 모든 외부 Linux, Windows 또는 macOS 도구에서 Docker 컴퓨터에 있는 SQL Server 인스턴스에 연결할 수 있습니다.You can also connect to the SQL Server instance on your Docker machine from any external Linux, Windows, or macOS tool that supports SQL connections.

다음 단계는 컨테이너에서 실행 중인 SQL Server에 연결하기 위해 컨테이너 외부에서 sqlcmd를 사용합니다.The following steps use sqlcmd outside of your container to connect to SQL Server running in the container. 이러한 단계는 컨테이너의 외부에 설치된 SQL Server 명령줄 도구가 이미 있다고 가정합니다.These steps assume that you already have the SQL Server command-line tools installed outside of your container. 다른 도구를 사용할 경우 동일한 보안 주체가 적용되지만 연결하는 프로세스는 각 도구에 고유합니다.The same principals apply when using other tools, but the process of connecting is unique to each tool.

  1. 컨테이너를 호스팅하는 컴퓨터에 대한 IP 주소를 찾습니다.Find the IP address for the machine that hosts your container. Linux에서 ifconfig 또는 ip 주소를 사용합니다. Windows에서 ipconfig를 사용합니다.On Linux, use ifconfig or ip addr. On Windows, use ipconfig.

  2. 컨테이너의 포트 1433에 매핑된 IP 주소와 포트를 지정하는 sqlcmd를 실행합니다.Run sqlcmd specifying the IP address and the port mapped to port 1433 in your container. 이 예제에서 그것은 호스트 컴퓨터의 1401 포트입니다.In this example, that is port 1401 on the host machine.

    sqlcmd -S 10.3.2.4,1401 -U SA -P '<YourNewStrong!Passw0rd>'
    
    sqlcmd -S 10.3.2.4,1401 -U SA -P "<YourNewStrong!Passw0rd>"
    
  3. Transact-SQL 명령을 실행합니다.Run Transact-SQL commands. 완료되면 QUIT을 입력합니다.When finished, type QUIT.

SQL Server에 연결할 다른 일반적인 도구는 다음과 같습니다.Other common tools to connect to SQL Server include:

컨테이너 제거Remove your container

이 자습서에 사용되는 SQL Server 컨테이너를 제거하려면 다음 명령을 실행합니다.If you want to remove the SQL Server container used in this tutorial, run the following commands:

sudo docker stop sql1
sudo docker rm sql1
docker stop sql1
docker rm sql1

경고

컨테이너를 영구적으로 중지하고 제거하면 컨테이너의 모든 SQL Server 데이터가 삭제됩니다.Stopping and removing a container permanently deletes any SQL Server data in the container. 데이터를 보존해야 하는 경우 컨테이너에서 백업 파일을 만들고 복사하거나 컨테이너 데이터 지속성 기술을 사용합니다.If you need to preserve your data, create and copy a backup file out of the container or use a container data persistence technique.

Docker 데모Docker demo

Docker에 대한 SQL Server 컨테이너 이미지를 사용하여 시도한 후에 Docker를 사용하여 개발 및 테스트를 개선하는 방법을 알아 보고자 할 수도 있습니다.After you have tried using the SQL Server container image for Docker, you might want to know how Docker is used to improve development and testing. 다음 비디오는 Docker를 연속 통합 및 배포 시나리오에서 사용할 수 있는 방법을 보여줍니다.The following video shows how Docker can be used in a continuous integration and deployment scenario.

다음 단계Next steps

데이터베이스 백업 파일을 컨테이너로 복원하는 방법에 대한 자습서는 SQL Server 데이터베이스를 Linux Docker 컨테이너에 복원을 참조하세요.For a tutorial on how to restore database backup files into a container, see Restore a SQL Server database in a Linux Docker container. 여러 컨테이너 실행, 데이터 지속성, 문제 해결 등과 같은 다른 시나리오를 탐색하려면 Docker에서 SQL Server 2017 컨테이너 이미지 구성을 참조하세요.To explore other scenarios, such as running multiple containers, data persistence, and troubleshooting, see Configure SQL Server 2017 container images on Docker.

또한, 리소스, 피드백 및 알려진 문제에 대한 mssql docker GitHub 리포지토리를 확인합니다.Also, check out the mssql-docker GitHub repository for resources, feedback, and known issues.