SQL Server Docker 컨테이너 구성 및 사용자 지정Configure and customize SQL Server Docker containers

적용 대상:Applies to: 예SQL ServerSQL Server(지원되는 모든 버전)yesSQL ServerSQL Server (all supported versions) - Linux적용 대상:Applies to: 예SQL ServerSQL Server(지원되는 모든 버전)yesSQL ServerSQL Server (all supported versions) - Linux

이 문서에서는 데이터 유지, 컨테이너 간 파일 이동, 기본 설정 변경과 같이 SQL Server Docker 컨테이너의 구성 및 사용자 지정 방식을 설명합니다.This article explains how you can configure and customize SQL Server Docker containers, such as persisting your data, moving files from and to containers, and changing default settings.

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

사용자 고유의 Dockerfile을 만들어 사용자 지정 SQL Server 컨테이너를 만들 수 있습니다.It is possible to create your own Dockerfile to create a customized SQL Server container. 자세한 내용은 SQL Server와 노드 애플리케이션을 결합하는 데모를 참조하세요.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 shut down. 예를 들어 스크립트를 실행하고 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 내에서 이러한 동작을 보여 줍니다.The following command illustrates this inside a Dockerfile:

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

위 예제의 명령을 역순으로 실행하면 do-my-sql-commands.sh 스크립트가 완료될 때 컨테이너가 종료됩니다.If you reversed the commands in the previous example, the container would shut down when the do-my-sql-commands.sh script completes.

데이터 유지Persist your data

docker stopdocker start를 사용하여 컨테이너를 다시 시작하는 경우에도 SQL Server 구성 변경 내용과 데이터베이스 파일이 컨테이너에 유지됩니다.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>/data:/var/opt/mssql/data -v <host directory>/log:/var/opt/mssql/log -v <host directory>/secrets:/var/opt/mssql/secrets -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1433:1433 -v <host directory>/data:/var/opt/mssql/data -v <host directory>/log:/var/opt/mssql/log -v <host directory>/secrets:/var/opt/mssql/secrets -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1433:1433 -v <host directory>/data:/var/opt/mssql/data -v <host directory>/log:/var/opt/mssql/log -v <host directory>/secrets:/var/opt/mssql/secrets -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1433:1433 -v <host directory>/data:/var/opt/mssql/data -v <host directory>/log:/var/opt/mssql/log -v <host directory>/secrets:/var/opt/mssql/secrets -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1433:1433 -v <host directory>/data:/var/opt/mssql/data -v <host directory>/log:/var/opt/mssql/log -v <host directory>/secrets:/var/opt/mssql/secrets -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1433:1433 -v <host directory>/data:/var/opt/mssql/data -v <host directory>/log:/var/opt/mssql/log -v <host directory>/secrets:/var/opt/mssql/secrets -d mcr.microsoft.com/mssql/server:2019-latest

이 방법을 사용하여 Docker 외부에서 호스트의 파일을 공유하고 볼 수도 있습니다.This technique also enables you to share and view the files on the host outside of Docker.

중요

Docker on Windows의 호스트 볼륨 매핑은 현재 전체 /var/opt/mssql 디렉터리 매핑을 지원하지 않습니다.Host volume mapping for Docker on Windows does not currently support mapping the complete /var/opt/mssql directory. 그러나 /var/opt/mssql/data 등의 하위 디렉터리를 호스트 머신에 매핑할 수 있습니다.However, you can map a subdirectory, such as /var/opt/mssql/data to your host machine.

SQL Server on Linux 이미지와 Docker on Mac 간의 호스트 볼륨 매핑은 현재 지원되지 않습니다.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. 예를 들어 Mac에서-v를 사용하여 호스트 디렉터리를 탑재하고 호스트에 있는 .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 mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1433:1433 -v sqlvolume:/var/opt/mssql -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1433:1433 -v sqlvolume:/var/opt/mssql -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1433:1433 -v sqlvolume:/var/opt/mssql -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1433:1433 -v sqlvolume:/var/opt/mssql -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1433:1433 -v sqlvolume:/var/opt/mssql -d mcr.microsoft.com/mssql/server:2019-latest

참고

run 명령에서 암시적으로 데이터 볼륨을 만드는 이 방법은 이전 버전의 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

그런 다음, 동일한 볼륨 이름을 사용하여 다른 컨테이너를 만들면 새 컨테이너는 볼륨에 포함된 것과 동일한 SQL Server 데이터를 사용합니다.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 volume rm 명령을 사용합니다.To remove a data volume container, use the docker volume rm command.

경고

데이터 볼륨 컨테이너를 삭제하면 컨테이너의 모든 SQL Server 데이터가 ‘영구적으로’ 삭제됩니다. If you delete the data volume container, any SQL Server data in the container is permanently deleted.

백업 및 복원Backup and restore

이러한 컨테이너 방법 외에 표준 SQL Server 백업 및 복원 방법을 사용할 수도 있습니다.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.

컨테이너에서 파일 복사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>

