7 Aralık 2020 Pazartesi
CentOS 7'de VirtualBox Nasıl Kurulur
Şu komutu kullanarak mevcut CentOS 7 kurulumunu güncelleyerek sisteminizi hazırlayın:
sudo yum update
Adım 1: vboxdrv Kernel Module'ü kurun
VirtualBox, konuk işletim sistemleri için fiziksel belleği kontrol etmek ve tahsis etmek için vboxdrv çekirdek modülünü kullanır.
Ek modüller (kernel-devel, dkms, kernel-headers, wget ve diğer bağımlılık paketleri) kurmak için şunu girin:
sudo yum install –y patch gcc kernel-headers kernel-devel make perl wget
Kurulum tamamlandığında, yeni çekirdeği kullanmaya başlamak için sisteminizi yeniden başlatın:
sudo reboot
Adım 2: VirtualBox Deposunu İndirin
VirtualBox Oracle deposunu indirmek için şunu girin:
sudo wget http://download.virtualbox.org/virtualbox/rpm/el/virtualbox.repo -P /etc/yum.repos.d
Komut, depo dosyasını indirir ve /etc/yum.repos.d dizinine yerleştirir.
3. Adım: VirtualBox'ı kurun
VirtualBox'ı indirilen depodan kurun: (Ben yazıyı hazırlarken son sürüm 6.1 olduğundan. Ben VirtualBox 6.1 kurulumu üzerinden gideceğim)
sudo yum install VirtualBox-6.1
Sistem sizden GPG anahtarını kabul etmenizi ister. Onaylamak için Y girin.
Kurulum tamamlandıktan sonra, VirtualBox Linux çekirdek modülü hizmetinin durumunu kontrol edin:
sudo systemctl status vboxdrv
Terminal çıktısı, hizmetin etkin olduğunu doğrular ve bir zaman damgası sağlar.
Adım 4: Oracle VirtualBox Extension Pack'i Kurun (İsteğe Bağlı)
USB kullanımı, uzak masaüstü protokolleri veya disk şifreleme gibi işlevler için ek paketlerin ayrıca yüklenmesi gerekir.
VirtualBox paketini indirmek için şunu girin: (Ben yazıyı hazırladığımda Virtualbox 6.16 sürümü en güncel sürüm olduğundan örnek kodumu 6.16 üzerinden oluşturdum.)
wget http://download.virtualbox.org/virtualbox/6.1.16/Oracle_VM_VirtualBox_Extension_Pack-6.1.16.vbox-extpack
Terminal ekranından, paketlerin indirildiğini görebiliriz.
Ardından, paketi VirtualBox'a aktarın:
sudo VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-6.1.16.vbox-extpack
Y ile hüküm ve koşulları kabul ettiğinizi onaylayın. Sistem, uzantı paketinin başarıyla kurulduğunu onaylar.

