Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:Linux üzerinde SQL Server
Bu makalede Docker kullanarak SQL Server Linux kapsayıcılarını nasıl yapılandırabileceğiniz ve özelleştirebileceğiniz açıklanır. Verilerinizi kalıcı yapabilir, kapsayıcılardan kapsayıcılara dosya taşıyabilir ve varsayılan ayarları değiştirebilirsiniz.
Bahşiş
Geliştirme amacıyla kapsayıcıda yeni bir SQL Server örneği oluşturmak için sqlcmd (Go) kullanabilirsiniz. Daha fazla bilgi için bkz. SQL Server kapsayıcısını oluşturma ve sorgulama.
Özelleştirilmiş kapsayıcı oluşturma
Özelleştirilmiş bir SQL Server kapsayıcısı oluşturmak için kendi Dockerfile oluşturabilirsiniz. Daha fazla bilgi için SQL Server ile bir Node uygulamasını birleştiren tanıtım'e bakın. Kendi Dockerfile'ınızı oluşturursanız, konteynerin ömrünü kontrol ettiği için ön plandaki sürece dikkat edin. Eğer çıkış yaparsa, kapsayıcı kapanır. Örneğin, bir betik çalıştırmak ve SQL Server'ı başlatmak istiyorsanız, SQL Server işleminin en doğru komut olduğundan emin olun. Diğer tüm komutlar arka planda çalıştırılır. Aşağıdaki komut bunu bir Dockerfile içinde gösterir:
/usr/src/app/do-my-sql-commands.sh & /opt/mssql/bin/sqlservr
Önceki örnekteki komutları tersine çevirdiyseniz, do-my-sql-commands.sh betiği tamamlandığında kapsayıcı kapatılır.
Verilerinizi kalıcı hale
docker stop ve docker startile kapsayıcıyı yeniden başlatsanız bile SQL Server yapılandırma değişiklikleriniz ve veritabanı dosyalarınız kapsayıcıda kalıcı hale gönderilir. Ancak kapsayıcıyı docker rmile kaldırırsanız SQL Server ve veritabanlarınız da dahil olmak üzere kapsayıcıdaki her şey silinir. Aşağıdaki bölümde, ilişkili kapsayıcılar silinse bile veritabanı dosyalarınızı kalıcı hale getirmek için veri birimlerinin nasıl kullanılacağı açıklanmaktadır.
Önemli
SQL Server için, Docker'da veri kalıcılığını anlamanız önemlidir. Bu bölümdeki tartışmaya ek olarak, docker kapsayıcılarındaki verilerin nasıl yönetileceğiniile ilgili Docker belgelerine bakın.
Bir konak dizinini veri birimi olarak bağla
İlk seçenek, kapsayıcınızda veri birimi olarak ana bilgisayarınıza bir dizin bağlamaktır. Bunu yapmak için docker run komutunu -v <host directory>:/var/opt/mssql bayrağıyla birlikte kullanın; burada <host directory> herhangi bir yoldur. Örneğin: Windows'ta C:\SQL veya Linux'ta ~/sqlvolumes. Bu, verilerin kapsayıcı yürütmeleri arasında geri yüklenmesini sağlar.
Not
SQL Server 2019 (15.x) ve sonraki sürümleri için kapsayıcılar otomatik olarak kök olmayan olarak başlatılırken, SQL Server 2017 (14.x) kapsayıcıları varsayılan olarak kök olarak başlar. SQL Server kapsayıcılarını kök olmayan olarak çalıştırma hakkında daha fazla bilgi için bkz. güvenli SQL Server Linux kapsayıcıları .
Önemli
SA_PASSWORD ortam değişkeni kullanım dışıdır. Bunun yerine MSSQL_SA_PASSWORD kullanın.
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' \
-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=<password>" `
-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=<password>" ^
-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=<password>' \
-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=<password>" `
-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=<password>" ^
-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=<password>' \
-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:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" `
-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:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" ^
-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:2022-latest
Dikkat
Parolanız, SQL Server varsayılanparola ilkesine uygun olmalıdır. Varsayılan olarak, parola en az sekiz karakter uzunluğunda olmalı ve şu dört kümeden üçünün karakterlerini içermelidir: büyük harfler, küçük harfler, 10 tabanındaki basamaklar ve simgeler. Parolalar en çok 128 karakter uzunluğunda olabilir. Mümkün olduğunca uzun ve karmaşık parolalar kullanın.
Bu teknik ayrıca Docker dışındaki konakta dosyaları paylaşmanızı ve görüntülemenizi sağlar.
Veri birimi kapsayıcılarını kullanma
İkinci seçenek bir veri birimi kapsayıcısı kullanmaktır.
-v parametresiyle konak dizini yerine birim adı belirterek bir veri birimi kapsayıcısı oluşturabilirsiniz. Aşağıdaki örnek, sqlvolumeadlı bir paylaşılan veri birimi oluşturur.
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' \
-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=<password>" `
-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=<password>" ^
-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=<password>' \
-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=<password>" `
-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=<password>" ^
-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=<password>' \
-p 1433:1433 \
-v sqlvolume:/var/opt/mssql \
-d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" `
-p 1433:1433 `
-v sqlvolume:/var/opt/mssql `
-d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" ^
-p 1433:1433 ^
-v sqlvolume:/var/opt/mssql ^
-d mcr.microsoft.com/mssql/server:2022-latest
Dikkat
Parolanız, SQL Server varsayılanparola ilkesine uygun olmalıdır. Varsayılan olarak, parola en az sekiz karakter uzunluğunda olmalı ve şu dört kümeden üçünün karakterlerini içermelidir: büyük harfler, küçük harfler, 10 tabanındaki basamaklar ve simgeler. Parolalar en çok 128 karakter uzunluğunda olabilir. Mümkün olduğunca uzun ve karmaşık parolalar kullanın.
Çalıştırma komutunda örtük olarak bir veri birimi oluşturmaya yönelik bu teknik, Docker'ın eski sürümleriyle çalışmaz. Bu durumda, Docker belgelerinde belirtilen veri birimi kapsayıcısı oluşturma ve bağlamaaçık adımları kullanabilirsiniz.
Bu kapsayıcıyı durdurup kaldırsanız bile veri birimi devam eder.
docker volume ls komutuyla görüntüleyebilirsiniz.
docker volume ls
Daha sonra aynı birim adına sahip başka bir kapsayıcı oluşturursanız, yeni kapsayıcı birimdeki SQL Server verilerini kullanır.
Veri birimi kapsayıcısını kaldırmak için docker volume rm komutunu kullanın.
Uyarı
Veri birimi kapsayıcısını silerseniz kapsayıcıdaki tüm SQL Server verileri kalıcı olarak silinir.
Yedekleme ve geri yükleme
Bu kapsayıcı tekniklerine ek olarak, standart SQL Server yedekleme ve geri yükleme tekniklerini de kullanabilirsiniz. Verilerinizi korumak veya verileri başka bir SQL Server örneğine taşımak için yedekleme dosyalarını kullanabilirsiniz. Daha fazla bilgi için bkz. linux SQL Server veritabanlarını yedekleme ve geri yükleme.
Uyarı
Yedeklemeler oluşturursanız, yedekleme dosyalarını kapsayıcının dışında oluşturduğunuzdan veya kopyaladığınızdan emin olun. Aksi takdirde, kapsayıcı kaldırılırsa yedekleme dosyaları da silinir.
Kapsayıcılarda VDI yedeklemesini ve geri yüklemesini etkinleştirme
Sanal Cihaz Arabirimi (VDI) yedekleme ve geri yükleme işlemleri artık SQL Server 2019 için CU15 (15.x) ve SQL Server 2017 için CU28 (14.x) ile başlayan SQL Server kapsayıcı dağıtımlarında desteklenmektedir. SQL Server kapsayıcıları için VDI tabanlı yedeklemeyi veya geri yüklemeleri etkinleştirmek için şu adımları izleyin:
SQL Server kapsayıcılarını dağıtırken
--shm-sizeseçeneğini kullanın. Başlamak için, aşağıdaki komutta gösterildiği gibi boyutlandırmayı 1 GB olarak ayarlayın.<password>geçerli bir parolayla değiştirin.docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" \ --shm-size 1g \ -p 1433:1433 \ --name sql19 \ --hostname sql19 \ -d mcr.microsoft.com/mssql/server:2019-latestseçenek
--shm-size, kapsayıcının içindeki paylaşılan bellek dizininin (/dev/shm) boyutunu yapılandırmanıza olanak tanır ve bu boyut varsayılan olarak 64 MB olarak ayarlanır. Paylaşılan belleğin bu varsayılan boyutu, VDI yedeklemelerini desteklemek için yetersizdir. SQL Server kapsayıcılarını dağıtırken ve VDI yedeklemelerini desteklemek istediğinizde bunu en az 1 GB olarak yapılandırmanızı öneririz.Kapsayıcı içinde
memory.enablecontainersharedmemory'deki yeni parametremssql.conf'ı da etkinleştirmeniz gerekir. Kapsayıcıyı dağıtırkenmssql.confbölümünde açıklandığı gibi-vseçeneğini kullanarak bağlayabilir veya kapsayıcıyı dağıttıktan sonra kapsayıcının içindekimssql.conf'i manuel olarak güncelleyebilirsiniz. aşağıdamssql.confayarınınmemory.enablecontainersharedmemoryolarak ayarlandığı örnek birtruedosyası verilmiş.[memory] enablecontainersharedmemory = true
Kapsayıcıdan dosya kopyalama
Kapsayıcıdan dosya kopyalamak için aşağıdaki komutu kullanın:
docker cp <Container ID>:<Container path> <host path>
docker ps -akomutunu çalıştırarak Kapsayıcı Kimliğini alabilirsiniz.
Örnek:
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
Dosyaları kapsayıcıya kopyalama
Kapsayıcıya dosya kopyalamak için aşağıdaki komutu kullanın:
docker cp <Host path> <Container ID>:<Container path>
Örnek:
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
Saat dilimini yapılandırma
SQL Server'ı belirli bir saat dilimine sahip bir Linux kapsayıcısında çalıştırmak için ortam değişkenini TZ yapılandırın (daha fazla bilgi için bkz. Linux'ta SQL Server 2022 ve sonraki sürümleri için saat dilimini yapılandırma ). Doğru saat dilimi değerini bulmak için linux bash isteminden tzselect komutunu çalıştırın:
tzselect
Saat dilimini seçtikten sonra, tzselect'nın çıkışı aşağıdaki örneğe benzer bir şekilde görüntülenir.
The following information has been given:
United States
Pacific
Therefore TZ='America/Los_Angeles' will be used.
Linux kapsayıcınızda aynı ortam değişkenini ayarlamak için bu bilgileri kullanabilirsiniz. Aşağıdaki örnekte SQL Server'ın Americas/Los_Angeles saat dilimindeki bir kapsayıcıda nasıl çalıştırılır gösterilmektedir:
sudo docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' \
-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=<password>" `
-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=<password>" ^
-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=<password>' \
-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=<password>" `
-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=<password>" `
-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=<password>' \
-p 1433:1433 --name sql1 \
-e 'TZ=America/Los_Angeles' \
-d mcr.microsoft.com/mssql/server:2022-latest
sudo docker run -e 'ACCEPT_EULA=Y' -e "MSSQL_SA_PASSWORD=<password>" `
-p 1433:1433 --name sql1 `
-e "TZ=America/Los_Angeles" `
-d mcr.microsoft.com/mssql/server:2022-latest
sudo docker run -e 'ACCEPT_EULA=Y' -e "MSSQL_SA_PASSWORD=<password>" ^
-p 1433:1433 --name sql1 ^
-e "TZ=America/Los_Angeles" ^
-d mcr.microsoft.com/mssql/server:2022-latest
sudo docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' \
-p 1433:1433 --name sql1 \
-e 'TZ=America/Los_Angeles' \
-d mcr.microsoft.com/mssql/server:2025-latest
sudo docker run -e 'ACCEPT_EULA=Y' -e "MSSQL_SA_PASSWORD=<password>" `
-p 1433:1433 --name sql1 `
-e "TZ=America/Los_Angeles" `
-d mcr.microsoft.com/mssql/server:2025-latest
sudo docker run -e 'ACCEPT_EULA=Y' -e "MSSQL_SA_PASSWORD=<password>" ^
-p 1433:1433 --name sql1 ^
-e "TZ=America/Los_Angeles" ^
-d mcr.microsoft.com/mssql/server:2025-latest
Dikkat
Parolanız, SQL Server varsayılanparola ilkesine uygun olmalıdır. Varsayılan olarak, parola en az sekiz karakter uzunluğunda olmalı ve şu dört kümeden üçünün karakterlerini içermelidir: büyük harfler, küçük harfler, 10 tabanındaki basamaklar ve simgeler. Parolalar en çok 128 karakter uzunluğunda olabilir. Mümkün olduğunca uzun ve karmaşık parolalar kullanın.
tempdb yolunu değiştirme
tempdb veritabanınızı kullanıcı veritabanlarınızdan ayrı tutmak iyi bir uygulamadır.
SQL Server örneğine bağlanın ve ardından aşağıdaki Transact-SQL (T-SQL) betiğini çalıştırın.
tempdbile ilişkili daha fazla dosya varsa, bunları da taşımanız gerekir.ALTER DATABASE tempdb MODIFY FILE (NAME = tempdev, FILENAME = '/var/opt/mssql/tempdb/tempdb.mdf'); GO ALTER DATABASE tempdb MODIFY FILE (NAME = templog, FILENAME = '/var/opt/mssql/tempdb/templog.ldf'); GOAşağıdaki T-SQL betiğini kullanarak
tempdbdosya konumunun değiştirildiğini doğrulayın:SELECT * FROM sys.sysaltfiles WHERE dbid = 2;Bu değişikliklerin etkili olması için SQL Server kapsayıcısını yeniden başlatmanız gerekir.
docker stop sql1 docker start sql1docker stop sql1 docker start sql1docker stop sql1 docker start sql1Kapsayıcıya bağlanmak için etkileşimli bir
bashoturumu açın.docker exec -it sql1 bashdocker exec -it sql1 bashdocker exec -it sql1 bashEtkileşimli kabuğa bağlandıktan sonra,
tempdbkonumunu denetlemek için aşağıdaki komutu çalıştırın:ls /var/opt/mssql/tempdb/Taşıma başarılı olursa benzer bir sonuç görürsünüz:
tempdb.mdf templog.ldf
Varsayılan dosya konumunu değiştirme
MSSQL_DATA_DIR komutunuzda veri dizininizi değiştirmek için docker run değişkenini ekleyin, ardından kapsayıcınızın kullanıcısının erişimi olan konuma bir birim bağlayın.
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' \
-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 "MSSQL_SA_PASSWORD=<password>" `
-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 "MSSQL_SA_PASSWORD=<password>" ^
-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 'MSSQL_SA_PASSWORD=<password>' \
-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 "MSSQL_SA_PASSWORD=<password>" `
-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 "MSSQL_SA_PASSWORD=<password>" ^
-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 'MSSQL_SA_PASSWORD=<password>' \
-e 'MSSQL_DATA_DIR=/my/file/path' \
-v /my/host/path:/my/file/path \
-p 1433:1433 \
-d mcr.microsoft.com/mssql/server:2022-latest
docker run -e 'ACCEPT_EULA=Y' -e "MSSQL_SA_PASSWORD=<password>" `
-e "MSSQL_DATA_DIR=/my/file/path" `
-v /my/host/path:/my/file/path `
-p 1433:1433 `
-d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" ^
-e "MSSQL_DATA_DIR=/my/file/path" ^
-v /my/host/path:/my/file/path ^
-p 1433:1433 ^
-d mcr.microsoft.com/mssql/server:2022-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' \
-e 'MSSQL_DATA_DIR=/my/file/path' \
-v /my/host/path:/my/file/path \
-p 1433:1433 \
-d mcr.microsoft.com/mssql/server:2025-latest
docker run -e 'ACCEPT_EULA=Y' -e "MSSQL_SA_PASSWORD=<password>" `
-e "MSSQL_DATA_DIR=/my/file/path" `
-v /my/host/path:/my/file/path `
-p 1433:1433 `
-d mcr.microsoft.com/mssql/server:2025-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" ^
-e "MSSQL_DATA_DIR=/my/file/path" ^
-v /my/host/path:/my/file/path ^
-p 1433:1433 ^
-d mcr.microsoft.com/mssql/server:2025-latest
Kapsayıcı içinde SQL Server'ı yapılandırmak için mssql-config kullanma
SQL Server kapsayıcılarında parametreleri ayarlamak için mssql-conf aracını kullanabilirsiniz.
Örneğin, aşağıdaki adımları kullanarak örnek için bir bellek sınırı ayarlayabilirsiniz:
kök kullanıcı olarak
docker execkullanarak kapsayıcıya doğrudan bağlanın.sqlcontaineryerine kapsayıcı adınızı yazın.docker exec -u root -it sqlcontainer "bash"Bir ayarı değiştirmek için mssql-conf kullanın. Bu örnek,
memory.memorylimitmbayarını 2 GB (2.048 MB) olarak değiştirir./opt/mssql/bin/mssql-conf set memory.memorylimitmb 2048
Özel Docker kapsayıcı örnekleri
Özel Docker kapsayıcıları örnekleri için bkz. https://github.com/microsoft/mssql-docker/tree/master/linux/preview/examples. Örnekler şunlardır:
- Dockerfile örneği Full-Text Search ile
- RHEL 7 ve SQL Server 2019 için Dockerfile örneği
- RHEL 8 ve SQL Server 2017 için Dockerfile örneği
- Full-Text Search, PolyBase ve Araçlar ile Ubuntu 20.04 ve SQL Server 2019 için Dockerfile örneği
Dockerfiles kullanarak Docker kapsayıcıları oluşturma ve çalıştırma hakkında bilgi için GitHub'da ML Services örneklerine bakın.
Denetim grubu (cgroup) v2 desteği
SQL Server, SQL Server 2025 (17.x) ve SQL Server 2022 (16.x) Toplu Güncelleştirme (CU) 20'den başlayarak denetim grubu (cgroup) v2 kısıtlamalarını algılar ve kabul eder. Bu kısıtlamalar Linux çekirdeğinde CPU ve bellek kaynakları üzerinde ayrıntılı denetim sağlar ve Docker, Kubernetes ve OpenShift ortamlarında kaynak yalıtımını geliştirir.
Önceki sürümlerde Kubernetes kümelerindeki kapsayıcılı dağıtımlar (örneğin, Azure Kubernetes Service v1.25+), SQL Server kapsayıcı belirtimlerinde tanımlanan bellek sınırlarını zorlamadığından bellek yetersiz (OOM) hatalarıyla karşılaşabiliyordu. Cgroup v2 desteği bu sorunu giderir.
Cgroup sürümünü denetleme
stat -fc %T /sys/fs/cgroup
Sonuçlar aşağıdaki gibidir:
| Result | Description |
|---|---|
cgroup2fs |
cgroup v2 kullanıyorsunuz |
cgroup |
cgroup v1 kullanıyorsunuz |
cgroup v2'ye geçme
En kolay yol, kutudan çıkararak cgroup v2'yi destekleyen bir dağıtım seçmektir.
El ile geçiş yapmanız gerekiyorsa GRUB yapılandırmanıza aşağıdaki parametreyi ekleyin:
systemd.unified_cgroup_hierarchy=1
Ardından GRUB'yi güncelleştirin. Örneğin Ubuntu'da şunu çalıştırın:
sudo update-grub
Red Hat Enterprise Linux'ta (RHEL) şu komutu çalıştırın:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
cgroup v2 ile CPU sınırı raporlaması
cgroup v2 kullanarak CPU sınırlarını yapılandırdığınızda, SQL Server hata günlüğünde yapılandırılmış CPU çekirdek sayısını göstermez. Bunun yerine, toplam konak CPU sayısını raporlamaya devam eder.
SQL Server zamanlayıcı ve sorgu planlarını (örneğin, paralellik kararları) cgroup v2'de tanımlanan hedefLENEN CPU sayısıyla hizalamak için aşağıdaki yapılandırmayı uygulayın.
İşlemci benzitesini yapılandırma
SQL Server işlemci benzitesini açıkça cgroup yürütme kotasıyla eşleşecek şekilde ayarlayın. Aşağıdaki örnekte, cgroup kotası sekiz çekirdekli bir konakta dört CPU'dur:
ALTER SERVER CONFIGURATION
SET PROCESS AFFINITY CPU = 0 TO 3;
Bu yapılandırma, SQL Server yalnızca hedeflenen CPU sayısı için zamanlayıcılar oluşturmasını sağlar. Daha fazla bilgi için bkz. ALTER SERVER CONFIGURATION ve Düğüm ve/veya CPU'lar için İŞLEM BAĞLILIĞINI Kullanın.
İzleme bayrağı 8002'yi etkinleştirme (önerilir)
SQLPAL katmanında yumuşak benzeşimi kullanmak için izleme bayrağı 8002'yi etkinleştirin:
sudo /opt/mssql/bin/mssql-conf traceflag 8002 on
Zamanlayıcılar varsayılan olarak benşim maskesinde tanımlanan belirli CPU'lara bağlıdır. İzleme bayrağı 8002, zamanlayıcıların bunun yerine CPU'lar arasında hareket etmesine olanak tanır ve bu da genellikle yakınlık ve cgroup kısıtlamalarına saygı gösterirken performansı artırır. Daha fazla bilgi için bkz. DBCC TRACEON - İzleme Bayrakları.
İzleme bayrağını etkinleştirdikten sonra SQL Server yeniden başlatın.
Beklenen davranış
Yeniden başlatıldıktan sonra:
SQL Server yalnızca benşim ayarı tarafından tanımlanan zamanlayıcı sayısını (örneğin, dört zamanlayıcı) oluşturur.
Linux çekirdeği cgroup v2 CPU yürütme kotasını zorlamaya devam eder.
Sorgu iyileştirme ve paralellik kararları, toplam konak CPU'lar yerine hedeflenen CPU sayısını temel alır.
Not
SQL Server hata günlüğü, toplam konak CPU sayısını görüntülemeye devam edebilir. Bu günlüğe kaydetme ve görüntüleme davranışı, cgroup v2 veya işlemci benzenşimi tarafından gerçek CPU kullanımını, zamanlayıcı oluşturmayı veya CPU zorlamasını etkilemez.
Daha fazla bilgi için aşağıdaki kaynaklara bakın:
- Hızlı Başlangıç: Helm grafiklerini kullanarak Kubernetes'e SQL Server Linux kapsayıcısı dağıtma
- Denetim Grubu v2 (Linux Çekirdeği belgeleri)
İlgili içerik
- hızlı başlangıç kılavuzunu takip ederek Docker'da SQL Server 2017 (14.x) kapsayıcı imajlarını kullanmaya başlayın.
- hızlı başlangıç ilerleyerek Docker'da SQL Server 2019 (15.x) kapsayıcı görüntülerini kullanmaya başlayın
- Docker'da SQL Server 2022 (16.x) kapsayıcı görüntülerini kullanmaya başlamak için hızlı başlangıç kılavuzu ile başlayın.
- Hızlı başlangıcı izleyerek Docker'da SQL Server 2025 (17.x) kapsayıcı görüntülerini kullanmaya başlama
SQL belgelerine katkıda bulunma
SQL içeriğini kendiniz düzenleyebildiğinizi biliyor muydunuz? Bunu yaparsanız, belgelerimizin geliştirilmesine yardımcı olmakla kalmaz, aynı zamanda sayfaya katkıda bulunan olarak da kabul edilirsiniz.
Daha fazla bilgi için bkz. Microsoft Learn belgelerini düzenleme.