Windows kapsayıcılarına kısa bir giriş. Kapsayıcıları anlama Windows sunucu kapsayıcıları

bugünün içinde Bir yöneticiye soru sorun, Windows Server 2016'da bir kapsayıcıda bir görüntüyü nasıl dağıtacağınızı, yeni bir görüntü oluşturmayı ve onu Docker'a nasıl yükleyeceğinizi göstereceğim.

Windows Server 2016'daki en önemli yeni özelliklerden biri kapsayıcılar ve Docker desteğidir. Kapsayıcılar, geliştiricilerin sanal makinelerin ek yükü olmadan uygulamaları hızlı bir şekilde dağıtmak ve güncellemek için kullanabilecekleri hafif ve esnek bir sanallaştırma deneyimi sağlar. Ve bir konteyner yönetimi çözümü olan Docker ile birleştiğinde, konteyner teknolojisi son birkaç yılda patlama yaşadı.

Bu, daha önce Windows Server 2016 Teknik Önizleme 3 için geçerli olan Docker ile Windows Server Kapsayıcılarını Dağıtma ve Yönetme bölümünde bulunan bilgilere yönelik bir güncellemedir. Docker hakkında daha fazla bilgi için bkz. Docker Nedir? ve Docker kapsayıcıları sanal makinelerden daha mı iyi? üzerinde Teknik temel Petri BT bilgisi.

Bu makaledeki talimatları takip etmek için Windows Server 2016 çalıştıran fiziksel veya sanal bir sunucuya erişmeniz gerekir. Microsoft web sitesinden bir değerlendirme kopyası indirebilir veya Microsoft Azure'da bir sanal makine kurabilirsiniz. Ayrıca kayıt olarak alabileceğiniz ücretsiz bir Docker Kimliğine de ihtiyacınız olacak.

Docker Engine'i yükleyin

İlk adım, Windows Server 2016'ya Docker desteğini yüklemektir.

  • Windows Server'da oturum açın.
  • Tıklamak Aramak görev çubuğu simgesi ve türü Güç kalkanı arama kutusunda.
  • Tıklamak sağ tık fareler Windows PowerShell'i arama sonuçlarında seçin ve Yönetici olarak çalıştır menüden.
  • İstendiğinde yönetici kimlik bilgilerini girin.

Docker'ı Windows Server'a yüklemek için aşağıdaki PowerShell cmdlet'ini çalıştırın. Docker PowerShell modülünü güvenilir bir çevrimiçi depodan indiren NuGet'i yüklemeniz istenecektir.

Kurulum Modülü -Adı DockerMsftProvider -Force

şimdi kullan Kurulum paketi Docker motorunu Windows Server'a yüklemek için cmdlet. İşlemin sonunda yeniden başlatmanın gerekli olduğunu unutmayın.

Kurulum Paketi -Docker Adı -SağlayıcıAdı DockerMsftProvider -Force Restart-Computer -Force

Sunucuyu yeniden başlattıktan sonra, PowerShell istemini yeniden çalıştırın ve aşağıdaki komutu çalıştırarak Docker'ın yüklendiğini doğrulayın:

liman işçisi versiyonu

Docker'dan bir görüntü indirin ve bir kapsayıcı işlemi başlatın

Artık Docker motoru yüklendiğine göre, varsayılan Windows Server Core görüntüsünü Docker'dan çekelim:

docker çekme microsoft/windowsServerCore

Görüntü yerel sunucuya yüklendiğine göre, kapsayıcı işlemini şunu kullanarak başlatın: liman işçisi lansmanı:

Docker, Microsoft /windowsServerCore'u çalıştırır

Yeni bir resim oluştur

Artık daha önce indirilen Windows Server görüntüsünü başlangıç ​​noktası olarak kullanarak yeni bir görüntü oluşturabiliriz. Çalıştırmadan önce bir Docker Kimliğine ihtiyacınız olacak. Henüz sahip değilseniz, bir Docker hesabı için kaydolun.

Sponsorlar