Adım 5: VirtualBox'ı Başlatın
Yeni kurulan VirtualBox'a erişmek için şu komutu kullanın:
VirtualBox
Not:
Virtualbox'ı Centos7 sisteminden kaldırmak isterseniz şu komutu kullanabilirsiniz: (ilgili komut sayfası)
Virtualbox'ı Centos7 sisteminden kaldırmak isterseniz şu komutu kullanabilirsiniz: (ilgili komut sayfası)
sudo yum erase *VirtualBox*
16 Kasım 2020 Pazartesi
Docker Container Yapısı -1
Bu yazıda Docker Container yapısında yer alan Docker CLI kullanımına, komutlarına ve bilmemiz gerek temel özelliklere değinmeye çalışacağım.
Docker CLI (Command Line Interface): Bir docker kurulumu yaptığımızda sisteme yüklenen ve o Docker Engine yi yönetmemizi sağlayan komut satırı ara yüzüdür.
terminal satırına aşağıda ki komutu yazarak makinemizde kurulu olan docker engine hakkında bilgileri görelim:
docker info
komut çalıştırıldığında, makinemizde kurulu olan docker engine hakkında ki bilgileri ekrana yazar.
Çıktıda göreceğimiz gibi mevcutta kaç containerımız var, bu containerların kaç tanesi çalışıyor kaç tanesi durmuş durumda gibi temel bilgilere docker info komutu ile ulaşabiliriz.
Docker içinde kullanabileceğimiz bütün komutlara erişmek için komut satırına "docker" yazmamız yeterli olacaktır
docker
Terminal satırına "docker" komutunu yazıp çalıştırırsak Docker içinde kullanabileceğimiz bütün komutları görmüş oluruz.
Ekran çıktısında Management Commands ve Commands başlıkları altında kullanabileceğimiz komut formatlarını görebiliriz.
Docker ilk ortaya çıktığında komut satırı docker command ( docker run hello-world gibi) şeklindeydi. Bu kullanım Docker'ın geriye dönük uyumlu olamak istemesinden hala çalışıyor.
Docker geliştikçe ve daha kompleks işlemler yapmaya başladıkça komut satırını üç kademeli bir yapıya geçirdi. Bu nedenle hemen hemen her Command kendi Management komutuna sahip oldu. Bu üç kademeli yapıyı da docker management-command command( docker conntainer run hello-world ) şeklinde yapılandırdı.
Kısacası Docker da hangi Management Command ile işlem yapmak istiyorsak önce onu yazıyoruz ardından Command komutunu yazıyoruz. Bu kısımda bütün komutları ezberlememize tabi ki olanak yok. Ezberlemeye çalışmak yerine --help yardım komutunu kullanmak bizim için daha faydalı olacaktır. Mesela "image" lerle ilgili bir işlem yapmak istiyoruz, terminal satırına docker image --help komutunu yazalım.
docker image --help
Ekran çıktısından da gördüğünüz gibi image Management Commands'ı ile yapabileceğimiz komutlar karşımıza çıkıyor. Örnek olarak bir tane image silmek istiyorsak. Commands lara baktığımızda silme komutunun "rm" olduğunu görüyoruz. Peki "docker image rm" komutunu nasıl kullancağız?
Komut satırına "docker image rm --help" yazarsak image içinde "rm" i nasıl kullanabileceğimizi bize gösterecektir.
En üstte gördüğümüz gibi docker image rm [OPTIONS] IMAGE [IMAGE...] yapısıyla image management-commands' ını kullanabiliyoruz.
Örnek olarak:
docker image rm -f hello-world
Docker Container:
Bir docker container'ı nasıl oluşturacağımızı komut satırına "--help" fonksiyonu ile öğrenelim.
docker container --help
Ekran çıktısını incelediğimizde "create" komutu bir container oluşturmamızı, "start" komutu ise o container'ı başlatmamızı sağlıyor.
Her defasında önce container'ı oluşturup sonra start ile çalıştırmak yerine "run" komutunu da kullanabiliriz. Bu komut (run) yukarıda da açıklandığı gibi container yoksa önce oluşturuyor sonra da çalıştırıyor.
Peki docker container run komutunu nasıl kullanacağız?
docker container run --help
Bu komutu yazdığınızda karşınıza uzunca bir liste çıkacaktır. Bu listeyi inceleyip farklı komutlar kullanabilirsiniz. Ben örnek olması amacıyla "run" komutunu inceleyeceğim.
Ekran çıktısında önemli olan kısım Usage kısmıdır. Docker, Usage kısmında bu komutu nasıl kullanacağımızı bize söylüyor.
"Usage: docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]"
docker container run daha sonra girmek istediğim bir "OPSIONS" varsa bunu yazıyorum sonra hangi "IMAGE" den bir container yaratmak istiyorsam o image'nin adını giriyorum en son olarak ta bu image içinde farklı bir komut çalıştırmak istiyorsam o komutları giriyorum. Hadi deneyelim:
docker container run --name ilkcontainer emrahakin/ilkcontainer
Komut satırına aşağıda ki komutu yazdığımızda ilkcontainer adında emrahakin/ilkcontainer image sinden bir container oluşturacağız.
docker container run --name ilkcontainer emrahakin/ilkcontainer
Görüldüğü gibi docker run komutundan sonra emrahakin/ilkcontainer image si bizde olmadığı için önce docker hub dan bu image yi çekti ve ardından bu image den ilkcontainer isminde bir container oluşturdu ve container içerisinde ki uygulamayı çalıştırdı "Merhaba İlk Container Başarıyla Oluşturuldu" yazısını yazdı ve container kapatıldı.
https://github.com/emrakin/DockerLearningRepo/tree/main/CreateDockerImage/CreateDockerImage dilerseniz bu linkte ki Dockerfile dosyasını ve ilkcontainer olarak indirdiğimiz .NET Console Uygulamasını inceleyebilirsiniz.
docker container ls -a
Komut satırına docker container ls -a yazarsak sistemimizde oluşturulmuş bütün container ları görebiliriz. (-a yazmazsak sadece çalışan container ları görebiliriz.)
ilkcontainer isimli container a baktığınız da "STATUS" kısmında Exited (yani kapatılmış) yazdığını göreceksiniz. Kapatılmasının sebebini şöyle açıklayabiliriz.
Bir docker imajından container oluşturduğumuz zaman içinde varsayılan olarak çalışması için bir uygulama vardır. Bu uygulama çalıştığı sürece container ayakta kalır. Uygulama çalışmayı bıraktığı zaman container da kapanır. Bizim docker imajımızda yer alan uygulama da ekrana "Merhaba İlk Container Başarıyla Oluşturuldu" yazısını yazdıktan sonra kapandığı için ilkcontainer adında oluşturduğumuz container da Exited olmuş durumda. Yukarıda da bahsettiğim gibi ben burada bir .NET Console App uygulaması yaptım Dockerfile ve uygulamaya https://github.com/emrakin/DockerLearningRepo/tree/main/CreateDockerImage/CreateDockerImage bu linkten ulaşabilir ve inceleyebilirsiniz.
Bir sonra ki anlatımda container yapısına devam edeceğim ve bir web uygulamasının docker içinde nasıl çalıştırıldığından bahsedeceğim.
13 Mart 2020 Cuma
C# Dersleri 9 - Veri Tipleri : Enum Veri Tipi
Enum Veri Tipi
Enum, sabitlerle tanımlanmış ayırt edici bir veri tipidir. Enum kullanmanın en temel amacı, programlamada "magic string" denilen değerler tutmak yerine bir Enum sabiti ile bu değerleri getirmektir.
magic string nedir derseniz? Mesela
string gunler = "Salı";
gibi bir değişken tanımladığımızda burada ki "Salı" bir magic stringtir.
Eğer Günlerden birini getirmek istiyorsak bir Enum sabiti vasıtasıyla bunu yapabiliriz.
Örnek Uygulama:
Sali
1
1
Uygulamanın çıktısına baktığımızda "(int)Gunler.Salı" için "1" değerini verdiğini görüyoruz. Enum sabitleri de eğer bir tanımlama yapılmamışsa "Pazartesi=1 gibi" değerlerini sıfırdan başlatırlar.
Enum sabitlerinin "if" bloglarıyla kullanımı içinde bir örnek uygulama yazalım.
if bloglarına bir sonra ki yazıda değineceğiz fakat enum sabitlerini anlamamız için güzel bir örnek olacağını düşünüyorum
Örnek Uygulama:
Seçtiginiz Gün Haftasonu Günü Degildir
Github Adresi : https://github.com/emrakin/CSharpDersleri
Tüm Derslerin Listesi için Tıkla
C# Dersleri 8 - Veri Tipleri : Decimal Veri Tipi
Decimal Veri Tipi
Decimal veri tipleri 128 bitlik gerçek sayı değerleridir. Integer için long neyse double içinde decimal odur.
Decimal değişkeninde eğer tam sayı olmayan bir değer tutmak istiyorsak sayının sonuna M veya m harfini koymamız ve bu değerin bir decimal değişkeni olduğunu belirtmemiz gerekmektedir. Bunun sebebi C# ortamında ondalıklı sayıların varsayılan değeri double'dır.
Decimal değişkeninde bir tam sayı kullanacaksak sonuna bu M veya m harfini yazmamıza gerek yoktur.
Örnek Uygulama:
Örnek Çıktı:
Birinci sayi: 10
Ikinci sayi: 10.5
Üçüncü sayi: -10
Dördüncü sayi: -10.5
Maksimum deger: 79228162514264337593543950335
Minimum deger: -79228162514264337593543950335
Ikinci sayi: 10.5
Üçüncü sayi: -10
Dördüncü sayi: -10.5
Maksimum deger: 79228162514264337593543950335
Minimum deger: -79228162514264337593543950335
Github Adresi : https://github.com/emrakin/CSharpDersleri
Tüm Derslerin Listesi için Tıkla
12 Mart 2020 Perşembe
C# Dersleri 7 - Veri Tipleri : Double Veri Tipi
Double Veri Tipi
Double veri tipleri 64 bitlik gerçek sayı değerleridir. Double olarak tanımlanmış değişkenlerde tam sayılardan farklı olarak ondalıklı sayıları da tutabiliriz.
double deger = 10.4;
Örnek Uygulama:
Örnek Çıktı:
Birinci degisken: 243.14
Ikinci degisken: -1432
Maksimum deger: 1.7976931348623157E+308
Minimum deger: -1.7976931348623157E+308
Ikinci degisken: -1432
Maksimum deger: 1.7976931348623157E+308
Minimum deger: -1.7976931348623157E+308
Github Adresi : https://github.com/emrakin/CSharpDersleri
Tüm Derslerin Listesi için Tıkla
C# Dersleri 6 - Veri Tipleri : Char Veri Tipi
Char Veri Tipi
Char veri tip 16 bit uzunluğunda unicode standartlarında karakterlerin karşılığını tutan bir veri tipidir. Her karakterin unicode standartları çerçevesinde bir karşılığı bulunmaktadır ve char tipinde ki değişkene bir değer atandıktan sonra o değişken bir karakteri temsil etmektedir.Char veri tiplerine doğrudan karakter atayabilirsiniz.
char deger1 = 'A';Char veri tipine hexadecimal karakter karşılında değer atabilirsiniz.
char deger2 ='\x0058'Char veri tipine ASCII sayısal karşılığından Char tipine dönüşüm yapabilirsiniz.
char deger3 = (char)55;Char veri tipine Unicode karakter ataması yapabilirsiniz.
char deger4 = '\u0058';
Örnek Uygulama:
A
X
7
X
X
7
X
Github Adresi : https://github.com/emrakin/CSharpDersleri
Tüm Derslerin Listesi için Tıkla
C# Dersleri 5 - Veri Tipleri : Bool Veri Tipi
Bool Veri Tipi
Bool veri tipi "Doğru" veya "Yanlış" olmak üzere iki değer alabilen mantıksal bir veri tipidir. Daha çok kontrol işlemlerinde kullanılır.
bool dogru= true;İleri ki yazılarda şart ve kontrol bloklarını incelerken bool değişkenini bolca kullanacağız. Şimdilik sadece iki değer aldığınız ve bunları "True" veya "False" olduğunu bilmeniz yeterli olacaktır.
bool yanlis = false;
Örnek bir uygulama da bunu göstermek istersek. Mesela elimizde değeri 8 olan integer bir değişken olsun ve bunun 12 den büyük olup olmadığını kontrol edelim.
Örnek Uygulama:
Örnek Çıktısı:
False
sayi değişkenine atadığımız 8 değeri 12 sayısından küçük olduğu için sonuç "False" olarak döndü.
Son olarak bool veri tipinin de bir Değer Tipi olduğunu unutmayın.
Github Adresi : https://github.com/emrakin/CSharpDersleri
Tüm Derslerin Listesi için Tıkla
C# Dersleri 4 - Veri Tipleri : Byte Veri Tipi
Byte Veri Tipi:
Byte(byte) tam sayıları tuttuğumuz 8 bitlik veri depolayan bir değer tipidir.
Byte veri tipi 0 ile 255 arasında ki değerleri alabilir. Görüldüğü üzere eksi (negatif) bir tam sayı değeri alamaz.
Örnek Uygulama:
Byte veri tipi 0 ile 255 arasında ki değerleri alabilir. Görüldüğü üzere eksi (negatif) bir tam sayı değeri alamaz.
Örnek Uygulama:
Örnek Çıktı:
Ilk Sayi: 5
Ilk Sayi: 8
Max Sayi: 255
Min Sayi: 0
Ilk Sayi: 8
Max Sayi: 255
Min Sayi: 0
Github Adresi : https://github.com/emrakin/CSharpDersleri
Tüm Derslerin Listesi için Tıkla
C# Dersleri 3 - Veri Tipleri : Short Veri Tipi
Short Veri Tipi:
Short(short) tam sayıları tuttuğumuz 16 bitlik veri depolayan bir değer tipidir.
Integer ve Long veri tiplerine göre bellekte daha az yer kaplarlar ve değer aralıkları da daha küçüktür. Short veri tipi -32768 ile 32767 arasında ki değerleri alabilir.
short ilknumara = 10;
Örnek Uygulama:
Örnek Çıktı:
Ilk Sayi: 10
Ilk Sayi: -15
Max Sayi: 32767
Min Sayi: -32768
Ilk Sayi: -15
Max Sayi: 32767
Min Sayi: -32768
Github Adresi : https://github.com/emrakin/CSharpDersleri
Tüm Derslerin Listesi için Tıkla
11 Mart 2020 Çarşamba
C# Dersleri 2 - Veri Tipleri : Long Veri Tipi
Long Veri Tipi:
Bir önce ki yazı da Integer Veri Tipini öğrendik ve -2147483648 ile 2147483647 arasında değer alabileceğini belirttik. Peki kullanmak istediğim değer bu sayı değerlerinin arasında yer almıyorsa ne yapmalıyız?
Bu tarz durumlarda integer veri tipinden daha büyük aralığa sahip"long" veri tipini kullanabiliriz. Long veri tipi integer veri tipinin aldığı her değeri alabilir.
long ilknumara = 2147483647 ;Burada aklınıza şu soru gelebilir. Madem long veri tipi integer veri tipinin aldığı tüm değerleri ve daha fazlasını alabiliyor o zaman neden integer kullanayım her değişkeni long tanımlarım.
Long veri tipi 64 bitlik veri depolamasından dolayı bellek üzerinde kapladığı alan integer veri tipinden büyüktür. Bu bakımdan zorunlu kalınmadıkça (integer ihtiyacımızı karşılıyorsa) long veri tipini kullanmak bellek üzerinde fazladan bir alan kaybına neden olacaktır.
Bellekte ayrılan alanın, tuttuğumuz değerle bir alakası yoktur, değer tipimizle bir alakası vardır. Bu bakımdan long veri tipinde değeri 15 olan bir değişkeni tutmak istediğimizde kullandığımız bellek alanı ile int veri tipinde değeri 15 olan bir değişkeni tutmak istediğimizde kullandığımız bellek alanı arasında fark vardır.
Bu bakımdan integer ihtiyacımızı karşılıyor iken long veri tipini tutmamızın bir anlamı yoktur.
Örnek Uygulama:
static void Main(string[] args)
{
long ilknumara = 92233720368547;
long ikincinumara = -92233720368547;
Console.WriteLine("İlk Sayı: {0}", ilknumara);
Console.WriteLine("İkinci Sayı: {0}", ikincinumara);
Console.ReadLine();
}
{
long ilknumara = 92233720368547;
long ikincinumara = -92233720368547;
Console.WriteLine("İlk Sayı: {0}", ilknumara);
Console.WriteLine("İkinci Sayı: {0}", ikincinumara);
Console.ReadLine();
}
Uygulama Çıktısı:
Ilk Sayi: 92233720368547
Ikinci Sayi: -92233720368547
Ikinci Sayi: -92233720368547
Long veri tipinin değer aralığı –9,223,372,036,854,775,808 ile 9,223,372,036,854,775,807 arasındadır.
Örnek Uygulama:
static void Main(string[] args)
{
long ilknumara = 92233720368547;
long ikincinumara = -92233720368547;
long maxdeger = 9223372036854775807;
long mindeger = -9223372036854775808;
Console.WriteLine("İlk Sayı: {0}", ilknumara);
Console.WriteLine("İkinci Sayı: {0}", ikincinumara);
Console.WriteLine("Max Sayı: {0}",maxdeger);
Console.WriteLine("Min Sayı: {0}",mindeger);
Console.ReadLine();
}
{
long ilknumara = 92233720368547;
long ikincinumara = -92233720368547;
long maxdeger = 9223372036854775807;
long mindeger = -9223372036854775808;
Console.WriteLine("İlk Sayı: {0}", ilknumara);
Console.WriteLine("İkinci Sayı: {0}", ikincinumara);
Console.WriteLine("Max Sayı: {0}",maxdeger);
Console.WriteLine("Min Sayı: {0}",mindeger);
Console.ReadLine();
}
Uygulama Çıktısı:
Ilk Sayi: 92233720368547
Ikinci Sayi: -92233720368547
Max Sayı: 9223372036854775807
Min Sayı: -9223372036854775808
Ikinci Sayi: -92233720368547
Max Sayı: 9223372036854775807
Min Sayı: -9223372036854775808
Github Adresi : https://github.com/emrakin/CSharpDersleri
Tüm Derslerin Listesi için Tıkla