Docker에서 SQL Server 컨테이너 이미지를 구성 합니다.Configure SQL Server container images on Docker

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

이 문서에서는 구성 및 사용 하는 방법을 설명 합니다 mssql server linux 컨테이너 이미지 Docker를 사용 하 여 합니다.This article explains how to configure and use the mssql-server-linux container image with Docker. 이 이미지는 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 article specifically focuses on using the mssql-server-linux image. Windows 이미지는 다루지 않지만에서 자세히 알아보십시오 합니다 mssql server windows Docker 허브 페이지합니다.The Windows image is not covered, but you can learn more about it on the mssql-server-windows Docker Hub page.

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

끌어오고 SQL Server 2017 Docker 컨테이너 이미지를 실행 하려면 필수 구성 요소 및 다음 빠른 시작의 단계를 수행 합니다.To pull and run the Docker container image for SQL Server 2017, follow the prerequisites and steps in the following quickstart:

이 구성 문서의 다음 섹션에 대 한 추가 시나리오를 제공합니다.This configuration article provides additional usage scenarios in the following sections.

프로덕션 컨테이너 이미지 실행Run production container images

Docker 허브에서 무료 개발자 버전의 SQL Server를 실행 하는 이전 섹션에서 빠른 시작 합니다.The quickstart in the previous section runs the free Developer edition of SQL Server from Docker Hub. 대부분의 정보에는 프로덕션 Enterprise, Standard 또는 Web 버전 같은 컨테이너 이미지를 실행 하려는 경우 여전히 적용 됩니다.Most of the information still applies if you want to run production container images, such as Enterprise, Standard, or Web editions. 그러나 여기서 설명 하는 몇 가지 차이점이 있습니다.However, there are a few differences that are outlined here.

  • 유효한 라이선스가 있는 경우 SQL Server 프로덕션 환경에서 사용할 수 있습니다.You can only use SQL Server in a production environment if you have a valid license. 무료 SQL Server Express 프로덕션 라이선스를 가져올 수 있습니다 여기합니다.You can obtain a free SQL Server Express production license here. 통해 사용할 수 있는 SQL Server Standard 및 Enterprise Edition 라이선스 Microsoft Volume Licensing합니다.SQL Server Standard and Enterprise Edition licenses are available through Microsoft Volume Licensing.

  • 프로덕션 SQL Server 컨테이너 이미지를 끌어와야 Docker 저장소합니다.Production SQL Server container images must be pulled from Docker Store. 이미 없는, 하는 경우 Docker 저장소 계정을 만듭니다.If you don't already have one, create an account on Docker Store.

  • 도 프로덕션 버전을 실행 하려면 Docker 스토어에서 개발자 컨테이너 이미지를 구성할 수 있습니다.The Developer container image on Docker Store can be configured to run the production editions as well. 프로덕션 버전을 실행 하려면 다음 단계를 사용 합니다.Use the following steps to run production editions:

    1. 먼저 로그인 docker id 명령줄에서.First, log in to your docker id from the command line.

      docker login
      
    2. 다음으로, 컨테이너 이미지 Docker 스토어에서 무료 개발자를 가져올 해야 합니다.Next, you need to obtain the free Developer container image on Docker Store. 로 이동 https://store.docker.com/images/mssql-server-linux , 클릭 결제로 진행 한, 지침을 따릅니다.Go to https://store.docker.com/images/mssql-server-linux, click Proceed to Checkout, and follow the instructions.

    3. 프로시저를 실행 하 고 요구 사항을 검토 합니다 퀵 스타트합니다.Review the requirements and run procedures in the quickstart. 하지만 두 가지 차이점이 있습니다.But there are two differences. 이미지를 가져와야 저장소/microsoft/mssql-서버-linux:<태그 이름> Docker 저장소에서.You must pull the image store/microsoft/mssql-server-linux:<tag-name> from Docker Store. 사용 하 여 프로덕션 버전을 지정 해야 합니다 MSSQL_PID 환경 변수입니다.And you must specify your production edition with the MSSQL_PID environment variable. 다음 예제에서는 Enterprise Edition에 대 한 최신 SQL Server 2017 컨테이너 이미지를 실행 하는 방법을 보여 줍니다.The following example shows how to run the latest SQL Server 2017 container image for the Enterprise Edition:

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

      중요

      값을 전달 하 여 Y 환경 변수에 ACCEPT_EULA 과 버전 값을 MSSQL_PID를 유효 하 고 기존 라이선스를 있다고 표현 됩니다 버전 및 사용 하려는 SQL Server의 버전입니다.By passing the value Y to the environment variable ACCEPT_EULA and an edition value to MSSQL_PID, you are expressing that you have a valid and existing license for the edition and version of SQL Server that you intend to use. 또한는 Docker 컨테이너 이미지가 실행 되는 SQL Server 소프트웨어의 사용 받습니다 SQL Server 라이선스 조건에 동의 합니다.You also agree that your use of SQL Server software running in a Docker container image will be governed by the terms of your SQL Server license.

      참고

      에 대 한 가능한 값의 전체 목록은 MSSQL_PID를 참조 하세요 Linux의 환경 변수를 사용 하 여 SQL Server 구성 설정합니다.For a full list of possible values for MSSQL_PID, see Configure SQL Server settings with environment variables on Linux.

