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:

  1. 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.

  2. Anda juga harus mengaktifkan parameter memory.enablecontainersharedmemory baru di dalam mssql.conf kontainer. Anda dapat memasang mssql.conf pada penyebaran kontainer menggunakan opsi seperti yang -v dijelaskan di bagian Pertahankan data Anda, atau setelah Anda menyebarkan kontainer dengan memperbarui mssql.conf secara manual di dalam kontainer. Berikut adalah file sampel mssql.conf dengan pengaturan yang memory.enablecontainersharedmemory diatur ke true.

    [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.

  1. Koneksi 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
    
  2. Verifikasi bahwa tempdb lokasi file telah dimodifikasi, menggunakan skrip T-SQL berikut:

    SELECT *
    FROM sys.sysaltfiles
    WHERE dbid = 2;
    
  3. 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
    
  4. 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:

  1. Koneksi langsung ke kontainer menggunakan docker exec sebagai pengguna root. Ganti sqlcontainer dengan nama kontainer Anda.

    docker exec -u root -it sqlcontainer "bash"
    
  2. 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:

Untuk informasi tentang cara membuat dan menjalankan kontainer Docker menggunakan Dockerfiles, lihat sampel Layanan ML di GitHub.

  • 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