Altbilgi içeriğine atla
Iron Academy Logo
C# öğrenin
C# öğrenin

Diğer Kategoriler

Docker Üzerinde Linux'ta SQL Server

[[academy-video-youtube({"vid": "-H5mMexO4_I", "start_time": "0", "title": "SQL Server in Docker on Linux", "creator": "Tim Corey", "length": "18m 20s"})]]

Geliştirme makinesine doğrudan bir veritabanı motoru yüklemek, uzun vadeli sorunlar yaratan yaygın bir kısayoldur. Veritabanı sunucuları özel donanım için tasarlanmıştır. Önemli bellek ve CPU tüketir, birden fazla sürüm yüklerken yapılandırma borcu birikir ve farklı bir sürüme karşı test yaptığınızda yükseltmeleri zorlaştırır. Docker konteynerleri, her veritabanı örneğini hafif, tek kullanımlık bir ortamda izole ederek bunların tümünü çözer.

Tim Corey'nin "Linux'ta Docker'da SQL Server" adlı videosunda, Linux'a tek bir Docker komutuyla bir Microsoft SQL Server örneğini nasıl çalıştıracağını, VS Code'dan ona nasıl bağlanacağını ve ona karşı sorguları nasıl çalıştıracağını gösterir. Ayrıca, birden fazla SQL Server sürümünü yan yana çalıştırmayı ve işiniz bittiğinde temizlemeyi gösterir. C# Linux serisini takip ediyorsanız veya geliştirme için hızlı, tekrarlanabilir bir şekilde SQL Server çalıştırmanın yolunu istiyorsanız, bu yürüme tam kurulumu kapsamaktadır.

Neden Docker Yerine Yerel Kurulum

[0:00 - 0:57] Tim, yerel veritabanı kurulumlarına karşı argümanı ile açar. Temel argüman: veritabanı motorları özel sunucular için tasarlanmıştır. Yerel olarak yüklemek, onları kullanıyor olun veya olmayın kaynakları tüketmeleri anlamına gelir ve aynı kutuda birden fazla sürümü (SQL 2019, 2022, 2025) yönetmek hızla bir bakım yükü haline gelir.

Docker konteynerleri bu modeli tersine çevirir. Her veritabanı kendi izole edilmiş ortamında çalışır. İhtiyacınız olduğunda başlatın, olmadığında durdurun. Onu silin ve sıfırdan başlamak için kalan yapılandırmayı sıfırlayın. Geliştirme ve test için, bu yaklaşım bir geleneksel kurulumdan daha hızlı kurulur, bakımını daha temiz tutar ve daha esnektir.

Portainer Yeniden Başlatma Politikası Ayarlama

[0:57 - 2:17] SQL Server'ı başlatmadan önce Tim, Portainer (önceki bölümden Docker konteynerleri için GUI yönetim aracı) çalışmadığını fark eder. Son kapanışta makine kapatıldığında çıktığı için yeniden başlatma politikası ayarlanmamıştı.

Düzeltme iki komut:

// Set Portainer to restart automatically (unless manually stopped)
docker update --restart unless-stopped portainer

// Start it now
docker start portainer
// Set Portainer to restart automatically (unless manually stopped)
docker update --restart unless-stopped portainer

// Start it now
docker start portainer

unless-stopped politikası, Portainer'ın yeniden başlatıldığında otomatik olarak yeniden başlayacağı anlamına gelir, ancak siz açıkça durdurursanız kapalı kalır. Başladıktan sonra, Portainer tarayıcıda localhost:9000 adresinden erişilebilir durumda olur. Tim, her zaman çalıştırmak istediğiniz yönetim araçları için bu politikayı önerirken, veritabanı konteynerlerini manuel başlatmada tutmayı öneriyor.

SQL Server için Docker Run Komutu

[2:17 - 6:09] Tüm SQL Server kurulumu tek bir komuta indirgenir. Tim, bunu Windows makinesinden LocalSend kullanarak aktarır (önceki yan görev videosunda ele alınmıştır), ardından parça parça çözer:

// Single command to launch SQL Server 2025 in Docker
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Test12345" -p 1433:1433 --name sql2025 mcr.microsoft.com/mssql/server:2025-latest
// Single command to launch SQL Server 2025 in Docker
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Test12345" -p 1433:1433 --name sql2025 mcr.microsoft.com/mssql/server:2025-latest