연결 및 쿼리Connect and query

컨테이너 내에서 또는 컨테이너 외부에서에서 SQL Server 쿼리를 연결할 수는 컨테이너입니다.You can connect and query SQL Server in a container from either outside the container or from within the container. 다음 섹션에서는 두 시나리오 모두에 대해 설명 합니다.The following sections explain both scenarios.

컨테이너 외부 도구Tools outside the container

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

다음 예제에서는 sqlcmd Docker 컨테이너에서 실행 중인 SQL Server에 연결 합니다.The following example uses sqlcmd to connect to SQL Server running in a Docker container. 연결 문자열에서 IP 주소는 컨테이너를 실행 하는 호스트 컴퓨터의 IP 주소가입니다.The IP address in the connection string is the IP address of the host machine that is running the container.

sqlcmd -S 10.3.2.4 -U SA -P '<YourPassword>'
sqlcmd -S 10.3.2.4 -U SA -P "<YourPassword>"

기본 되지 않은 호스트 포트를 매핑한 1433, 연결 문자열에 해당 포트를 추가 합니다.If you mapped a host port that was not the default 1433, add that port to the connection string. 예를 들어 지정한 -p 1400:1433 에서 프로그램 docker run 명령을 사용한 다음, 명시적으로 연결 하 여 1400 포트를 지정 합니다.For example, if you specified -p 1400:1433 in your docker run command, then connect by explicitly specify port 1400.

sqlcmd -S 10.3.2.4,1400 -U SA -P '<YourPassword>'
sqlcmd -S 10.3.2.4,1400 -U SA -P "<YourPassword>"

컨테이너 내에서 도구Tools inside the container

SQL Server 2017 CTP 2.0을 사용 하 여 시작 합니다 SQL Server 명령줄 도구 컨테이너 이미지에 포함 됩니다.Starting with SQL Server 2017 CTP 2.0, the SQL Server command-line tools are included in the container image. 대화형 명령 프롬프트를 사용 하 여 이미지를 연결 하는 경우 도구를 로컬로 실행할 수 있습니다.If you attach to the image with an interactive command-prompt, you can run the tools locally.

  1. docker exec -it 명령을 사용하여 실행 중인 컨테이너 내에서 대화형 bash 셸을 시작합니다.Use the docker exec -it command to start an interactive bash shell inside your running container. 다음 예에서 e69e056c702d 컨테이너 ID입니다.In the following example e69e056c702d is the container ID.

    docker exec -it e69e056c702d "bash"
    

    항상 전체 컨테이너 id를 지정할 필요가 없습니다. 고유 하 게 식별에 필요한 만큼의 문자를 지정 해야 합니다.You don't always have to specify the entire container id. You only have to specify enough characters to uniquely identify it. 이 예제에서는 수 있으므로 사용 하기에 충분 e6 또는 e69 전체 id 대신 합니다.So in this example, it might be enough to use e6 or e69 rather than the full id.

  2. 컨테이너 내부로 들어가면 sqlcmd를 사용하여 로컬로 연결합니다.Once inside the container, connect locally with sqlcmd. Note는 sqlcmd 아니므로 기본적으로 경로에 전체 경로 지정 해야 합니다.Note that 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 '<YourPassword>'
    
  3. Sqlcmd를 사용 하 여 완료 되 면 입력 exit합니다.When finished with sqlcmd, type exit.

  4. 대화형 명령 프롬프트를 사용 하 여 완료 되 면 입력 exit합니다.When finished with the interactive command-prompt, type exit. 컨테이너는 대화형 bash 셸을 종료한 후에도 계속 실행됩니다.Your container continues to run after you exit the interactive bash shell.

여러 SQL Server 컨테이너를 실행 합니다.Run multiple SQL Server containers

Docker는 동일한 호스트 컴퓨터에서 여러 SQL Server 컨테이너를 실행 하는 방법을 제공 합니다.Docker provides a way to run multiple SQL Server containers on the same host machine. 이 동일한 호스트에서 SQL Server의 여러 인스턴스를 필요로 하는 시나리오에 대 한 방법입니다.This is the approach for scenarios that require multiple instances of SQL Server on the same host. 각 컨테이너는 다른 포트에서 자체를 노출 해야 합니다.Each container must expose itself on a different port.