Docker görüntüleri genellikle Dockerfile tariflerinden oluşturulur, ancak tanıtım amacıyla, yüklenen görüntü üzerinde bir komut çalıştırır, değişikliğe dayalı olarak yeni bir görüntü oluşturur ve ardından buluttan erişilebilir olması için Docker'a yükleriz.

Aşağıdaki komut satırında unutmayın -T Parametre, görüntüyü kolayca tanımlamanıza olanak tanıyan görüntü etiketini verir. Ayrıca, etiket adından sonra görünen kısa çizgiye özellikle dikkat edin.

"Microsoft'tan /windowsservercore `n CMD yankı Merhaba Dünya!" | docker build -t mydockerid /windows-test-image -

Docker yeni imajı oluşturmayı bitirdikten sonra, yerel sunucudaki mevcut imajların listesini kontrol edin. İkisini de görmelisin. Microsoft /windowsServerCore ve mydockerid /windows-test-images listede.

liman işçisi resmi

Şimdi, değiştirmeyi hatırlayarak kapta yeni bir görüntü başlatın. mydockerid Docker Kimliğinizle ve görmelisiniz Selam Dünya!Çıktıda görünün:

liman işçisi mydockerid / windows-test-images çalıştır

Docker'a bir resim yükleyin

Yeni oluşturduğumuz görüntüyü Docker'a yükleyelim, böylece buluttan kullanılabilir. Docker ID'niz ve şifrenizle giriş yapın:

docker -u mydockerid -p mypassword'e giriş yapın

kullanım liman işçisi itmeönceki adımlarda oluşturduğumuz görüntüyü değiştirerek yüklemek için mydockerid Docker Kimliğinizin adıyla:

Docker, mydockerid / windows-test-images itin

Docker kapsayıcısında bir uygulama nasıl paketlenir?

NodeJS ile yazılmış bir uygulamam var. Kapsayıcı olarak çalıştırmak için onu bir Docker görüntüsüne nasıl paketleyebilirim?

Docker, POSIX uyumlu işletim sistemleri için bir kapsayıcı yönetim sistemidir (Linux şu anda desteklenmektedir). Docker'ın bir özelliği, bir uygulamayı, bağımlılıkları kurmak veya kaynaktan derlemek için uzun ve karmaşık prosedürler olmaksızın başka bir sistemde çalıştıracak şekilde gerekli tüm ortamla paketleme yeteneğidir. Dağıtılmaya hazır paketlenmiş bir uygulamaya "görüntü" denir. Docker görüntüleri, önceden yapılandırılmış çalışma ortamları olan "şablonlara" dayanır. Bunu dağıtımlar olarak düşünebilirsiniz. işletim sistemi, bu tamamen doğru olmasa da. Docker belgelerini okuyarak kendi şablonunuzu da oluşturabilirsiniz. Bu yaklaşımın avantajı, uygulama resminizin yalnızca uygulamanın kendisini içermesi ve bunun için gerekli ortamın şablon deposundan otomatik olarak indirilmesidir. Docker biraz chroot veya bsd jail gibidir, ancak farklı şekilde çalışır.

"Kapsayıcı" ve "görüntü" kavramlarını birbirinden ayırmak önemlidir. Kapsayıcı, uygulamanızın çalışan bir kopyasıdır ve görüntü, uygulamayı depolayan ve kapsayıcının oluşturulduğu bir dosyadır.

Diyelim ki bir kapsayıcıda paketlemek istediğiniz bir NodeJS uygulamanız var. Diyelim ki uygulamanızı çalıştıran dosyanın adı server.js ve uygulama 8000 portunu dinlemek için dinliyor, şablon olarak "node:carbon" kullanacağız. Uygulamayı kapsayıcı hale getirmek için, uygulama dosyalarınızın bulunduğu dizinde, görüntüyü hazırlamak için parametreleri açıklayacak bir "Dockerfile" oluşturmanız gerekir:

$ Dockerfile'a dokunun

Dosyanın içeriği şöyle görünebilir:

# Kullanılacak şablonu belirtin FROM node:carbon # WORKDIR /usr/src/app kapsayıcısında uygulama çalışma dizini oluşturun # npm ile uygulama bağımlılıklarını kurun # Varsa package.json VE package-lock.json'ı kopyalayın paketi KOPYALA*.json ./ RUN npm install # Uygulama dosyalarınızı COPY imajına kopyalayın. . # 8000 numaralı bağlantı noktasını açın, böylece EXPOSE 8000 kabı dışından erişilebilir # Uygulamayı CMD kabı içinde çalıştırmak için komutu yürütün [ "npm", "start" ]

Gereksiz dosyaları görüntüden çıkarmak için adlarını ".dockerignore" dosyasında listeleyebilirsiniz. Bir maske (*.log) kullanabilirsiniz.

Görüntü aşağıdaki komutla oluşturulur:

$ docker build -t username/node-web-app .

$ docker görüntüleri # Örnek DEPO ETİKET KİMLİK OLUŞTURULAN düğüm karbon 1934b0b038d1 5 gün önce kullanıcı adı/düğüm-web-uygulaması en son d64d3505b0d2 1 dakika önce

Bir görüntüden bir kapsayıcı başlatmak aşağıdaki komutla yapılır:

$ docker run -p 49160:8000 -d kullanıcı adı/düğüm-web uygulaması

Bu örnek, "username/node-web-app" görüntüsünden bir kapsayıcı oluşturur ve hemen başlar. Uygulama bağlantı noktası 8000 yerel makinede (localhost) mevcuttur ve "dışarıda" kullanılabilir olması için 49160 bağlantı noktasına "yönlendirilir". Herhangi bir boş bağlantı noktası seçebilirsiniz, ayrıca uygulamayı iletmek mümkündür bağlantı noktası "olduğu gibi", " -p 8000:8000" seçeneğini belirterek.

Şu komutu vererek kapsayıcınızın çalıştığını görebilirsiniz:

$ docker ps # Örnek ID IMAGE COMMAND ... PORTS ecce33b30ebf kullanıcı adı/düğüm-web-app:latest npm start ... 49160->8000

Kapsayıcı, bu kapsayıcının kimliğini belirterek çeşitli komutlarla yönetilebilir:

$ docker ecce33b30ebf'yi duraklat - kapsayıcıyı ecce33b30ebf kimliğiyle duraklat
$ docker ecce33b30ebf'yi devam ettir - kapsayıcı kimliğini sürdür ecce33b30ebf
$ docker stop ecce33b30ebf - ecce33b30ebf kimliğine sahip kapsayıcıyı durdur
$ docker rm ecce33b30ebf - kapsayıcıyı kaldır (bu, kap içinde uygulama tarafından oluşturulan tüm verileri kaldırır)

Mart 2013'te Soloman Hykes, daha sonra Docker olarak bilinen açık kaynaklı bir projenin başladığını duyurdu. Sonraki aylarda Linux topluluğu tarafından güçlü bir şekilde desteklendi ve 2014 sonbaharında Microsoft, Windows Server 2016'da kapsayıcıları uygulama planlarını duyurdu. Kurucu ortak olduğum WinDocks, bağımsız bir sürümünü yayınladı. açık kaynak SQL Server'da birinci sınıf kapsayıcı desteğine odaklanan Windows için Docker 2016'nın başlarında. Konteynerler hızla endüstrinin ilgi odağı haline geliyor. Bu makalede, kapsayıcılara ve bunların SQL Server geliştiricileri ve DBA'lar tarafından kullanımına bir göz atacağız.

Konteyner Organizasyon İlkeleri

Konteynerler tanımlar yeni yöntemçok kiracılı uygulamalar için kullanıcı ve süreç izolasyonu ile birlikte uygulama paketleme. Linux ve Windows için çeşitli kapsayıcı uygulamaları yıllardır var, ancak Windows Server 2016'nın piyasaya sürülmesiyle fiili Docker standardına sahibiz. Bugün, Docker kapsayıcı API'si ve biçimi, AWS genel hizmetlerinde, Azure, Google Cloud, tüm Linux ve Windows dağıtımlarında desteklenmektedir. Docker'ın zarif çerçevesinin önemli avantajları vardır.

  • taşınabilirlik Kapsayıcılar, uygulama yazılımı bağımlılıklarını içerir ve geliştiricinin dizüstü bilgisayarında, paylaşılan bir test sunucusunda ve herhangi bir kamu hizmetinde değişmeden çalışır.
  • Konteyner ekosistemi. Docker API, izleme, günlüğe kaydetme, veri depolama, küme düzenleme ve yönetim çözümleriyle endüstri yeniliğinin odak noktasıdır.
  • Kamu hizmetleriyle uyumluluk. Kapsayıcılar, mikro hizmet mimarisi, ölçeği genişletme ve geçici iş yükleri için tasarlanmıştır. Konteynerler, onarılmak veya yükseltilmek yerine, istendiğinde çıkarılacak ve değiştirilecek şekilde tasarlanmıştır.
  • Hız ve ekonomi. Kapsayıcıların oluşturulması birkaç saniye sürer; etkin çoklu abone desteği sağlanır. Çoğu kullanıcı için sanal makine sayısı üç ila beş kat azalır (Şekil 1).

SQL Server Kapsayıcıları

SQL Server, on yıl boyunca adlandırılmış örnek çoklu kiracılığını desteklemektedir, peki SQL Server kapsayıcılarının değeri nedir?

Mesele şu ki, SQL Server kapsayıcıları hızları ve otomasyonları nedeniyle daha pratik. SQL Server kapsayıcıları, saniyeler içinde sağlanan veriler ve ayarlarla birlikte örnekler olarak adlandırılır. SQL Server kapsayıcılarını saniyeler içinde oluşturma, silme ve değiştirme yeteneği, bunları geliştirme, KG ve aşağıda tartışılan diğer kullanım durumları için daha pratik hale getirir.

Hızları ve otomasyonları ile SQL Server Containers, bir üretim geliştirme ve kalite kontrol ortamı için idealdir. Ekibin her üyesi, sanal makine sayısında üç ila beş kat azalma ile paylaşılan bir sanal makinede yalıtılmış kaplarla çalışır. Sonuç olarak, sanal makinelerin bakımında ve Microsoft lisanslarının maliyetinde önemli tasarruflar elde ediyoruz. Konteynerler, depolama replikaları ve veritabanı klonları kullanılarak Depolama Alanı Ağı (SAN) dizilerine kolayca entegre edilebilir (Şekil 2).

1 TB'lık ekli bir veritabanı, bir kapsayıcıda bir dakikadan daha kısa sürede başlatılır. Bu, her geliştirici için özel olarak adlandırılmış örneklere veya sanal makinelere sahip sunuculara göre önemli bir gelişmedir. Bir şirket, 20 400 GB'a kadar SQL Server kapsayıcılarına hizmet etmek için sekiz çekirdekli bir sunucu kullanır. Geçmişte, her bir sanal makinenin sağlanması bir saatten fazla sürüyordu ve kapsayıcı örnekleri iki dakika içinde sağlanıyordu. Böylece sanal makine sayısını 20 kat, işlemci çekirdek sayısını 5 kat azaltmak ve Microsoft lisansları için ödeme maliyetini önemli ölçüde azaltmak mümkün oldu. Ayrıca, iş dünyasında artan esneklik ve yanıt verme yeteneği.

SQL Server Kapsayıcılarını Kullanma

Kapsayıcılar, bir kapsayıcı oluşturmak için belirli adımlar sağlayan Dockerfile betikleri kullanılarak tanımlanır. Şekil 1'de gösterilen Dockerfile, konteynere kopyalanan veritabanları ve seçilen tabloları maskelemek için bir SQL Server betiği ile SQL Server 2012'yi belirtir.

Her kapsayıcı, yardımcı dosyalar ve günlük dosyaları içeren düzinelerce veritabanı içerebilir. Veritabanları bir kapsayıcıda kopyalanabilir ve çalıştırılabilir veya MOUNTDB komutu kullanılarak monte edilebilir.

Her kapsayıcı, ana bilgisayar kaynaklarından izole edilmiş özel bir dosya sistemi içerir. Şekil 2'de konteyner MSSQL-2014 vevent.mdf kullanılarak oluşturulmuştur. Benzersiz bir ContainerID ve kapsayıcı bağlantı noktası oluşturulur.


Şekil 2: SQL Server 2014 kapsayıcı vevent.mdf

SQL Server kapsayıcıları sağlar yeni seviye performans ve otomasyon, ancak davranışları normal adlandırılmış boşluklarla tamamen aynıdır. Kaynak yönetimi, SQL Server Enstrümantasyon kullanılarak veya kapsayıcı kaynak sınırları aracılığıyla uygulanabilir (Şekil 3).

Diğer uygulamalar

Kapsayıcılar, bir geliştirme ve KG ortamı düzenlemenin en yaygın yoludur, ancak başka kullanımlar da ortaya çıkmaktadır. Olağanüstü durum kurtarma testi, basit ama umut verici bir kullanım durumudur. Diğerleri, SAP veya Microsoft Dynamics gibi eski uygulamalar için dahili SQL Server ortamının kapsayıcılığını içerir. Kapsayıcılı arka uç, desteklemek ve desteklemek için bir çalışma ortamı sağlamak için kullanılır. mevcut bakım. Değerlendirme kapsayıcıları, kalıcı veri depolarıyla üretim ortamlarını desteklemek için de kullanılır. Aşağıdaki makalelerden birinde kalıcı veriler hakkında ayrıntılı olarak konuşacağım.

