Yapay zekadan makale özeti
- Kısa
- Ayrıntılı
- Bu video, bir eğitmen tarafından sunulan Docker teknolojisi ve NoSQL veritabanları hakkında kapsamlı bir eğitim serisidir.
- Eğitim, yazılımcıların projeleri sürdürme sürecinde karşılaştıkları sorunlara çözüm sunmak amacıyla hazırlanmıştır. İlk bölümde sanallaştırma kavramı ve bilgisayar tarihi ele alınırken, ilerleyen bölümlerde Docker'ın temel kavramları (imaj, konteyner, Dockerfile), çalışma prensipleri ve kullanım örnekleri detaylı olarak anlatılmaktadır. Eğitim, Node.js, Python, Redis gibi farklı teknolojilerin Docker ile nasıl kullanılacağını göstermekte ve ileriki derslerde NoSQL veritabanları (MongoDB, Elastic Search, Cassandra, Neo4j, Redis) hakkında örnekler yapılacağını belirtmektedir.
- Eğitimde Docker komutlarının pratik kullanımı, konteyner yönetimi, Dockerfile oluşturma, Python ve Redis konteynerları arasındaki bağlantı kurma gibi konular adım adım gösterilmektedir. Ayrıca, Docker'ın devops süreçlerindeki avantajları, kaynak optimizasyonu ve farklı programlama dillerinin Docker içinde nasıl çalıştırılacağı da ele alınmaktadır.
- Dersin Amacı ve İçeriği
- Dersin adı Docker ve NoSQL olup, ilk önce Docker teknolojisi hakkında bilgi verilecek, ardından NoSQL veritabanlarına geçilecek.
- Dersin amacı yazılımcıları farklı düşünmeye itmek ve karşılıkları çıkan sorunlara farklı çözümler bulmalarını sağlamaktır.
- Yazılımcıların çoğu zamanı projeyi başlangıç aşamasında değil, devam ettirerek geçiriyor ve bu derste geliştirme ortamını iyi kurup sorunları hızlıca çözebilme becerisi kazanılacak.
- 01:11Docker'ın Önemi
- Bir yazılımcı, web sitesinde içerik arama özelliği eklemek isteyen bir müşteriye karşı Elastic Search gibi hazır çözümleri denemek için önce bilgisayara kurması gerekiyor.
- Kurma aşamaları genellikle basit görünse de Windows'ta "next next next" muhabbeti gibi geçmiyor ve sunucuya kurarken sorunlar yaşanabiliyor.
- Docker, bu tür kurulum sorunlarını çözmek için yardımcı oluyor ve özellikle backend development ve DevOps konularında daha fazla avantaj sağlıyor.
- 02:46Bilgisayarların Temel Yapısı
- İlk programcı olarak bilinen Ada Lovelace ve ilk bilgisayar olan Analytical Engine, günümüz bilgisayarlardan farklı görünüyordu.
- Bilgisayarlar aslında hesap makinesinin gelişmiş versiyonu olarak, veriyi işleyip çıktı veren basit yapıya sahip cihazlardır.
- Bilgisayarların yaptığı tek şey matematiksel işlemlerdir ve ekranda görünen her şey (oyun, video, resim) aslında matematiksel değerlerle ifade edilmiştir.
- 05:56Bilgisayarların Gelişimi
- Eski bilgisayarlarda işlemcilerde milyarlarca transistör yerleştirmek mümkün değildi ve veri saklama için kullanılan metotlar günümüz kadar etkili değildi.
- İlk bilgisayarlar delikli kartlarla programlanıyordu ve bir program çalıştırmak için kartları bilgisayara sokmak gerekiyordu.
- Günümüzde bilgisayarlar işletim sistemi aracılığıyla kaynakları (RAM, CPU, disk) programlar arasında paylaşıyor ve bu sayede işlem daha kolay hale geliyor.
- 08:16İşletim Sistemi ve Sanallaştırma
- Bir şeyi yazılımla kontrol edilebilir hale getirirseniz, o işi yapması kolaylaşır ve az insan gücü gerektirir.
- İşletim sisteminde kullanıcı en üstte bulunur ve klavye, mouse gibi cihazlarla iletişim kurabilir.
- İşletim sisteminin üzerinde sistem yazılımları (driver'lar) ve kullanıcı yazılımları (oyunlar, programlar) çalışır.
- 09:06İşletim Sisteminin Kontrol Rolü
- Kullanıcının yazdığı programın işlemciye veya RAM'e direkt erişimi yoktur, sürekli işletim sistemi aracılığıyla gider.
- İşletim sistemi, kullanıcı işlemlerinin birbirleriyle etkileşime girmesini engelleyerek birden fazla işlemi aynı anda çalıştırabilir.
- RAM kullanımı yüksek programlar bile bilgisayarı çökertmez çünkü işletim sistemi sanallaştırma mekanizması sayesinde RAM'i yönetir.
- 10:49Sanallaştırmanın Amacı
- Sanallaştırmanın amacı işlemleri kolaylaştırmak, kontrol edilebilir ve programlanabilir hale getirmektir.
- İşletim sistemleri ile RAM ve disk erişimleri sanallaştırılır.
- Programlar artık doğrudan donanım üzerinde değil, işletim sistemi üzerinde çalışır.
- 11:28Program Çalıştırma Zorlukları
- Program çalıştırırken hangi işletim sisteminde çalışacak, hangi dille kodlanmış, bu dilin çalışması için gerekli paketlerin yüklü olup olmadığı gibi sorunlar yaşanır.
- C ile yazılan bir program Linux'ta çalışabilirken, Java ile yazılan bir program çalışması için Java Virtual Machine yüklü olması gerekir.
- 12:18Sanal Makineler
- Sanal makinalar kavramı sanallaştırmadan sonra ortaya çıkmıştır.
- Sanal makinalar, hypervisor adı verilen bir program sayesinde gerçek işletim sisteminin üzerine sanal işletim sistemleri çalıştırılmasını sağlar.
- Sanal işletim sistemleri, farklı programların farklı işletim sistemleri ve paketler gerektirdiği durumlarda tek bir makinede çalıştırılmasını sağlar ve sorun giderme süreçlerini kolaylaştırır.
- 14:06Sanal İşletim Sistemleri ve Docker'ın Alternatif Çözümü
- Sanal işletim sistemleri, bir makinenin üzerinde birden fazla işletim sistemi çalıştırmayı sağlar ancak bu işlem bilgisayarda yavaşlık oluşturabilir.
- Docker'ın alternatif çözümü, işletim sistemi yerine parça parça bir işlemin kullanacağı kaynakları (CPU, RAM, hard disk) sanallaştırmaktır.
- Linux'ta her şeyin dosya olması felsefesi nedeniyle, dosya sistemini sanallaştırdığınızda birçok şeyi otomatikman sanallaştırmış olursunuz.
- 16:11Docker'ın Çalışma Prensibi
- Docker, işletim sisteminin işlemler için kaynaklara ulaşması gibi bir aracı görevi görür ve konteynerların ağ ve disk işlemleri için konfigüre edilmiş ayarlar sunar.
- Docker, Linux'in kendisinde bulunan teknolojileri kullanarak (namespaces gibi) sanallaştırma yapar.
- Docker imajları ve konteynerlerden oluşur; imaj, programın çalışması için gerekli olan her şeyin paketlenmiş hali, konteyner ise bu imajdan oluşturulmuş bir örnektir.
- 18:51Docker Konteynerlerinin Özellikleri
- Bir imajdan birden fazla konteyner oluşturulabilir ve aynı anda çalıştırılabilir.
- Docker'ın dosya sistemini sanallaştırdığından, konteynerlerin içindeki değişiklikler orijinal imajı etkilemeyecek şekilde geçici olarak kaydedilir.
- Konteynerlerin ağları da sanallaştırılarak, farklı konteynerler farklı ağlarda çalıştırılabilmekte ve güvenlik açısından izole edilebilmektedir.
- 22:19Docker'ın Avantajları
- Docker, programın çalışması için gereksinim olan bütün kaynakları imaj içinde tutarak bağımlılıkları paketler.
- Konteynerlere CPU ve RAM kullanımı için sınırlama getirilebilir.
- Konteynerlerin bağlı olduğu disk yerleri belirlenebilir.
- 23:02Yazılım Geliştirme Süreci
- Yazılım geliştirme süreci sürekli bir işlem olarak dairesel şemalarla gösterilir çünkü bir program yazıp yayınladıktan sonra sürekli sorunlar çıkabilir veya yeni özellikler eklenebilir.
- Yazılım geliştirme sürecinde önce müşteri isteklerine veya eldeki sorunlara göre planlama yapılır, sonra sorun matematiksel ve programlanabilir bir hale getirilir.
- Yazılım geliştirme sürecinde takım iletişiminde farklı yazılımlar kullanılabilir, kod yazarken kaynak kontrolü (örneğin Git) çok önemlidir.
- 24:15Docker ve Konteyner Teknolojisi
- Kod yazıldıktan sonra build aşamasında Docker kullanılarak kodlar çalıştırılabilir hale getirilir ve Docker imajı oluşturulur.
- Docker imajları test edildikten sonra container runtime'ları kullanılarak sunucularda çalıştırılabilir, bu sayede bir uygulama birden fazla sunucuda çalıştırılabilir.
- Docker'ın operasyon sırasında kaynak kullanımını izleme ve hata loglarını inceleme gibi özellikleride vardır.
- 25:27Docker'ın Çalışma Mantığı
- Docker imajlarında immutable (değiştirilemez) yapı vardır, yani konteyner içinde yapılan değişiklikler işletim sistemini veya imajı doğrudan etkilemez.
- Docker'da copy on write mantığı vardır; diske yazılan veriler direkt olarak değiştirilmez, bir kopya oluşturulup oraya yazma işlemi yapılır.
- Docker imajları, base imajdan (örneğin Alpine Linux, Ubuntu gibi Linux distrosu) başlayarak ekleme yaparak oluşturulur, önceki imajı değiştirmeden üzerine eklenir.
- 27:06Konteyner ve İmaj İlişkisi
- Docker'da imaj, arabanın planı (blueprint) gibi düşünülebilirken, konteyner ise araba objesi gibidir.
- Aynı imajdan oluşturulan konteynerler çalıştırıldığında birbirlerinden farklılıklar kazanabilir, örneğin aynı veritabanı imajından oluşturulan iki konteynerden birine veri eklendiğinde o konteyner orijinalinden farklılaşır.
- 27:51Sanallaştırma ve Google Örneği
- Sanallaştırma, bir şeyi yazılımla kontrol edilebilir hale getirmektir ve bu sayede iş yönetimi kolaylaşır ve insan gücü azalır.
- Google gibi büyük şirketler, Docker, konteyner teknolojileri ve Kubernetes gibi teknolojileri kullanarak milyonlarca konteyner çalıştırmaktadır.
- Bu konteynerler yüksek uptime oranıyla (yaklaşık %99,9) çalışır ve çok az insan müdahalesi gerektirir.
- 29:50Docker Komutları ve Örnek Kullanım
- Linux'ta "man" komutu ile Docker hakkında bilgi alınabilir, "docker help" komutu ile kullanılabilir komutlar ve açıklamalar görüntülenebilir.
- "docker images" komutu ile bilgisayarda yüklü olan Docker imajları görüntülenebilir.
- "docker run" komutu ile Docker konteynerleri çalıştırılabilir, "docker ps" komutu ile çalışan konteynerler görüntülenebilir, "docker ps -a" komutu ile çalışıp bitmiş konteynerler de görüntülenebilir.
- 33:39Docker Konteynerlerini Silme ve Yönetme
- Docker'da silinen konteynerler sisteminde yer kaplamaz ve logları da silinir.
- Konteynerleri silmek için ismi veya ID'si kullanılabilir, Docker arayüzü kısa ID'lerle bile konteynerları silebilir.
- Toplu konteyner silme için "docker rm $(docker ps -aq)" komutu kullanılabilir.
- 37:16Konteyner Silme Seçenekleri
- Konteynerlerin çalışması bittikten sonra otomatik silinmesi için "docker run --rm" komutu kullanılabilir.
- Konteyner logları, veritabanı hataları gibi durumlarda kontrol edilebilir.
- Çalışan konteynerlerin ID'lerini "docker ps -q" ile, bitmiş konteynerlerin ID'lerini "docker ps -aq" ile görebilirsiniz.
- 38:05Docker Hub ve İmaj Yönetimi
- Docker Hub, Docker imajlarının biriktiği bir web sitesidir ve "docker pull" komutu ile imajlar indirilebilir.
- Docker imajlarını tararşivine çıkarmak için "docker save" komutu kullanılabilir.
- İmajları yüklemek için "docker load" komutu ve tar dosyası kullanılabilir.
- 41:41Docker İmajlarının Türleri ve Kullanımı
- Docker imajları farklı türlerde olabilir: araçlar (tool) veya sürekli çalışan hizmetler (örneğin veritabanları).
- Araç türündeki imajlar belirli bir işlemi gerçekleştirdikten sonra sonlanırken, veritabanı gibi hizmetler sürekli çalışır.
- Docker, farklı Node.js versiyonlarını test etmek için kullanılabilecek bir araçtır.
- 44:30Docker'da Node.js ve Diğer Komutlar
- Docker konteynerlerinde Node.js komutları çalıştırılabilir, örneğin "hello world" yazdırma veya dizilerdeki string'leri integer'e çevirme işlemleri yapılabilir.
- Node.js modülleri (örneğin fs) import edilerek dosya işlemleri gerçekleştirilebilir.
- Docker konteynerlerinde farklı programlama dilleri (Node.js, Haskell, Python) için imajlar kullanılabilir ve bu imajlar içindeki programlama ortamları çalıştırılabilir.
- 46:06Docker Konteynerlerine Dosya Ekleme
- Docker'da "docker cp" komutu ile konteyner ile lokal dosya sistemi arasında dosya kopyalama yapılabilir.
- Docker run komutu ile bir klasörün konteynerin içine bağlanabilir, örneğin "-v /path/to/local/folder:/path/in/container" şeklinde.
- Bağlı klasörlerde yapılan değişiklikler hem konteyner içinde hem de lokal dosya sisteminde yansıması olur.
- 49:38Docker İmajları ve Konteynerler
- Çalıştırılan konteynerlar durdurulduğunda bile diskte kalır, bunları silmek için "docker rm" komutu kullanılabilir.
- Farklı imajlar (Node.js, Haskell, Python) için farklı konteynerlar oluşturulabilir ve her imaj sadece kendi programlama ortamını içerir.
- Docker imajları, ortak katmanları paylaşarak disk alanı tasarruf eder, örneğin Ubuntu'dan türetilen imajlar sadece ekstra dosyalarını diskte tutar.
- 50:55Dockerfile ile Özel İmaj Oluşturma
- Dockerfile ile özel imajlar oluşturulabilir, örneğin "FROM python:361-alpine" ile Python imajı temel alınabilir.
- Dockerfile içinde "ADD" komutu ile kendi Python script'i eklenir ve "ENTRYPOINT" ile çalıştırılacak komut belirlenir.
- Özel imaj oluşturulduktan sonra, bu imaj çalıştırıldığında belirtilen Python script'i otomatik olarak çalışır.
- 56:21Docker ile Python Uygulaması Çalıştırma
- Python kodu grup by fonksiyonuyla üçlü üçlü gruplandırarak çalıştırılıyor.
- Docker build komutu Dockerfile'ı alarak belirtilen isimle bir imaj oluşturuyor.
- Docker build işlemi sırasında her adımda yeni bir imaj oluşturulup üstüne ekleme yapılıyor.
- 58:19Docker İmajı Özellikleri
- Oluşturulan "yengaz gruplayıcı" imajının boyutu 88.70 MB olarak görünüyor.
- Docker, konteynerlerin diskte fazla yer kaplamaması için sanal bir yapı kullanıyor.
- Dockerfile'ı yanlış yapıldığında, uygulama güncellendiğinde disk boyutunu fazladan kullanma sorunu yaşanabilir.
- 59:33Docker İmajını Çalıştırma
- Docker imajını çalıştırırken argümanlar verilebilir ve bu argümanlar entry point olarak belirlenen script'e iletilebilir.
- Bu örnekte başlayıp biten bir uygulama olarak Docker imajı oluşturulmuş.
- Çalıştırdığı konteynerlerin silinmesi için temizleme işlemi yapılabilir.
- 1:00:41Redis Veritabanı ile Çalışma
- Redis veritabanı Docker imajı başlatılarak 6379 portunu dinlemeye başlıyor.
- Docker, konteynerların kendi ağlarında başlatmasını varsayılan olarak sağlıyor, ancak host'un network'ünde başlatılabilir.
- İki Docker konteyneri arasında iletişim kurulabilir ve Redis komutları çalıştırılarak veri eklenebilir.
- 1:05:03Docker ile Redis Konteynerları Kurulumu
- Docker aracılığıyla Redis kurulumu yapılarak, bilgisayarda Redis kurulu bile olmadan işlem yapılabiliyor.
- İki Redis konteyneri Docker sanal ağında birbirine bağlanarak çalıştırılabilir.
- İlk Redis konteyneri çalıştırıldığında, network parametresi verilmediği için kendi sanal ağında çalışıyor.
- 1:05:58Konteynerler Arası Bağlantı
- İkinci Redis konteyneri çalıştırılırken, ilk konteyner ile bağlantı kurulacak şekilde çalıştırılıyor.
- İkinci konteyner içinde "database" ismi ile ilk konteynera bağlantı kurulabiliyor.
- İkinci konteyner içinde environment variable'lar listeleyince database ile ilgili bilgiler (port, isim, IP) görülebiliyor.
- 1:07:05Redis CLI ile Bağlantı
- Redis CLI ile "redis-cli -h database" komutuyla ikinci konteyner, ilk konteynera bağlantı kurabiliyor.
- Bağlantı kurulduktan sonra Redis komutları (hashset, hget gibi) çalıştırılabiliyor.
- İki konteyner kendi sanal ağlarında çalışıyor, bu sayede port çakışması olmadan birden fazla veritabanı çalıştırılabiliyor.
- 1:08:21Port Bağlantısı
- Konteyner içindeki Redis sunucusunun 6379 portu, bilgisayardaki 8080 portuna bağlanabilir.
- Bu şekilde bilgisayardan Redis sunucusuna bağlanılabilir, normalde bunu yapmak için Redis konfigürasyonunu değiştirmek veya IP tables kullanmak gerekecekti.
- Docker sanal ağ sayesinde birden fazla veritabanı farklı portlardan çalıştırılabilir ve bilgisayara bağlanabilir.
- 1:09:15Gelecek Dersler
- İleriki haftalarda Node.js ile birkaç uygulama yapılacağı belirtiliyor.
- MongoDB, Elasticsearch, Cassandra, Neo4j ve Redis gibi veritabanları hakkında genel bilgi verilecek.
- Docker bilgileri pekiştirilerek benzer teknolojiler kullanılarak örnekler yapılacağı belirtiliyor.