다음 예제에서는 두 개의 SQL Server 컨테이너를 만들어 포트로 매핑합니다 1401 하 고 1402 호스트 컴퓨터에서.The following example creates two SQL Server containers and maps them to ports 1401 and 1402 on the host machine.

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

이제 별도 컨테이너에서 실행 중인 SQL Server의 두 인스턴스가 있습니다.Now there are two instances of SQL Server running in separate containers. 클라이언트는 컨테이너용 Docker 호스트 및 포트 번호의 IP 주소를 사용 하 여 각 SQL Server 인스턴스에 연결할 수 있습니다.Clients can connect to each SQL Server instance by using the IP address of the Docker host and the port number for the container.

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>"

사용자 지정된 컨테이너 만들기Create a customized container

사용자가 직접 만들 수 있기 Dockerfile 사용자 지정 된 SQL Server 컨테이너를 만들려고 합니다.It is possible to create your own Dockerfile to create a customized SQL Server container. 자세한 내용은 SQL Server 및 Node 응용 프로그램을 결합 하는 데모합니다.For more information, see a demo that combines SQL Server and a Node application. 이 프로세스는 컨테이너의 수명 제어 하기 때문에 사용자 고유의 Dockerfile을 만든 경우 포그라운드 프로세스가 고려해 야 합니다.If you do create your own Dockerfile, be aware of the foreground process, because this process controls the life of the container. 종료 될 경우 컨테이너를 종료 합니다.If it exits, the container will shutdown. 예를 들어 스크립트를 실행 하 고 SQL Server를 시작 하려는 경우 SQL Server 프로세스의 가장 오른쪽 명령 인지 확인 합니다.For example, if you want to run a script and start SQL Server, make sure that the SQL Server process is the right-most command. 다른 모든 명령은 백그라운드에서 실행 됩니다.All other commands are run in the background. 이 Dockerfile 내에서 다음 명령을 보여 줍니다.This is illustrated in the following command inside a Dockerfile:

/usr/src/app/do-my-sql-commands.sh & /opt/mssql/bin/sqlservr

이전 예의 명령은 반대로 수행-내-sql-commands.sh 스크립트가 완료 되 컨테이너 종료를 것입니다.If you reversed the commands in the previous example, the container would shutdown when the do-my-sql-commands.sh script completes.

데이터를 유지 합니다.Persist your data

SQL Server 구성 변경과 데이터베이스 파일에에서 유지 되는 컨테이너와 컨테이너를 다시 시작 하는 경우에 docker stopdocker start입니다.Your SQL Server configuration changes and database files are persisted in the container even if you restart the container with docker stop and docker start. 그러나 사용 하 여 컨테이너를 제거 하면 docker rm, 컨테이너의 모든 삭제 된 SQL Server 데이터베이스를 포함 합니다.However, if you remove the container with docker rm, everything in the container is deleted, including SQL Server and your databases. 다음 섹션을 사용 하는 방법에 설명 데이터 볼륨 관련된 컨테이너 삭제 되는 경우에 데이터베이스 파일을 유지 합니다.The following section explains how to use data volumes to persist your database files even if the associated containers are deleted.

중요

이 SQL Server 용 Docker에서 데이터 지 속성을 이해 하는 중요 합니다.For SQL Server, it is critical that you understand data persistence in Docker. 이 단원의 내용은 외에도 Docker의 설명서를 참조 Docker 컨테이너에서 데이터를 관리 하는 방법합니다.In addition to the discussion in this section, see Docker's documentation on how to manage data in Docker containers.

데이터 볼륨으로 호스트 디렉터리 탑재Mount a host directory as data volume

첫 번째 방법은 호스트에서 컨테이너의 데이터 볼륨으로 디렉터리를 탑재 하는 것입니다.The first option is to mount a directory on your host as a data volume in your container. 이 작업을 수행 하려면 사용 합니다 docker run 명령과 -v <host directory>:/var/opt/mssql 플래그.To do that, use the docker run command with the -v <host directory>:/var/opt/mssql flag. 따라서 데이터를 컨테이너 실행 간에 복원할 수 있습니다.This allows the data to be restored between container executions.

docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1433:1433 -v <host directory>:/var/opt/mssql -d microsoft/mssql-server-linux:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1433:1433 -v <host directory>:/var/opt/mssql -d microsoft/mssql-server-linux:2017-latest

또한이 기술을 공유 하 고 외부 Docker 호스트의 파일을 볼 수 있습니다.This technique also enables you to share and view the files on the host outside of Docker.

중요