Her bir bayrak belirli bir amaca hizmet eder. -e "ACCEPT_EULA=Y" bayrağı, Microsoft'un lisans sözleşmesini kabul eder. -e "SA_PASSWORD=Test12345" bayrağı, sistem yöneticisi şifresini düz metin olarak ayarlar; Tim bunun yerel geliştirme için uygun olduğunu kabul eder, ancak üretim ortamlarında asla kullanılmaması gerektiğini belirtir. -p 1433:1433 bayrağı, konteynerin iç SQL Server portunu ana makinedeki aynı porta eşler. --name sql2025 bayrağı ise konteynere insan tarafından okunabilir bir etiket verir. Ve görüntü etiketi 2025-latest, Microsoft'un konteyner kayıt defterinden en son SQL Server 2025 sürümünü çeker.

Komutu çalıştırdıktan sonra, Docker görüntü katmanlarını indirir, çıkarır ve sunucuyu başlatır. Tüm süreç birkaç dakika sürer, çoğunluğu başlangıç indirmesidir.

Portainer'de Doğrulama

[6:09 - 7:04] Portainer'a geri döndüğümüzde, yeni SQL Server konteyneri konteyner listesinde görünür ve durumu çalışıyor olarak gösterir. Tim burada kasıtlı bir seçim yapar: veri kalıcılığı için hacim montajı yok. Konteyner silinirse, içindeki veritabanları da kaybolur.

Bu, bir geliştirme kurulumu için kasıtlıdır. Yeniden başlamak, birikmiş test verilerinin olmaması, önceki deneylerden kaynaklanan şema kaymalarının olmaması ve kalan durum nedeniyle 'benim makinemde çalışıyor' sorunlarının olmaması anlamına gelir. Bir konteyneri silmeden önce veritabanlarını saklamanız gerekirse, önce bunları dışa aktarabilirsiniz, ancak temiz sayfa yaklaşımı yerel çalışma için tercih edilen iş akışıdır.

VS Code'dan Bağlanma

[7:04 - 8:50] Veritabanını yönetmek için Tim, Microsoft'tan VS Code için SQL Server eklentisini kurar. Kurulumdan sonra, yan panelde bağlantıları ekleyebileceğiniz yeni bir SQL Server paneli belirir.

Bağlantı parametreleri minimum düzeydedir. Sunucu adı . (nokta), localhost anlamına gelir. Konteyner 1433 portunu (SQL Server varsayılanı) eşlediği için, bir port numarası belirtmeye gerek yoktur. Kullanıcı adı sa, şifre Docker komutundaki şifredir ve varsayılan veritabanı master'dir. İstendiğinde sunucu sertifikasına güvenin.

Bağlandıktan sonra, VS Code bağlantının yanına Docker simgesini gösterir, bu da konteynır ortamını tespit ettiğini doğrular. Sistem veritabanları (master, model, msdb, tempdb) kullanılmak üzere ağaçta görünür.

Veritabanı Oluşturma ve Sorguları Çalıştırma

[8:50 - 12:45] Bağlantı kurulduktan sonra, Tim doğrudan VS Code yan panelinden PeopleDB adında yeni bir veritabanı oluşturur. İçinde, görsel tasarımcıyı kullanarak bir People tablosu oluşturur, otomatik artan bir Id sütunu, bir FirstName sütunu ve bir LastName sütunu ekler (her ikisi de NVARCHAR(50), null kabul etmez).

Daha sonra yeni bir sorgu penceresi açar ve test verilerini ekler:

INSERT INTO dbo.People (FirstName, LastName)
VALUES
    ('Tim', 'Corey'),
    ('Sue', 'Storm'),
    ('Dave', 'Corey')
INSERT INTO dbo.People (FirstName, LastName)
VALUES
    ('Tim', 'Corey'),
    ('Sue', 'Storm'),
    ('Dave', 'Corey')

Bir SELECT çalıştırmak, satırların yerinde olduğunu doğrular:

SELECT * FROM dbo.People
-- Returns: Tim Corey, Sue Storm, Dave Corey

SELECT * FROM dbo.People WHERE LastName = 'Corey'
-- Returns: Tim Corey, Dave Corey
SELECT * FROM dbo.People
-- Returns: Tim Corey, Sue Storm, Dave Corey

SELECT * FROM dbo.People WHERE LastName = 'Corey'
-- Returns: Tim Corey, Dave Corey

(veritabanı oluşturma, tablo tasarlama, veri ekleme, filtrelerle sorgulama) döngüsünün tamamı birkaç dakika sürer. Her şey, ana makinenizde SQL Server yüklü olmadan, VS Code üzerinden yönetilen bir Docker konteynerinde çalışır.

Durdurma, Başlatma ve Kaynak Yönetimi

[12:45 - 14:20] SQL Server ile çalışmayı bitirdiğinizde, onu durdurmak Portsner'da bir tıklama veya terminalde bir komuttur:

docker stop sql2025
docker stop sql2025