WinDocks, bir web arabirimi aracılığıyla kapsayıcıların kullanımını daha da kolaylaştırmaya kendini adamıştır. Başka bir proje, DevOps'ta SQL Server kapsayıcılarını geçirmeye veya Jenkins veya Team City'ye dayalı CI/CD ardışık düzenleriyle Sürekli Entegrasyona odaklanır. Bugün tüm kaplarda kapların kullanımı hakkında bilgi sahibi olabilirsiniz. Windows sürümleri WinDocks Community Edition kopyanızı (https://www.windocks.com/community-docker-windows) kullanarak SQL Server 2008 ile başlayan tüm sürümleri destekleyen 8 ve Windows 10, Windows Server 2012 veya Windows Server 2016.

Konteyner teknolojisini keşfetmek
Windows Sunucusu 2016

Windows Server 2016'da tanıtılan dikkate değer yeni özelliklerden biri kapsayıcılar için destektir. onu daha iyi tanıyalım

Modern sistemler uzun zamandır bir işletim sistemi - bir sunucu ilkesinden uzaklaştı. Sanallaştırma teknolojileri, sunucu kaynaklarının daha verimli kullanılmasını sağlayarak, birden çok işletim sistemini çalıştırmanıza, bunları birbirinden ayırmanıza ve yönetimi basitleştirmenize olanak tanır. Ardından, yalıtılmış uygulamaları ayrı, kolay yönetilen ve ölçeklenebilir bir bileşen olarak dağıtmanıza olanak tanıyan mikro hizmetler vardı. Docker her şeyi değiştirdi. Bir uygulamayı bir ortamla birlikte teslim etme süreci o kadar basitleşti ki, son kullanıcının ilgisini çekmeden edemedi. Kapsayıcının içindeki uygulama, tam teşekküllü bir işletim sistemi kullanıyormuş gibi çalışır. Ancak sanal makinelerin aksine, işletim sisteminin, kitaplıkların, sistem dosyalarının vb. kendi kopyalarını yüklemezler. Kapsayıcılar, uygulama için gerekli tüm kaynakların mevcut olduğu ancak çıkılamayan yalıtılmış bir ad alanı alır. Ayarları değiştirmeniz gerekirse, yalnızca ana işletim sistemiyle olan farklar kaydedilir. Bu nedenle konteyner, sanal makinelerin aksine çok hızlı başlar ve sistemi daha az yükler. Kapsayıcılar, sunucu kaynaklarını daha verimli kullanır.

Windows'ta Kapsayıcılar

Windows Server 2016'da, mevcut sanallaştırma teknolojilerine - Hyper-V ve Server App-V sanal uygulamalarına ek olarak, gerekli tüm işlevleri uygulayan Container Management yığın soyutlama katmanı aracılığıyla uygulanan Windows Server Containers kapsayıcıları için destek eklendi. Teknoloji, Teknik Önizleme 4'te duyuruldu, ancak o zamandan beri basitleştirme yönünde çok şey değişti ve daha önce yazılmış talimatlar okunamıyor bile. Aynı zamanda, iki tür "kendi" kapsayıcı önerildi - Windows kapsayıcıları ve Hyper-V kapsayıcıları. Ve muhtemelen başka bir ana fırsat, kapsayıcıları yönetmek için PowerShell cmdlet'lerine ek olarak Docker araçlarının kullanılmasıdır.

Windows kapsayıcıları prensipte FreeBSD Jail veya Linux OpenVZ'ye benzer, işletim sistemi ile birlikte diğer kaynaklarla (RAM, ağ) kendi aralarında paylaşılan bir çekirdek kullanırlar. İşletim sistemi dosyaları ve hizmetleri, her bir kapsayıcının ad alanına eşlenir. Bu tür kapsayıcı kaynakları verimli bir şekilde kullanır, ek yükü azaltır ve bu nedenle uygulamaların daha yoğun yerleştirilmesine olanak tanır. Konteynerin temel görüntüleri bir düğüme sahip bir çekirdeğe "sahip" olduğundan, sürümlerinin eşleşmesi gerekir, aksi takdirde işlem garanti edilmez.

Hyper-V kapsayıcıları ek bir yalıtım katmanı kullanır ve her kapsayıcıya kendi çekirdeği ve belleği atanır. İzolasyon, önceki türden farklı olarak, işletim sistemi çekirdeği tarafından değil, Hyper-V hipervizörü tarafından gerçekleştirilir (Hyper-V rolünü gerektirir). Sonuç, sanal makinelerden daha az ek yük, ancak Windows kapsayıcılarından daha fazla yalıtımdır. Bu durumda, kabı çalıştırmak için aynı işletim sistemi çekirdeğine sahip olun. Bu kapsayıcılar, Windows 10 Pro/Enterprise'a da dağıtılabilir. Konteyner türünün oluşturma sırasında değil, dağıtım zamanında seçildiğini özellikle belirtmekte fayda var. Yani, herhangi bir kapsayıcı hem Windows hem de Hyper-V varyantı olarak çalıştırılabilir.

Kapsayıcıdaki işletim sistemi olarak, kırpılmış Sunucu Çekirdeği veya Nano Sunucu kullanılır. İlki Windows Sever 2008'de ortaya çıktı ve mevcut uygulamalarla daha fazla uyumluluk sağlıyor. İkincisi, Sunucu Çekirdeğine göre daha sadedir ve monitör olmadan çalışacak şekilde tasarlanmıştır; bu, sunucuyu Hyper-V, dosya sunucusu (SOFS) ve bulut hizmetleriyle kullanım için mümkün olan en küçük yapılandırmada çalıştırmanıza olanak tanır ve %93 daha az gerektirir uzay. Sadece en fazlasını içerir gerekli bileşenler(.Net, CoreCLR, Hyper-V, Kümeleme, vb.).

Depolama için VHDX sabit disk görüntü formatı kullanılır. Konteynerler, Docker örneğinde olduğu gibi, depoda görüntü olarak kaydedilir. Ayrıca, her biri tam bir veri kümesini kaydetmez, yalnızca oluşturulan görüntü ile temel görüntü arasındaki farkları kaydeder. Ve başlatma sırasında, gerekli tüm veriler belleğe yansıtılır. Sanal Anahtar, kapsayıcı ile fiziksel ağ arasındaki ağ trafiğini yönetmek için kullanılır.