docker ps -a 명령을 실행하여 컨테이너 ID를 가져올 수 있습니다.You can get the Container ID by running the command docker ps -a.

예:Example:

docker cp d6b75213ef80:/var/opt/mssql/log/errorlog /tmp/errorlog
docker cp d6b75213ef80:/var/opt/mssql/log/errorlog C:\Temp\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
docker cp C:\Temp\mydb.mdf d6b75213ef80:/var/opt/mssql/data

표준 시간대 구성Configure the timezone

특정 표준 시간대의 Linux 컨테이너에서 SQL Server를 실행하려면 TZ 환경 변수를 구성합니다.To run SQL Server in a Linux container with a specific timezone, configure the TZ environment variable. 올바른 표준 시간대 값을 찾으려면 Linux bash 프롬프트에서 tzselect 명령을 실행합니다.To find the right timezone value, run the tzselect command from a Linux bash prompt:

tzselect

표준 시간대를 선택하면 tzselect에서 다음과 비슷한 출력이 표시됩니다.After selecting the timezone, tzselect displays output similar to the following:

The following information has been given:

        United States
        Pacific

Therefore TZ='America/Los_Angeles' will be used.

이 정보를 사용하여 Linux 컨테이너에서 동일한 환경 변수를 설정할 수 있습니다.You can use this information to set the same environment variable in your Linux container. 다음 예제에서는 Americas/Los_Angeles 표준 시간대의 컨테이너에서 SQL Server를 실행하는 방법을 보여 줍니다.The following example shows how to run SQL Server in a container in the Americas/Los_Angeles timezone:

sudo docker run -e 'ACCEPT_EULA=Y' -e 'A_PASSWORD=<YourStrong!Passw0rd>' \
-p 1433:1433 --name sql1 \
-e 'TZ=America/Los_Angeles'\
-d mcr.microsoft.com/mssql/server:2017-latest
sudo docker run -e 'ACCEPT_EULA=Y' -e "SA_PASSWORD=<YourStrong!Passw0rd>" `
-p 1433:1433 --name sql1 `
-e "TZ=America/Los_Angeles" `
-d mcr.microsoft.com/mssql/server:2017-latest 
sudo docker run -e 'ACCEPT_EULA=Y' -e "SA_PASSWORD=<YourStrong!Passw0rd>" `
-p 1433:1433 --name sql1 ^
-e "TZ=America/Los_Angeles" ^
-d mcr.microsoft.com/mssql/server:2017-latest 
sudo docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' \
   -p 1433:1433 --name sql1 \
   -e 'TZ=America/Los_Angeles'\
   -d mcr.microsoft.com/mssql/server:2019-latest
sudo docker run -e 'ACCEPT_EULA=Y' -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" `
   -p 1433:1433 --name sql1 `
   -e "TZ=America/Los_Angeles" `
   -d mcr.microsoft.com/mssql/server:2019-latest
sudo docker run -e 'ACCEPT_EULA=Y' -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" `
   -p 1433:1433 --name sql1 `
   -e "TZ=America/Los_Angeles" `
   -d mcr.microsoft.com/mssql/server:2019-latest

기본 파일 위치 변경Change the default file location

MSSQL_DATA_DIR 변수를 추가하여 docker run 명령에서 데이터 디렉터리를 변경한 다음, 컨테이너의 사용자가 액세스할 수 있는 위치에 볼륨을 탑재합니다.Add the MSSQL_DATA_DIR variable to change your data directory in your docker run command, then mount a volume to that location that your container’s user has access to.

docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=MyStrongPassword' -e 'MSSQL_DATA_DIR=/my/file/path' -v /my/host/path:/my/file/path -p 1433:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e 'ACCEPT_EULA=Y' -e "SA_PASSWORD=MyStrongPassword" -e "MSSQL_DATA_DIR=/my/file/path" -v /my/host/path:/my/file/path -p 1433:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=MyStrongPassword" -e "MSSQL_DATA_DIR=/my/file/path" -v /my/host/path:/my/file/path -p 1433:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=MyStrongPassword' -e 'MSSQL_DATA_DIR=/my/file/path' -v /my/host/path:/my/file/path -p 1433:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e 'ACCEPT_EULA=Y' -e "SA_PASSWORD=MyStrongPassword" -e "MSSQL_DATA_DIR=/my/file/path" -v /my/host/path:/my/file/path -p 1433:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=MyStrongPassword" -e "MSSQL_DATA_DIR=/my/file/path" -v /my/host/path:/my/file/path -p 1433:1433 -d mcr.microsoft.com/mssql/server:2019-latest

다음 단계Next steps

  • 빠른 시작을 진행하여 Docker에서 SQL Server 2017 컨테이너 이미지로 시작합니다.Get started with SQL Server 2017 container images on Docker by going through the quickstart
  • 빠른 시작을 진행하여 Docker에서 SQL Server 2019 컨테이너 이미지로 시작합니다.Get started with SQL Server 2019 container images on Docker by going through the quickstart