Durdurulmuş bir konteyner tüm CPU ve bellek kaynaklarını serbest bırakır. Tüketmeye devam ettiği tek şey, görüntü ve konteyner dosyaları için disk alanıdır, bu da yerel bir SQL Server kurulumuna kıyasla daha küçüktür (ve genellikle daha küçüktür).

Tim, bunun geleneksel bir kurulum üzerindeki ana avantaj olduğunu belirtir. Yerel bir SQL Server, Windows veya Linux hizmeti olarak çalışır; her zaman kaynak tüketir. Bir Docker konteyneri, yalnızca başlatmayı seçtiğinizde kaynakları kullanır.

Yan Yana Birden Çok Sürümleri Çalıştırma

[14:20 - 17:17] Docker'ın veritabanı geliştirme için en pratik özelliklerinden biri, birden çok sürümü aynı anda çalıştırma yeteneğidir. Tim, mevcut 2025 konteynerının yanında SQL Server 2022'yi başlatarak bunu gösteriyor:

// SQL Server 2022 on a different port
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Test12345" -p 2022:1433 --name sql2022 mcr.microsoft.com/mssql/server:2022-latest
// SQL Server 2022 on a different port
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Test12345" -p 2022:1433 --name sql2022 mcr.microsoft.com/mssql/server:2022-latest

Ana fark, port eşlemesidir: -p 2022:1433, konteynerin iç portu olan 1433'ü ana makinadaki 2022 portuna eşler. Bu, zaten 1433'ü kullanan 2025 sürümü ile bir port çatışmasını önler. İndirme tamamlandıktan sonra, her iki konteyner de Portainer içinde görünür ve her ikisi de aynı anda çalışır.

Bu, bir müşteri üretimde SQL Server 2022 çalıştırdığında ancak ekip 2025'e karşı geliştirdiğinde yararlıdır. Sürümler arasında geçiş yapmak, doğru konteyneri başlatmak dışında yeniden yükleme gerektirmez. Tüm mevcut SQL Server görüntüleri (2017, 2019, 2022, 2025) mcr.microsoft.com adresinde listelenmiştir ve aynı yaklaşım MySQL, PostgreSQL, MongoDB ve Cosmos DB için de çalışır.

Sarma: Tam Bir Veritabanı Ortamına Tek Komut

[17:17 - 17:47] Kılavuz, tek bir Docker komutunun eskiden çok adımlı bir kurulum süreci olan şeyi yapılandırma sihirbazları, hizmet yönetimi ve sürüm çatışmaları ile değiştirdiğini gösteriyor. Konteyner birkaç dakika içinde başlar, yalnızca ihtiyaç duyulduğunda çalışır ve ana sistemde iz bırakmadan silinebilir.

Farklı veritabanı gereksinimlerine sahip birden fazla projede çalışan geliştiriciler için bu model temiz bir şekilde ölçeklenir. Her proje kendi konteynerını, kendi sürümünü ve kendi izole edilmiş verilerini alır.

Sonuç

[17:47 - 18:20] Özetle: Linux'ta SQL Server, tek bir docker run komutuyla Docker'da çalışır. SQL Server uzantısını kullanarak VS Code'dan bağlanın, yan panelünden veritabanları ve tablolar oluşturun ve başka bir SQL Server örneğine karşı yapacağınız gibi sorgular yazın. İşiniz bittiğinde, konteyneri durdurun ve kaynakları geri kazanın.

Veritabanı yönetimi için Docker ve sorgulama için VS Code kombinasyonu, Linux'da tam bir SQL geliştirme iş akışı sunar, yerel veritabanı kurulumu gerektirmez.

Örnek İpucu: Belirli bir SQL Server sürümüne karşı test yapmanız gerekiyorsa, tüm mevcut etiketler için mcr.microsoft.com'nı kontrol edin. Her konteynerin ana bilgisayar porta farklı bir host portu (1433, 2019, 2022, 2025) atayarak 2017, 2019, 2022 ve 2025'i aynı anda çalıştırabilirsiniz. Onları açıklayıcı bir şekilde adlandırın (sql2019, sql2022), böylece Portainer ve docker ps çıktısı okunabilir durumda kalsın.

Tam videoyu YouTube'daki kanalında izleyerek Linux üzerinde veritabanlarıyla C# geliştirme hakkında daha fazla bilgi edinin.

Hero Worlddot related to Docker Üzerinde Linux'ta SQL Server
Hero Affiliate related to Docker Üzerinde Linux'ta SQL Server

Sevdiğiniz Şeyleri Paylaşarak Daha Fazla Kazanın

.NET, C#, Java, Python veya Node.js ile çalışan geliştiriciler için içerik oluşturuyor musunuz? Uzmanlığınızı ek gelire dönüştürün!

Iron Destek Ekibi

Haftada 5 gün, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara