PowerShell Uzaktan İletişim Oturumları ve Kapsayıcılar


Bu yıl Docker Masaüstü uygulaması aracılığıyla konteynerlerle çalışmalarımı hızlandırdım. Windows Server 2016 önizlemedeyken Microsoft, konteynerlerle çalışmak için bazı PowerShell cmdlet'lerini denedi ancak hiçbir yere varamadılar. Esasen, liman işçisi komut satırı fiili yönetim aracı haline geldi. PowerShell Galerisinde gördüğüm bazı modüller var ancak bunların çoğunun liman işçisi komutları için sarmalayıcılar olduğunu düşünüyorum. Şimdilik docker öğrenmeye devam edeceğim. Sonunda bir PowerShell aracına geçersem temel teknolojiye dair sağlam bir anlayışa sahip olacağım. Bu zorluklardan biri, Windows sunucu kapsayıcısıyla PowerShell uzaktan iletişimini çözmekti.

Kapsayıcı Oluşturma

Resmi Microsoft/windowserver görüntüsünü zaten Windows 10 masaüstümdeki docker'dan aldım. Daha sonra, oluşturmayı düşündüğüm kapsayıcı üzerinde daha fazla kontrol sahibi olabilmek için yeni bir ağ oluşturdum.

docker network create --driver nat --internal --subnet 192.168.4.0/24 company

Daha sonra bir IP adresi ve ana bilgisayar adı atayan bir kap oluşturdum.

docker container create --name srv4 --interactive --dns 1.1.1.1 --network company --memory (2gb) --ip 192.168.4.20 --hostname SRV4 microsoft/windowsservercore

docker start srv4

Bu noktada konteyner çalışıyor. Sorunsuz bir şekilde ping atabiliyorum.

Konteyneri Yapılandırma

Daha sonra görüntüyü güncellemeye karar verdim. Yöneticinin ne olduğu hakkında hiçbir fikrim yok, ancak docker'ı kullanarak yeni bir yerel yönetici hesabı eklemek için komutları çalıştırabilirim.

docker exec srv4 net user localadmin P@ssw0rd /add
docker exec srv4 net localgroup administrators localadmin /add

Ayrıca kapsayıcı adına veya IP adresine uzaktan erişime izin vermek için güvenilir ana bilgisayar ayarlarınızı da değiştirmeniz gerekebilir. Ad çözümlemesini kolaylaştırmak için LMHOSTS dosyasına bir giriş de eklemek isteyebilirsiniz. Her açıdan bakıldığında bu umut verici görünüyor.

Container'a bağlanma

Yerel bir yönetici hesabım olduğundan, bir CIMSession kurmak ve bunu kapsayıcıyı sorgulamak için kullanmak kolaydır.

$cs = new-cimsession -ComputerName 192.168.4.20 -Credential localadmin

Cimsession parametresine sahip çoğu cmdlet'in düzgün çalışması gerekir.

Harika. Yani bir PSSession da çalışmalıdır.

Bu beni şaşırttı. Aynı kimlik bilgisini Cimsession için de hatasız olarak kullandım. Bir konteynerin sanal makine olmadığını hatırlamanız gereken yer burasıdır. Tam bir işletim sistemine sahip eksiksiz bir sunucu değildir. Yardıma baktığımda konteyner kimliği için bir parametre olduğunu keşfettim. Konferans oturumlarımdan veya derslerimden birine katılmış olanlar, her zaman okumanın ve yeniden okuma yardımının öneminden bahsettiğimi biliyorlar. İşte harika bir örnek.

Container PSSession'ı Bağlama

Bu oldukça basit görünüyor. Konteyner kimliğini docker ps komutuyla gördüm.

Şimdilik yalnızca kopyalayıp yapıştırıp yeni sözdizimini deneyeceğim.

Yine kafam karıştı ve liman işçisi komutları hakkında biraz daha okumaya başvurmak zorunda kaldım. İşte o zaman konteyner kimliğinin aslında çok daha uzun bir değer olduğunu öğrendim. Docker ps komutu bana kesilmiş bir sürüm veriyor. Docker'a bana tam değeri vermesini söylemem gerekiyordu.

Bu çok fazla yazı gerektiriyor ve kopyalayıp yapıştırmak elbette ölçeklenmeyecek. Neyse ki yalnızca kimliği görüntüleyen bir docker komutu buldum.

$id = docker container ls -q --no-trunc

Benim durumumda bu gayet iyi çalışıyor çünkü çalışan yalnızca 1 konteynerim var. Sonunda ölçeklendirmenin daha iyi bir yolunu bulmam gerekecek. Ama şimdilik bunu deneyelim.

Hızlı bir bağlantı değil ama işe yarıyor. Gördüğünüz gibi konteyner yöneticisi hesabını kullanarak bağlanıyorum. Konteyner kimliğini aldıktan sonra onu Invoke-Command ile de kullanabilirim.

Burada yerel docker exec komutunu kullanmanın çok daha fazla değeri olduğundan emin değilim.

Invoke-Command'ı kullanmak 14 saniye sürdü ve docker komutu 11 saniye sürdü. Yine de, ihtiyacım olursa PSSession'ı bir docker konteynerine nasıl bağlayıp kullanacağımı bilmek güzel.

Konteynerlere daldınız mı? PowerShell çalışmanızı entegre etmeye mi çalışıyorsunuz? Ne öğrendin? Sorunlar neler? Onlar hakkında bir şeyler duymayı çok isterim, biliyorum.

İlgili makaleler