이 이번에는 Linux 이미지에서 SQL Server를 사용 하 여 Mac에서 docker 호스트 볼륨 매핑이 지원 되지 않습니다.Host volume mapping for Docker on Mac with the SQL Server on Linux image is not supported at this time. 데이터 볼륨 컨테이너를 대신 사용 합니다.Use data volume containers instead. 이 제한은 관련 된 /var/opt/mssql 디렉터리입니다.This restriction is specific to the /var/opt/mssql directory. 탑재 디렉터리 작동을 읽기만 합니다.Reading from a mounted directory works fine. 예를 들어, – v를 사용 하 여 Mac의 호스트 디렉터리 탑재 하 고 호스트에 상주 하는.bak 파일에서 백업 복원 수 있습니다.For example, you can mount a host directory using –v on Mac and restore a backup from a .bak file that resides on the host.

데이터 볼륨 컨테이너를 사용 합니다.Use data volume containers

두 번째 옵션은 데이터 볼륨 컨테이너를 사용 하는 것입니다.The second option is to use a data volume container. 사용 하 여 호스트 디렉터리 대신 볼륨 이름을 지정 하 여 데이터 볼륨 컨테이너를 만들 수 있습니다는 -v 매개 변수입니다.You can create a data volume container by specifying a volume name instead of a host directory with the -v parameter. 다음 예제에서는 명명 된 공유 데이터 볼륨을 만듭니다 sqlvolume합니다.The following example creates a shared data volume named sqlvolume.

docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1433:1433 -v sqlvolume:/var/opt/mssql -d microsoft/mssql-server-linux:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1433:1433 -v sqlvolume:/var/opt/mssql -d microsoft/mssql-server-linux:2017-latest

참고

이전 버전의 Docker 사용 하 여 암시적으로 실행된 명령에서 데이터 볼륨을 만들기 위한이 기술 작동 하지 않습니다.This technique for implicitly creating a data volume in the run command does not work with older versions of Docker. 이런 경우 Docker 설명서에 설명 된 단계를 사용 하 여 만들기 및 데이터 볼륨 컨테이너를 탑재합니다.In that case, use the explicit steps outlined in the Docker documentation, Creating and mounting a data volume container.

중지 하 고이 컨테이너를 제거 하는 경우에 데이터 볼륨을 유지 합니다.Even if you stop and remove this container, the data volume persists. 사용 하 여 볼 수 있습니다는 docker volume ls 명령입니다.You can view it with the docker volume ls command.

docker volume ls

호스트 디렉터리를 탑재 하는 경우 /var/opt/mssql 컨테이너를 만들 때을 대신 참조를 로그 호스트에서 매핑된 경로에 하위 디렉터리입니다.If you then create another container with the same volume name, the new container uses the same SQL Server data contained in the volume.

통해 이동 하 여 Docker에서 SQL Server 2017 컨테이너 이미지를 사용 하 여 시작 합니다 docker volume rm퀵 스타트합니다.To remove a data volume container, use the docker volume rm command.

경고

참고: 합니다 mssql docker GitHub 리포지토리 리소스, 피드백 및 알려진된 문제에 대 한 합니다.If you delete the data volume container, any SQL Server data in the container is permanently deleted.

Backup 및 Restore 메서드Backup and restore

이러한 컨테이너 기술 외에도 표준 SQL Server backup을 사용 하 고 복원 기술도 수 있습니다.In addition to these container techniques, you can also use standard SQL Server backup and restore techniques. 데이터를 보호 하기 위해 또는 다른 SQL Server 인스턴스로 데이터를 이동 하려면 백업 파일을 사용할 수 있습니다.You can use backup files to protect your data or to move the data to another SQL Server instance. 자세한 내용은 Linux에서 SQL Server 데이터베이스 백업 및 복원합니다.For more information, see Backup and restore SQL Server databases on Linux.

경고

백업을 만든 경우에를 만들거나 컨테이너의 외부 백업 파일을 복사 해야 합니다.If you do create backups, make sure to create or copy the backup files outside of the container. 이 고, 그렇지 컨테이너 제거 되 면 백업 파일이 삭제 됩니다.Otherwise, if the container is removed, the backup files are also deleted.

컨테이너에서 명령 실행Execute commands in a container

실행 중인 컨테이너에 있는 경우 터미널 호스트에서 컨테이너 내에서 명령을 실행할 수 있습니다.If you have a running container, you can execute commands within the container from a host terminal.

실행 컨테이너 ID를 가져오려면:To get the container ID run:

docker ps

Bash 터미널을 실행 하는 컨테이너에 시작 합니다.To start a bash terminal in the container run:

docker exec -ti <Container ID> /bin/bash

이제 컨테이너 내에서 터미널에서 실행 중인 것 처럼 명령을 실행할 수 있습니다.Now you can run commands as though you are running them at the terminal inside the container. 완료되면 exit을 입력합니다.When finished, type exit. 대화형 명령 세션에서이 종료 하지만 컨테이너가 계속 실행 됩니다.This exits in the interactive command session, but your container continues to run.

컨테이너에서 파일을 복사 합니다.Copy files from a container

