Mengonfigurasi dan menyesuaikan kontainer SQL Server Linux
Berlaku untuk: SQL Server - Linux
Artikel ini menjelaskan cara mengonfigurasi dan menyesuaikan kontainer SQL Server Linux menggunakan Docker. Anda dapat mempertahankan data Anda, memindahkan file dari dan ke kontainer, dan mengubah pengaturan default.
Tip
Anda dapat menggunakan sqlcmd (Go) untuk membuat instans baru SQL Server dalam kontainer untuk tujuan pengembangan. Untuk informasi selengkapnya, lihat Membuat dan mengkueri kontainer SQL Server.
Membuat kontainer yang dikustomisasi
Anda dapat membuat Dockerfile Anda sendiri untuk membangun kontainer SQL Server yang disesuaikan. Untuk informasi selengkapnya, lihat demo yang menggabungkan SQL Server dan aplikasi Node. Jika Anda membuat Dockerfile Anda sendiri, ketahui proses latar depan, karena proses ini mengontrol masa pakai kontainer. Jika keluar, kontainer akan dimatikan. Misalnya, jika Anda ingin menjalankan skrip dan memulai SQL Server, pastikan bahwa proses SQL Server adalah perintah paling tepat. Semua perintah lainnya dijalankan di latar belakang. Perintah berikut mengilustrasikan ini di dalam Dockerfile:
/usr/src/app/do-my-sql-commands.sh & /opt/mssql/bin/sqlservr
Jika Anda membalikkan perintah dalam contoh sebelumnya, kontainer akan dimatikan saat skrip do-my-sql-commands.sh selesai.
Pertahankan data Anda
Perubahan konfigurasi SQL Server dan file database Anda tetap ada di kontainer bahkan jika Anda memulai ulang kontainer dengan docker stop
dan docker start
. Namun, jika Anda menghapus kontainer dengan docker rm
, semua yang ada dalam kontainer dihapus, termasuk SQL Server dan database Anda. Bagian berikut menjelaskan cara menggunakan volume data untuk mempertahankan file database Anda meskipun kontainer terkait dihapus.
Penting
Untuk SQL Server, sangat penting bagi Anda untuk memahami kegigihan data di Docker. Selain diskusi di bagian ini, lihat dokumentasi Docker tentang cara mengelola data dalam kontainer Docker.
Memasang direktori host sebagai volume data
Opsi pertama adalah memasang direktori pada host Anda sebagai volume data di kontainer Anda. Untuk melakukannya, gunakan docker run
perintah dengan -v <host directory>:/var/opt/mssql
bendera, di mana <host directory>
adalah jalur tertentu. Misalnya: C:\SQL
di Windows, atau ~/sqlvolumes
di Linux. Tindakan ini memungkinkan data dipulihkan di antara eksekusi kontainer.
Catatan
Kontainer untuk SQL Server 2019 (15.x) dan versi yang lebih baru secara otomatis dimulai sebagai non-root, sementara kontainer SQL Server 2017 (14.x) dimulai sebagai root secara default. Untuk informasi selengkapnya tentang menjalankan kontainer SQL Server sebagai non-root, lihat Kontainer Linux SQL Server Aman.
Penting
Variabel SA_PASSWORD
lingkungan tidak digunakan lagi. Gunakan MSSQL_SA_PASSWORD
sebagai gantinya.
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 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:2022-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:2022-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:2022-latest
Teknik ini juga memungkinkan Anda untuk berbagi dan melihat file di host di luar Docker.
Menggunakan kontainer volume data
Opsi kedua adalah menggunakan kontainer volume data. Anda dapat membuat kontainer volume data dengan menentukan nama volume, bukan direktori host dengan parameter -v
. Contoh berikut membuat volume data bersama bernama 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
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:2022-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:2022-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:2022-latest
Catatan
Teknik untuk membuat volume data secara implisit dalam perintah jalankan tidak berfungsi dengan versi Docker yang lebih lama. Dalam hal ini, gunakan langkah-langkah eksplisit yang diuraikan dalam dokumentasi Docker, Membuat dan memasang kontainer volume data.
Bahkan jika Anda menghentikan dan menghapus kontainer ini, volume data tetap ada. Anda dapat melihatnya dengan perintah docker volume ls
.
docker volume ls
Jika Anda kemudian membuat kontainer lain dengan nama volume yang sama, kontainer baru menggunakan data SQL Server yang sama yang terkandung dalam volume.
Untuk menghapus wadah volume data, gunakan perintah docker volume rm
.
Peringatan
Jika Anda menghapus kontainer volume data, data SQL Server apa pun dalam kontainer akan dihapus secara permanen.
Pencadangan dan pemulihan
Selain teknik kontainer ini, Anda juga dapat menggunakan teknik pencadangan dan pemulihan SQL Server standar. Anda dapat menggunakan file cadangan untuk melindungi data Anda atau memindahkan data ke instans SQL Server lain. Untuk informasi selengkapnya, lihat Mencadangkan dan memulihkan database SQL Server di Linux.
Peringatan
Jika Anda membuat cadangan, pastikan untuk membuat atau menyalin file cadangan di luar kontainer. Jika tidak, jika kontainer dihapus, file cadangan juga dihapus.
Mengaktifkan pencadangan dan pemulihan VDI dalam kontainer
Operasi pencadangan dan pemulihan Antarmuka Perangkat Virtual (VDI) sekarang didukung dalam penyebaran kontainer SQL Server yang dimulai dengan CU15 untuk SQL Server 2019 (15.x) dan CU28 untuk SQL Server 2017 (14.x). Ikuti langkah-langkah ini untuk mengaktifkan pencadangan atau pemulihan berbasis VDI untuk kontainer SQL Server:
Saat menyebarkan kontainer SQL Server, gunakan
--shm-size
opsi . Untuk memulai, atur ukuran ke 1 GB, seperti yang ditunjukkan pada perintah berikut:docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=Mystr0ngP@ssw0rd!" \ --shm-size 1g \ -p 1433:1433 \ --name sql19 \ --hostname sql19 \ -d mcr.microsoft.com/mssql/server:2019-latest
Opsi
--shm-size
ini memungkinkan Anda mengonfigurasi ukuran direktori memori bersama (/dev/shm
) di dalam kontainer, yang diatur ke 64 MB secara default. Ukuran default memori bersama ini tidak cukup untuk mendukung pencadangan VDI. Kami menyarankan agar Anda mengonfigurasi ini hingga minimal 1 GB saat Anda menyebarkan kontainer SQL Server dan ingin mendukung pencadangan VDI.Anda juga harus mengaktifkan parameter
memory.enablecontainersharedmemory
baru di dalammssql.conf
kontainer. Anda dapat memasangmssql.conf
pada penyebaran kontainer menggunakan opsi seperti yang-v
dijelaskan di bagian Pertahankan data Anda, atau setelah Anda menyebarkan kontainer dengan memperbaruimssql.conf
secara manual di dalam kontainer. Berikut adalah file sampelmssql.conf
dengan pengaturan yangmemory.enablecontainersharedmemory
diatur ketrue
.[memory] enablecontainersharedmemory = true
Menyalin file dari kontainer
Untuk menyalin file dari kontainer, gunakan perintah berikut:
docker cp <Container ID>:<Container path> <host path>
Anda bisa mendapatkan ID Kontainer dengan menjalankan perintah docker ps -a
.
Contoh:
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
Menyalin file ke dalam kontainer
Untuk menyalin file ke dalam kontainer, gunakan perintah berikut:
docker cp <Host path> <Container ID>:<Container path>
Contoh:
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
Mengonfigurasi zona waktu
Untuk menjalankan SQL Server dalam kontainer Linux dengan zona waktu tertentu, konfigurasikan TZ
variabel lingkungan (lihat Mengonfigurasi zona waktu untuk SQL Server 2022 di Linux untuk informasi selengkapnya). Untuk menemukan nilai zona waktu yang tepat, jalankan tzselect
perintah dari prompt bash Linux:
tzselect
Setelah Anda memilih zona waktu, tzselect
menampilkan output yang mirip dengan contoh berikut:
The following information has been given:
United States
Pacific
Therefore TZ='America/Los_Angeles' will be used.
Anda dapat menggunakan informasi ini untuk mengatur variabel lingkungan yang sama di kontainer Linux Anda. Contoh berikut menunjukkan cara menjalankan SQL Server dalam kontainer di Americas/Los_Angeles
zona waktu:
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: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: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: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
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:2022-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:2022-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:2022-latest
tempdb
Mengubah jalur
Ini adalah praktik yang baik untuk menjaga database Anda tempdb
terpisah dari database pengguna Anda.
Sambungkan ke instans SQL Server, lalu jalankan skrip Transact-SQL (T-SQL) berikut. Jika ada lebih banyak file yang terkait dengan
tempdb
, Anda juga perlu memindahkannya.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' ); GO
Verifikasi bahwa
tempdb
lokasi file telah dimodifikasi, menggunakan skrip T-SQL berikut:SELECT * FROM sys.sysaltfiles WHERE dbid = 2;
Anda harus memulai ulang kontainer SQL Server agar perubahan ini berlaku.
docker stop sql1 docker start sql1
docker stop sql1 docker start sql1
docker stop sql1 docker start sql1
Buka sesi interaktif
bash
untuk menyambungkan ke kontainer.docker exec -it sql1 bash
docker exec -it sql1 bash
docker exec -it sql1 bash
Setelah tersambung ke shell interaktif, jalankan perintah berikut untuk memeriksa lokasi
tempdb
:ls /var/opt/mssql/tempdb/
Jika pemindahan berhasil, Anda akan melihat output serupa:
tempdb.mdf templog.ldf
Mengubah lokasi file default
MSSQL_DATA_DIR
Tambahkan variabel untuk mengubah direktori data Anda dalam perintah Andadocker run
, lalu pasang volume ke lokasi yang dapat diakses pengguna kontainer Anda.
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_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 "MSSQL_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 "MSSQL_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 'MSSQL_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 "MSSQL_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 "MSSQL_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 'MSSQL_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:2022-latest
docker run -e 'ACCEPT_EULA=Y' -e "MSSQL_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:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_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:2022-latest
Menggunakan mssql-config untuk mengonfigurasi SQL Server di dalam kontainer
Anda dapat menggunakan alat mssql-conf untuk mengatur parameter dalam kontainer SQL Server.
Misalnya, Anda dapat mengatur batas memori untuk instans menggunakan langkah-langkah berikut:
Sambungkan langsung ke kontainer menggunakan
docker exec
sebagai pengguna root. Gantisqlcontainer
dengan nama kontainer Anda.docker exec -u root -it sqlcontainer "bash"
Gunakan mssql-conf untuk mengubah pengaturan. Contoh ini mengubah pengaturan menjadi
memory.memorylimitmb
2 GB (2.048 MB)./opt/mssql/bin/mssql-conf set memory.memorylimitmb 2048
Contoh kontainer Docker Kustom
Untuk contoh kontainer Docker kustom, lihat https://github.com/microsoft/mssql-docker/tree/master/linux/preview/examples. Contoh meliputi:
- Contoh Dockerfile dengan Pencarian Teks Lengkap
- Contoh Dockerfile untuk RHEL 7 dan SQL Server 2019
- Contoh Dockerfile untuk RHEL 8 dan SQL Server 2017
- Contoh Dockerfile untuk Ubuntu 20.04 dan SQL Server 2019 dengan Pencarian Teks Lengkap, PolyBase, dan Alat
Untuk informasi tentang cara membuat dan menjalankan kontainer Docker menggunakan Dockerfiles, lihat sampel Layanan ML di GitHub.
Konten terkait
- Mulai menggunakan gambar kontainer SQL Server 2017 (14.x) di Docker dengan melalui mulai cepat
- Mulai menggunakan gambar kontainer SQL Server 2019 (15.x) di Docker dengan melalui mulai cepat
- Mulai menggunakan gambar kontainer SQL Server 2022 (16.x) di Docker dengan melalui mulai cepat
Berkontribusi pada dokumentasi SQL
Tahukah Anda bahwa Anda dapat mengedit konten SQL sendiri? Jika Anda melakukannya, Anda tidak hanya membantu meningkatkan dokumentasi kami, tetapi Anda juga dikreditkan sebagai kontributor ke halaman.
Untuk informasi selengkapnya, lihat Cara berkontribusi pada dokumentasi SQL Server