Docker üzerinde SQL Server Kurulumu, Yedek Alma, Yükleme Operasyonları
Merhabalar bu makalemizde Docker üzerinde SQL Server servisini nasıl kullanabileceğimiz hakkında konuşacağız.
Konteynırlar(Docker imagelar) günümüzde servislerin sorunsuzca verilebilmesi için birçok platform üzerinde çalışabilen minik sanal makinelerdir. Nasıl fiziksel makinelerden sanal makinelere dönüp firmware, Driver vb sorunlardan kurtulabildiysek konteynırlar ile de uygulama/servislerimizi sanallaştırdık. Docker imajlarının ne olduğu nasıl bize avantaj sağladıklarını bu yazıda anlatmayacağım. Zaten sektör olarak docker,k8n,micro Services, swarm kavramlarından kafamızı kaldıramıyoruz. Eğer konuya uzak arkadaşlarımız varsa Docker hakkında bir sonraki paragrafı okuması konunun genelini özetler.
Docker nedir ne işimizi çözer?
Uzun yıllardır bilgisayarların, işletim sistemleri farklarının, dev ortamlarıyla prod ortamalarının farklı olması ya da en basit manada sadece çevresel ortam değişkenlerinin farklılık göstermesinden dolayı teknik uzmanlar olarak çok zaman kaybettik.
Çok klişe olacak ama vallahi benim bilgisayarımda çalışıyordu diyaloğunun kulağınızda yankılandığını hissedebiliyorum.
Docker ile hiç ilgilenmemiş ya da ilk defa burada duyan dostlar için makinanızın işletim sisteminin hiçbir önemi yok. En azından şimdilik böyle olduğunu düşünelim. Güray Yıldırım’ın Konteynerler ve Docker kitabını hem türkçe kaynak olması hem de anlaşılır dilinden dolayı şiddetle tavsiye ederim. Bu kadar docker bilgisi yeter ? Bundan sonrası sizde.
Ortamlar arasındaki çevresel farkları yok etmek ve sahip olduğumuz donanım gücünü kısıtlanmadan daha verimli bir şekilde kullanmak amacıyla docker imajları kullanıyoruz. Linuxta çalışan bir uygulamayı daha önce windows makinamız üzerine kuramıyorduk. Hala kuramıyoruz 🙂 Gerçi windows10 ile işler biraz değişti ama biz konumuzdan savrulmayalım. (Storedan bir ubunu imaj çekip üzerinde çalıştırmak gibi)
Konteynırlar ile konu özelinde bildiğimiz bir çözüm/yaklaşım varsa ve bu çözümün docker imajını bulup hemen provizyonlayıp işimize odaklanabiliyoruz. Mesela yük dengeleyiciye mi ihtiyaç var HAProxy imajını bulup ayağa kaldırıyoruz konuyu kapatıyoruz. Yok bağımlılıklarını indireyim çevresel değişkenleri ayarlayayım bla bla bla bir sürü mevzu.
Bu makalede size sevdiklerinizle daha fazla zaman geçirebilmeyi vaat ediyorum. Oyunuzu Çözümpark Muhtar Adayı Can’a verin. 🙂
Konteynırları günün sonunda bir enstrüman/araç olarak kullanabildiğimizde kıymetli zamanımız bize kalabiliyor. Malum devir proaktif çözümler üretmeye bizi şart koşuyor. Bu sayede gol yiyebileceğimiz riskleri minimize edip çıktıdaki kaliteyi maksimize etmeliyiz. Bu sayede departman olarak çevikleşip test etmek istediğimiz ya da aklımıza takılan her senaryoyu hızlıca test edip daha kaliteli çıktılara ulaşabilelim.
Aksi takdirde uygulamayı indir kur konfigüre et. Servis haline getir reboot edince çalışır halde olsun, javası güncel mi, .net 3.5 yüklü mü yüklü değilse neredeydi bizim windows iso dosyamız ? .net 3.5 kurmam lazım gibi konular yüzünden terzi-sökük ikileminden ileriye gidemiyoruz.
Bir nevi denizi geçip derede boğulmamak için süper bir yaklaşım.
Peki docker ile SQL Server da ne yapabilirim. Size ne lazım ? 🙂 Saniyeler içerisinde bir instance ayağa kaldırıp testlerinizi yapabilirsiniz. Test etmek istediğiniz uygulama için veri tabanı provizyonlayabilir sadece o uygulamaya verebilirsiniz. Elinizdeki ortamları kirletmek zorunda değilsiniz. docker imajlar arasında AlwaysON replikasyon bile kurabilirsiniz
Docker imajı ile konteynır olarak bir sql server instance provizyonlamak saniyelerinizi alır. Sysadmin yetkisinde hiç çekinmeden ortamda at koştururlarabilirsiniz. Hem de kaç tane instance istiyorsanız.
Yazının şimdiye kadarki olan kısmınca hep sistemcilerin sıkıntılarından bahsettik. Ancak sadece sistemcileri değil yazılımcılarında hayatını kurtarıyor. Bu makale özelinde bir şekilde veritabanına ihtiyaç duyuyorsanız kimseden size bir ortam yaratmasını istemeden tüm işlerinizi bir makina provizyonlayarak kolaylıkla yapabilirsiniz. Biraz sonra nasıl backup restore yapabileceğimizi ekran görüntüleri ile göreceğiz. Var olan ortamınızı simule etmemeniz hiçbir neden yok.
Docker i indirmek için (Windows kullanıcıları için) https://docs.docker.com/docker-for-windows/install/ bu adresten indirebilirsiniz. İndirmeden önce üye olmanızı ister. Üye olun lütfen imajları çekebilmemiz için bizden credential isteyecek.
İmajları çekebilmemiz için login olmamız lazım. Kullanıcı adı ve şifrenizi isteyecek.
docker login
Başarılı bir şekilde girip yaptıktan sonra aşağıdaki kod bloğu ile 2017 ve 2019 SQL Server konteynerlerini bilgisayarınıza indiriyorsunuz. Aşağıdaki listede Ubuntu üzerinde çalıştığı yazıyor konteynerlerimizin.
docker pull mcr.microsoft.com/mssql/server:2019-latest
docker pull mcr.microsoft.com/mssql/server:2017-latest
Bu linkten https://hub.docker.com/_/microsoft-mssql-server detaylara erişebilirsiniz. Yukardaki imaj indirme komutu linkten dolayı ilerde kırılabilir. Eğer böyle bir şey olmuşsa bu linkten güncel linkleri bulup imajları indirebilirsiniz.
İndirme işlemi bitti. İki adet imaj şu an makinamızda kullanılmaya hazır.
docker images ls
Makinamızdaki konteynırların listesine bakalım.
docker ps --all
Docker volumelerimizi listeyelelim. Bu gerekli bir adım değildir. Terchinize bağlıdır. Böyle bir alan yaratmak zorunda değilsiniz.
docker volume ls
docker volume create sql1volume
Şimdi ilk SQL Server konteynırımızı ayağa kaldıralım.
docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Passw0rd' -e 'MSSQL_PID=Developer' -p 1433:1433 -h sql2k17 -d mcr.microsoft.com/mssql/server:2017-latest
docker ps
konteynırımız ile ilgili bilgi alalım bakalım ip adresi ne.
docker inspect sql2k17
Bu makale için emektar Thinkpad X1 carbon laptopımı kullandım. 4 cpu 8 gb ram. Üzerinde windows var. 172 li bloga ulaşmam için route yazdım hızlıca. 🙂
route /P add 172.0.0.0 MASK 255.0.0.0 10.0.75.2
Makinamız kullanıma hazır. Bilgiler aşağıda.
SQL Server yedek dosyamızı konteynır içerisine nasıl kopyalayıp restore edebileceğimize bakalım.
docker cp C:\Users\canka\Downloads\AdventureWorks2017.bak sql2k17:/var/opt/mssql/data
Yedeği başarılı bir şekilde restore ettik. Şimdi de bir veri tabanı yaratıp onun yedeğini alıp konteynır dışına hostumuza alalım.
CREATE DATABASE ARYASOFT
BACKUP DATABASE ARYASOFT TO DISK=N'/var/opt/mssql/data/COZUMPARKOnDocker.bak'
Marketing isimlere dikkatinizi çekerim ? Makalemizde reklam amaçlı ürün yerleştirme bulunmaktadır 😛
docker cp sql2k17:/var/opt/mssql/data/COZUMPARKOnDocker.bak C:\Users\canka\Downloads\
Gördüğünüz gibi yedek alma işlemini başarılı bir şekilde gerçekleştirmiş bulunmaktayız. Host makinanızda Azure data studio ya da SQL Server Management studio gibi programlar kurulu değilse hatta sqlcmd aracı da yoksa konteynır üzerinden T-SQL komutlarını kullanarak istediğiniz işlemleri kolaylıkla yapabilirsiniz.
docker exec -it sql2k17 "bash"
cd /opt/mssql-tools/bin
./sqlcmd -S localhost -U sa -P Passw0rd
Select @@version;
GO
exit
Makalenin başında sizinle paylaştığım senaryodaki iş gücü farkı hakkında ne düşünüyorsunuz, kazandığınız o zaman ile neler yapılır değil mi?
Umarım sizin için faydalı bir makale olmuştur. Yorum yapıp paylaşmanızı rica eder, kolaylıklar dilerim.
Çok güzel makale olmuş, eline sağlık
Teşekkür ederim. Sektöre bir katkım olabilirse ne mutlu bana.
Güncel konularla ilgili son zamanlarda okuduğum en keyifli yazılardan bir tanesi, eline sağlık.
İşte bu. Yararlı makale diye buna derim.