컨테이너에서 파일을 복사 하려면 다음 명령을 사용 합니다.To copy a file out of the container, use the following command:

docker cp <Container ID>:<Container path> <host path>

예:Example:

docker cp d6b75213ef80:/var/opt/mssql/log/errorlog /tmp/errorlog
docker cp d6b75213ef80:/var/opt/mssql/log/errorlog C:\Temp\errorlog

컨테이너에 파일을 복사 합니다.Copy files into a container

컨테이너에 파일을 복사, 다음 명령을 사용 합니다.To copy a file into the container, use the following command:

docker cp <Host path> <Container ID>:<Container path>

예:Example:

docker cp /tmp/mydb.mdf d6b75213ef80:/var/opt/mssql/data
docker cp C:\Temp\mydb.mdf d6b75213ef80:/var/opt/mssql/data

특정 SQL Server 컨테이너 이미지 실행Run a specific SQL Server container image

여기서 최신 SQL Server 컨테이너 이미지를 사용 하려는 하지 시나리오가 있습니다.There are scenarios where you might not want to use the latest SQL Server container image. 특정 SQL Server 컨테이너 이미지를 실행 하려면 다음 단계를 사용 합니다.To run a specific SQL Server container image, use the following steps:

  1. Docker를 식별 태그 사용 하려는 릴리스에 대 한 합니다.Identify the Docker tag for the release you want to use. 사용 가능한 태그를 보려면 mssql server linux Docker 허브 페이지합니다.To view the available tags, see the mssql-server-linux Docker hub page.

  2. 태그를 사용 하 여 SQL Server 컨테이너 이미지를 끌어옵니다.Pull the SQL Server container image with the tag. 예를 들어 이미지를 가져와 RC1을 대체할 <image_tag> 사용 하 여 다음 명령에서 rc1합니다.For example, to pull the RC1 image, replace <image_tag> in the following command with rc1.

    docker pull microsoft/mssql-server-linux:<image_tag>
    
  3. 새 컨테이너 이미지를 사용 하 여를 실행 하려면에 태그 이름을 지정 합니다 docker run 명령입니다.To run a new container with that image, specify the tag name in the docker run command. 다음 명령에서 <image_tag> 실행 하려는 버전을 사용 하 여 합니다.In the following command, replace <image_tag> with the version you want to run.

    docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1401:1433 -d microsoft/mssql-server-linux:<image_tag>
    
    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d microsoft/mssql-server-linux:<image_tag>
    

이러한 단계는 기존 컨테이너를 다운 그레이드 하려면 데도 사용할 수 있습니다.These steps can also be used to downgrade an existing container. 예를 들어 롤백하려면 하거나 문제 해결 또는 테스트에 대 한 실행 중인 컨테이너를 다운 그레이드할 수 있습니다.For example, you might want to rollback or downgrade a running container for troubleshooting or testing. 실행 중인 컨테이너를 다운 그레이드 하려면 사용 해야 하는 지 속성 기술 데이터 폴더에 대 한 합니다.To downgrade a running container, you must be using a persistence technique for the data folder. 에 설명 된 동일한 단계를 수행 합니다 업그레이드 섹션, 새 컨테이너를 실행 하면 이전 버전의 태그 이름을 지정 합니다.Follow the same steps outlined in the upgrade section, but specify the tag name of the older version when you run the new container.

중요

업그레이드 및 다운 그레이드 지금은 RC1 및 RC2 간의 지원만 됩니다.Upgrade and downgrade are only supported between RC1 and RC2 at this time.

컨테이너 버전 확인Check the container version

실행 중인 docker 컨테이너에서 SQL Server의 버전을 알면 하려는 경우에 표시 하려면 다음 명령을 실행 합니다.If you want to know the version of SQL Server in a running docker container, run the following command to display it. 대체 <Container ID or name> 대상 컨테이너 ID 또는 이름입니다.Replace <Container ID or name> with the target container ID or name. 대체 <YourStrong!Passw0rd> SA 로그인에 대 한 SQL Server 암호를 사용 합니다.Replace <YourStrong!Passw0rd> with the SQL Server password for the SA login.

sudo docker exec -it <Container ID or name> /opt/mssql-tools/bin/sqlcmd \
   -S localhost -U SA -P '<YourStrong!Passw0rd>' \
   -Q 'SELECT @@VERSION'
docker exec -it <Container ID or name> /opt/mssql-tools/bin/sqlcmd `
   -S localhost -U SA -P "<YourStrong!Passw0rd>" `
   -Q 'SELECT @@VERSION'

SQL Server 버전을 식별 하 고 빌드 대상 docker 컨테이너 이미지에 대 한 번호 수도 있습니다.You can also identify the SQL Server version and build number for a target docker container image. 다음 명령은 표시에 대 한 SQL Server 버전 및 빌드 정보를 microsoft/mssql-서버-linux: 2017-최신 이미지입니다.The following command displays the SQL Server version and build information for the microsoft/mssql-server-linux: 2017-latest image. 환경 변수를 사용 하 여 새 컨테이너를 실행 하 여 이렇게 PAL_PROGRAM_INFO = 1합니다.It does this by running a new container with an environment variable PAL_PROGRAM_INFO=1. 결과 컨테이너 즉시 종료 하며 docker rm 명령을 제거 합니다.The resulting container instantly exits, and the docker rm command removes it.

sudo docker run -e PAL_PROGRAM_INFO=1 --name sqlver \
   -ti microsoft/mssql-server-linux:2017-latest && \
   sudo docker rm sqlver
docker run -e PAL_PROGRAM_INFO=1 --name sqlver `
   -ti microsoft/mssql-server-linux:2017-latest; `
   docker rm sqlver

다음 출력과 유사한 버전 정보를 표시 하는 이전 명령:The previous commands display version information similar to the following output:

sqlservr
  Version 14.0.3029.16
  Build ID ee3d3882f1c48a7a7e590a620153012eaedc2f37143d485df945a079b9d4eeea
  Build Type release
  Git Version 65d42c4
  Built at Sat Jun 16 01:20:11 GMT 2018

PAL
  Build ID 60cfcb134bbae96d311f6a4f56aeb5a685b3809de80bcb61ec587a8f58b555eb
  Build Type release
  Git Version 21a4c11
  Built at Sat Jun 16 01:18:53 GMT 2018

Packages
  system.sfp                    6.2.9200.1,21a4c1178,
  system.common.sfp             10.0.15063.540
  system.certificates.sfp       6.2.9200.1,21a4c1178,
  system.netfx.sfp              4.6.1590.0
  secforwarderxplat.sfp         14.0.3029.16
  sqlservr.sfp                  14.0.3029.16
  sqlagent.sfp                  14.0.3029.16

컨테이너에서 SQL Server 업그레이드Upgrade SQL Server in containers

Docker 사용 하 여 컨테이너 이미지를 업그레이드 하려면 먼저 업그레이드에 대 한 릴리스에 대 한 태그를 식별 합니다.To upgrade the container image with Docker, first identify the tag for the release for your upgrade. 이 버전을 사용 하 여 레지스트리에서 끌어오기는 docker pull 명령:Pull this version from the registry with the docker pull command:

docker pull microsoft/mssql-server-linux:<image_tag>

SQL Server 이미지를 만든 모든 새 컨테이너를 업데이트 하지만 실행 중인 모든 컨테이너에서 SQL Server를 업데이트 하지 않습니다.This updates the SQL Server image for any new containers you create, but it does not update SQL Server in any running containers. 이렇게 하려면 최신 SQL Server 컨테이너 이미지를 사용 하 여 새 컨테이너를 만듭니다를 해당 새 컨테이너에 데이터를 마이그레이션.To do this, you must create a new container with the latest SQL Server container image and migrate your data to that new container.

  1. 하나를 사용 하 고 있는지 확인 합니다 데이터 지 속성 기술을 기존 SQL Server 컨테이너에 대 한 합니다.Make sure you are using one of the data persistence techniques for your existing SQL Server container. 이 옵션을 사용 하면 동일한 데이터를 사용 하 여 새 컨테이너를 시작할 수 있습니다.This enables you to start a new container with the same data.

  2. SQL Server 컨테이너를 중지 합니다 docker stop 명령입니다.Stop the SQL Server container with the docker stop command.

  3. 사용 하 여 새 SQL Server 컨테이너를 만들고 docker run 매핑된 호스트 디렉터리 또는 데이터 볼륨 컨테이너를 지정 합니다.Create a new SQL Server container with docker run and specify either a mapped host directory or a data volume container. SQL Server 업그레이드에 대 한 특정 태그를 사용 해야 합니다.Make sure to use the specific tag for your SQL Server upgrade. 이제 새 컨테이너는 기존 SQL Server 데이터를 사용 하 여 새 버전의 SQL Server를 사용합니다.The new container now uses a new version of SQL Server with your existing SQL Server data.

    중요

    업그레이드는 지금 GA, RC1 및 RC2 사이 지원 됩니다.Upgrade is only supported between RC1, RC2, and GA at this time.

  4. 데이터베이스 및 새 컨테이너에 데이터를 확인 합니다.Verify your databases and data in the new container.

  5. 필요에 따라 사용 하 여 기존 컨테이너를 제거 docker rm합니다.Optionally, remove the old container with docker rm.

문제 해결Troubleshooting

다음 섹션에서는 컨테이너에서 SQL Server를 실행 하기 위한 문제 해결 제안 사항을 제공 합니다.The following sections provide troubleshooting suggestions for running SQL Server in containers.

Docker 명령 오류Docker command errors

에 대 한 오류가 발생할 경우 docker 명령을 docker 서비스가 실행 중인지 확인 하 고 관리자 권한으로 실행 하려고 합니다.If you get errors for any docker commands, make sure that the docker service is running, and try to run with elevated permissions.

예를 들어 linux에서 오류가 발생할 수 있습니다는 다음 실행 하는 경우 docker 명령:For example, on Linux, you might get the following error when running docker commands:

Cannot connect to the Docker daemon. Is the docker daemon running on this host?

Linux에서이 오류를 받게 되 면 앞과 동일한 명령을 실행 하십시오 sudo합니다.If you get this error on Linux, try running the same commands prefaced with sudo. 실패할 경우 docker 서비스가 실행 되 고 필요한 경우 시작을 확인 합니다.If that fails, verify the docker service is running, and start it if necessary.

sudo systemctl status docker
sudo systemctl start docker

Windows에는 시작 하는 PowerShell 또는 관리자 권한으로 명령 프롬프트를 확인 합니다.On Windows, verify that you are launching PowerShell or your command-prompt as an Administrator.

SQL Server 컨테이너 시작 오류SQL Server container startup errors

SQL Server 컨테이너를 실행 하지 못하는 경우에 다음 테스트를 시도해 보세요.If the SQL Server container fails to run, try the following tests:

  • 와 같은 오류가 발생할 경우 ' 네트워크 브리지에서 CONTAINER_NAME 끝점을 만들지 못했습니다. 프록시 시작 오류: 수신 tcp 0.0.0.0:1433 바인딩: 이미 사용 중인 주소입니다.' , 컨테이너 포트 1433을 이미 사용 중인 포트를 매핑할 하려고 합니다.If you get an error such as 'failed to create endpoint CONTAINER_NAME on network bridge. Error starting proxy: listen tcp 0.0.0.0:1433 bind: address already in use.', then you are attempting to map the container port 1433 to a port that is already in use. 이 호스트 컴퓨터에서 로컬로 SQL Server를 실행 하는 경우 발생할 수 있습니다.This can happen if you're running SQL Server locally on the host machine. 두 SQL Server 컨테이너를 시작 하 고 둘 다 동일한 호스트 포트 매핑을 시도 하는 경우에 발생할 수 있습니다.It can also happen if you start two SQL Server containers and try to map them both to the same host port. 사용 하 여 이런 경우는 -p 매개 변수를 다른 호스트 포트에 컨테이너 포트 1433을 매핑합니다.If this happens, use the -p parameter to map the container port 1433 to a different host port. 예를 들어:For example:

    docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1400:1433 -d microsoft/mssql-server-linux:2017-latest`.
    
    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1400:1433 -d microsoft/mssql-server-linux:2017-latest`.
    
  • 컨테이너에서 모든 오류 메시지가 있는지 확인 합니다.Check to see if there are any error messages from container.

    docker logs e69e056c702d
    
  • 에 지정 된 최소 메모리 및 디스크 요구 사항을 충족 해야 합니다 요구 사항 이 문서의 섹션입니다.Make sure that you meet the minimum memory and disk requirements specified in the Requirements section of this article.

  • 컨테이너 관리 소프트웨어를 사용 하는 경우 루트로 실행 중인 컨테이너 프로세스를 지원 해야 합니다.If you are using any container management software, make sure it supports container processes running as root. Sqlservr 프로세스 컨테이너의 루트로 실행합니다.The sqlservr process in the container runs as root.

  • 검토 합니다 SQL Server 설치 및 오류 로그합니다.Review the SQL Server setup and error logs.

덤프 캡처를 사용 하도록 설정Enable dump captures

SQL Server 프로세스를 컨테이너 내에서 실패 하는 경우 사용 하 여 새 컨테이너를 만들어야 SYS_PTRACE 사용 하도록 설정 합니다.If the SQL Server process is failing inside the container, you should create a new container with SYS_PTRACE enabled. 이 예외는 덤프 파일을 만드는 데 필요 하는 프로세스를 추적 하는 Linux 기능을 추가 합니다.This adds the Linux capability to trace a process, which is necessary for creating a dump file on an exception. 덤프 파일 문제를 해결 하려면 기술 지원 서비스에서 사용할 수 있습니다.The dump file can be used by support to help troubleshoot the problem. 이 기능을 사용 하는 다음 docker 명령을 실행 합니다.The following docker run command enables this capability.

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -e "MSSQL_PID=Developer" --cap-add SYS_PTRACE -p 1401:1433 -d microsoft/mssql-server-linux:2017-latest

SQL Server 연결 실패SQL Server connection failures

컨테이너에서 실행 중인 SQL Server 인스턴스에 연결할 수 없으면, 다음 테스트를 시도해 보세요.If you can't connect to the SQL Server instance running in your container, try the following tests:

  • 확인 하 여 SQL Server 컨테이너가 실행 되 고 있는지 확인 합니다 상태 열의 docker ps -a 출력 합니다.Make sure that your SQL Server container is running by looking at the STATUS column of the docker ps -a output. 그렇지 않으면 docker start <Container ID> 시작 합니다.If not, use docker start <Container ID> to start it.

  • 기본이 아닌 호스트 포트 (1433)에 매핑된 경우 연결 문자열에 포트를 지정 하는 있는지 확인 합니다.If you mapped to a non-default host port (not 1433), make sure you are specifying the port in your connection string. 에 포트 매핑을 볼 수 있습니다 합니다 포트 열을 docker ps -a 출력 합니다.You can see your port mapping in the PORTS column of the docker ps -a output. 예를 들어 다음 명령은 포트 1401에서 수신 대기 하는 컨테이너에 sqlcmd를 연결 합니다.For example, the following command connects sqlcmd to a container listening on port 1401:

    sqlcmd -S 10.3.2.4,1401 -U SA -P '<YourPassword>'
    
    sqlcmd -S 10.3.2.4,1401 -U SA -P "<YourPassword>"
    
  • 사용 하는 경우 docker run 기존 매핑된 데이터 볼륨 또는 데이터 볼륨 컨테이너를 사용 하 여 SQL Server의 값을 무시 MSSQL_SA_PASSWORD합니다.If you used docker run with an existing mapped data volume or data volume container, SQL Server ignores the value of MSSQL_SA_PASSWORD. 대신, 데이터 볼륨 또는 데이터 볼륨 컨테이너에서 SQL Server 데이터에서 미리 구성 된 SA 사용자 암호가 사용 됩니다.Instead, the pre-configured SA user password is used from the SQL Server data in the data volume or data volume container. 에 연결 하는 데이터와 관련 된 SA 암호를 사용 하 고 있는지 확인 합니다.Verify that you are using the SA password associated with the data you're attaching to.

  • 검토 합니다 SQL Server 설치 및 오류 로그합니다.Review the SQL Server setup and error logs.

SQL Server 가용성 그룹SQL Server Availability Groups

SQL Server 가용성 그룹을 사용 하 여 Docker를 사용 중인 경우 두 가지 추가 요구 사항이 있습니다.If you are using Docker with SQL Server Availability Groups, there are two additional requirements.

  • (기본값 5022) 복제본 통신에 사용 되는 포트를 매핑하십시오.Map the port that is used for replica communication (default 5022). 예를 들어 지정할 -p 5022:5022 의 일부로 프로그램 docker run 명령입니다.For example, specify -p 5022:5022 as part of your docker run command.

  • 명시적으로 사용 하 여 컨테이너 호스트 이름을 설정 합니다 -h YOURHOSTNAME 의 매개 변수는 docker run 명령입니다.Explicitly set the container host name with the -h YOURHOSTNAME parameter of the docker run command. 가용성 그룹을 구성할 때이 호스트 이름이 사용 됩니다.This host name is used when you configure your Availability Group. 사용 하 여 지정 하지 않으면 -h, 컨테이너 id입니다. 기본값은If you don't specify it with -h, it defaults to the container ID.

SQL Server 설치 및 오류 로그SQL Server setup and error logs

SQL Server 설치 프로그램을 살펴볼 수 있습니다 하 고 오류 로그인 /var/opt/mssql/log합니다.You can look at the SQL Server setup and error logs in /var/opt/mssql/log. 컨테이너를 실행 하지 않는 경우 먼저 컨테이너를 시작 합니다.If the container is not running, first start the container. 다음 로그를 검사 하는 대화형 명령 프롬프트를 사용 합니다.Then use an interactive command-prompt to inspect the logs.

docker start e69e056c702d
docker exec -it e69e056c702d "bash"

컨테이너 내에서 bash 세션에서 다음 명령을 실행 합니다.From the bash session inside your container, run the following commands:

cd /var/opt/mssql/log
cat setup*.log
cat errorlog

호스트 디렉터리를 탑재 하는 경우 /var/opt/mssql 컨테이너를 만들 때을 대신 참조를 로그 호스트에서 매핑된 경로에 하위 디렉터리입니다.If you mounted a host directory to /var/opt/mssql when you created your container, you can instead look in the log subdirectory on the mapped path on the host.

다음 단계Next steps

통해 이동 하 여 Docker에서 SQL Server 2017 컨테이너 이미지를 사용 하 여 시작 합니다 퀵 스타트합니다.Get started with SQL Server 2017 container images on Docker by going through the quickstart.

참고: 합니다 mssql docker GitHub 리포지토리 리소스, 피드백 및 알려진된 문제에 대 한 합니다.Also, see the mssql-docker GitHub repository for resources, feedback, and known issues.