• Yapay zekadan makale özeti

    • Bu video, Hürriyet'te teknik takım liderliği yapan bir uzman tarafından sunulan kapsamlı bir Docker eğitim içeriğidir. Ayrıca Luisy Capling adında bir konuşmacı da videoda yer almaktadır.
    • Video, Docker'ın temel kavramlarından başlayarak Docker CLI komutları, Dockerfile kullanımı, Docker Compose ve NGINX proxy yapılandırması gibi konuları detaylı şekilde ele almaktadır. Eğitim, teorik bilgilerin yanı sıra pratik örneklerle desteklenmekte olup, özellikle .NET Core uygulamaları için Docker yapılandırması, CI/CD süreçleri ve Hürriyet.com.tr örneği üzerinden kapsamlı bir anlatım sunmaktadır.
    • Videoda Dockerfile'in temel komutları (FROM, ENV, RUN, CMD, LABEL, EXPOSE, ADD, COPY, WORKDIR, ENTRYPOINT), Docker imajlarının nasıl oluşturulacağı, konteynerlerin yönetimi, port yönlendirmesi, volume mapping ve link gibi özellikler adım adım gösterilmektedir. Ayrıca, uygulama yaşam döngüsü, CI/CD süreçlerinde Docker'ın kullanımı, TeamCity ve Octopus Deploy gibi araçların Docker ile nasıl entegre edilebileceği ve Docker imajlarının boyutunu optimize etme yöntemleri de içermektedir.
    00:07Giriş ve Sunum Planı
    • Konuşmacı Hürriyet'te 2015 yılından beri teknik takım liderliği yapıyor ve hürriyet.com.tr web sitesinin bakımını yapmakla görevli.
    • Sunumda Docker teknolojisi, Docker CLI komutları, Dockerfile kullanımı, Docker Compose ve Docker'ın avantajları hakkında bilgi verilecek.
    • Konuşmacı, Hürriyet'in Docker'ı production ortamında kullanan ender firmalardan biri olduğunu ve web sitelerinin Docker ile .NET Core teknolojisi üzerine kurulmuş uygulamalarla çalıştığını belirtiyor.
    02:34Docker Nedir?
    • Docker, açık kaynak kodlu bir sanallaştırma platformudur ve community'nin bir parçası olarak kullanılır.
    • Sanallaştırma, production ortamı, komüniteye veya topluluğa dağıtabileceğimiz bir ortamın kopyasını oluşturmak demektir.
    • Docker, uygulama yaşam döngüsünü standartlaştırır ve CI/CD süreçlerinde çok işe yarar.
    05:17Docker CLI Komutları
    • "docker version" komutu, makinede kurulu olan Docker versiyonunu gösterir.
    • "docker pull" komutu, uzaktaki repository'den imajları lokal makineye çeker.
    • "docker run" komutu, çekilen imajdan bir konteyner oluşturup çalıştırır; eğer lokalde yoksa önce çeker sonra çalıştırır.
    07:03Diğer Docker Komutları
    • "docker start" komutu, durdurulan bir konteynerı tekrar başlatır.
    • "docker commit" komutu, çalışan bir konteynerı kenara kaldırıp yeni ayarlarla kopyasını oluşturmayı sağlar.
    • "docker ps" komutu, mevcut konteynerleri listeler; -a parametresi ile duranları da gösterir, -q parametresi ile sadece ID'leri gösterir.
    09:22Konteyner ve İmaj Yönetimi
    • "docker rm" komutu, belirtilen konteynerı siler; -f parametresi ile çalışan konteynerı da durdurup siler.
    • "docker images" komutu, makinede kurulu olan tüm Docker imajlarını listeler.
    • "docker logs" komutu, konteynerdeki işlemlerin loglarını takip etmeye olanak sağlar.
    • "docker inspect" komutu, konteyner hakkında detaylı bilgileri (IP adresi, açık portlar, imaj bilgileri) görüntüler.
    12:19Dockerfile ve Temel Komutlar
    • Kendi uygulamanızı Docker imajına dönüştürmek ve bu imajdan konteyner oluşturmak için Dockerfile kullanılır.
    • Dockerfile mutlaka "FROM" komutu ile başlamalıdır ve bu komut, base imajı belirler.
    • Dockerfile içinde yorum satırları eklemek için "#" işareti kullanılabilir.
    13:27Dockerfile'da Değişken Tanımlama ve Komutlar
    • "ENV" komutu ile Docker imajı oluşturulurken environment değişkenleri tanımlanabilir.
    • "RUN" komutu ile Docker imajı build edilirken veya konteyner çalıştırılırken birtakım komutlar çalıştırılabilir.
    • "CMD" komutu ile konteynerin çalıştırılacağı komut belirlenir, ancak bir Dockerfile'da sadece bir CMD komutu kullanılabilir.
    15:43Docker Build Performansı ve Etiketler
    • Docker build sırasında cache mekanizması kullanılır ve birden fazla paket indirmek için tek bir RUN komutu kullanılması önerilir.
    • "LABEL" komutu ile Docker imajına özel bilgiler (kullanıcı bilgileri, versiyon vb.) eklenebilir.
    • "MAINTAINER" anahtarı artık kullanılmıyor, bunun yerine LABEL kullanılır.
    17:55Dockerfile'da Expose Komutu
    • Expose komutu, konteyner içinde çalışan uygulamayı dışarıdan erişilebilir hale getirmek için kullanılır.
    • Eğer Expose komutu kullanılmazsa, uygulama konteyner içinde çalışır ancak dışarıdan erişilemez.
    • Expose komutu TCP protokolünü varsayılan olarak kullanır ve protokol belirtmek için slash işareti kullanılabilir.
    18:51Dockerfile'da Dosya İşlemleri
    • ADD komutu, dışarıdaki bir dosyayı veya konfigürasyon dosyasını Docker imajına dahil etmek için kullanılır.
    • ADD komutu regex kullanabilir ve yıldız (*) ile belirli dosya türlerini dahil edebilir.
    • WORKDIR komutu, Dockerfile içindeki işlemlerin çalıştırıldığı çalışma klasörünü değiştirmek için kullanılır.
    20:10COPY ve ADD Komutları Arasındaki Farklar
    • COPY ve ADD komutları hem var olan dosyaları imaja dahil etmek için kullanılır, ancak ADD protokol desteklerken COPY desteklemez.
    • ADD komutu sıkıştırılmış dosyaları (gz) otomatik olarak açar ve içeri aktarır.
    • Docker, lokal dosyalar üzerinde çalışırken COPY komutunun kullanılmasını önerir.
    21:33CMD ve ENTRYPOINT Arasındaki Farklar
    • CMD ve ENTRYPOINT komutları arasındaki temel fark, Linux'ta çalıştırılan proses türüdür.
    • ENTRYPOINT ile çalıştırılan komut bir init prosesi alırken, CMD ile çalıştırılan komut bir id prosesi alır.
    • Docker, çalıştırılabilir ve hayatta kalacak bir konteyner için ENTRYPOINT'ı, sadece komut çalıştıracaksa CMD'yi önerir.
    24:37Dockerfile'dan İmaj Oluşturma
    • Dockerfile'dan imaj oluşturmak için BUILD komutu kullanılır.
    • İmajlara isim ve versiyon numarası verilebilir (örneğin: hürriyet/arama:2.0).
    • Oluşturulan konteyner imajları Docker Hub veya özel bir repository'de saklanabilir.
    26:36Dockerfile Örneği
    • Dockerfile ile bir .NET Core uygulamasını konteynerize dönüştürme işlemi gösterilir.
    • Dockerfile, uygulama klasörüyle aynı seviyede değil, genellikle uygulamanın dışında oluşturulmalıdır.
    • Aynı klasörde Dockerfile oluşturulduğunda, konteyner içinde başka bir konteyner oluşturulabilir.
    28:03Dockerfile Yapısı ve SDK Kullanımı
    • Dockerfile içindeki komutlar mutlaka "FROM" komutu ile başlamak zorundadır.
    • .NET Core uygulaması için Microsoft'un .NET SDK'sı kullanılabilir, ancak production ortamında SDK yerine runtime kullanılmalıdır.
    • SDK, restore, build, publish gibi komutları çalıştırmak için gerekli olurken, runtime sadece paketlenmiş uygulamayı çalıştırma imkanı sağlar.
    29:40Dockerfile Optimizasyonu
    • Microsoft'un Docker örneklerinde, önce SDK kullanılarak build environment oluşturulur, restore ve build işlemleri yapılır.
    • Sonrasında runtime image oluşturulur ve SDK tamamen kaldırılarak imaj boyutu küçültülür.
    • CI/CD araçları olmadan Docker kullanmak için iki "FROM" komutu kullanmak gerekir, ancak bu olayı karmaşık hale getirir.
    30:43Dockerfile Komutları ve Yapılandırma
    • "COPY" komutu ile lokaldeki "app" klasörünün içeriği, Docker imajındaki virtual "app" klasörüne kopyalanır.
    • "RUN" komutu ile Docker imajında komutlar çalıştırılabilir, örneğin klasör oluşturma ve dosya yazma işlemleri yapılabilir.
    • "dotnet restore" komutu, uygulamanın bağımlılıklarını (NuGet paketlerini) remote'dan çekip kullanmaya hazır hale getirir.
    33:51Dockerfile ile .NET Core Uygulaması Yapılandırma
    • .NET Core uygulamaları varsayılan olarak 5000 portunda çalışır, ancak config üzerinden veya environment variable üzerinden değiştirilebilir.
    • ASP.NET Core uygulaması için port numarası ve dışarıya açılması gereken port numarası belirtilir.
    • Dockerfile'da entry point olarak .NET uygulamasının çalıştırılması için "dotnet run" komutu kullanılır.
    35:15Publish Kullanımı ve Avantajları
    • Publish kullanıldığında uygulama build edilir ve "app.dll" adlı bir klasör oluşturulur, bu durum development ortamı için kullanışlıdır.
    • Team City gibi CI/CD araçlarında publish komutu kullanılarak uygulama build edilir ve Dockerfile ile birlikte çalıştırılır.
    • Publish sırasında platform belirtmemek hata verebilir, bu nedenle publish komutuna platform bilgisi (örneğin linux-x64) eklenmelidir.
    37:55CI/CD Süreci ve Dockerfile Optimizasyonu
    • Team City paket depodan çekip, projenin rootuna gelerek dotnet restore ve dotnet build komutlarını çalıştırır.
    • Publish komutu restore ve build işlemlerini içerdiği için ayrıca restore komutuna gerek kalmamaktadır.
    • Dockerfile'da build environment kullanılarak gerekli dosyalar kopyalanır, publish işlemi yapılır ve son olarak runtime environment kullanılarak imaj oluşturulur.
    41:08Docker Build ve Çalıştırma
    • Docker build komutu ile Dockerfile'da tanımlanan adımlar sırayla çalıştırılır ve imaj oluşturulur.
    • Docker cache mekanizması sayesinde değişiklik olmayan komutlar tekrar çalıştırılmaz, bu da build süresini kısaltır.
    • Oluşturulan imajın boyutu, SDK kullanılırsa 1.64 GB olabilirken, runtime kullanılırsa 209 MB'a kadar düşebilir.
    44:00Docker Run ve Konteyner Yönetimi
    • Docker run komutu ile konteyner çalıştırılır ve isim verilebilir.
    • Port mapping yaparak konteyner içindeki port ile dışarıdan erişilecek port arasında bağlantı kurulabilir.
    • Volume mapping ile bilgisayardaki bir klasör ile konteyner içindeki klasör arasında eşleme yapılabilir, link komutu ile ise birden fazla konteyner birbiriyle haberleşebilir.
    45:52Docker ile ASP.NET Core Uygulaması Çalıştırma
    • ASP.NET Core uygulamasını Docker ile çalıştırırken önce "pull" komutunu çalıştırmak zorunda değiliz.
    • Uygulama çalışır hale geldiğinde, "bindokuzyüzbeş" portunda dinlemeye başlıyor ve web tarayıcısından erişilebiliyor.
    • Ctrl+C ile uygulamadan çıkıldığında konteyner arka planda sessizce çalışmaya devam ediyor.
    47:31Çalışan Konteyner İçine Erişim
    • "docker exec" komutu ile çalışan konteynerin içerisine giriş yapılabiliyor.
    • Konteyner içinde dosya listeleme (ls), dosya düzenleme gibi işlemler gerçekleştirilebiliyor.
    • Konteyneri ayakta tutan bir numaralı proses, genellikle "dotnet run" komutudur.
    49:18Konteyner Yönetimi
    • Çalışan bir konteynerı durdurmak için "docker stop" komutu kullanılmalı, direkt silmek için "docker rm" komutu kullanılabilir.
    • Çalışmayan konteynerleri görmek için "docker ps -a" komutu kullanılabilir.
    • Docker imajlarını silmek için "docker rmi" komutu kullanılabilir.
    50:32Docker Avantajları
    • Uygulama geliştirmeleri yeni imajlar olarak versiyonlanarak kullanıcılara sunulabilir.
    • Docker imajları private veya public repolara "push" edilebilir ve diğer geliştiriciler tarafından kolayca test edilebilir.
    • Docker ile geliştirme, çözüm dosyalarını göndermek yerine daha hızlı ve kolay bir dağıtım sağlar.
    51:34Docker Image Boyutu ve Versiyonlama
    • SDK tabanlı Docker imajları daha büyük olabilirken (1.64 GB), runtime tabanlı imajlar daha küçüktür (200 MB).
    • Docker, aynı imajı birden fazla kez indirmek yerine cash mekanizması ile daha verimli çalışır.
    • "latest" tag'ı yerine belirli versiyonlarla (örneğin 1.0.0) imajlar etiketlenmesi önerilir çünkü_latest genellikle hatalı sürümleri de içerir.
    53:07Docker Compose Kullanımı
    • Docker Compose, birbirine bağımlı birden fazla konteynerı aynı ortamda çalıştırmak için kullanılır.
    • Örneğin, Hürriyet.com.tr arama uygulamasında Türkçe karakter içeren cookie sorunu için Nginx ile birlikte çalışan bir yapı oluşturulmuştur.
    • Docker Compose, bağımlı konteynerlerin birlikte çalışmasını ve daha iyi iletişim kurmasını sağlar.
    56:39Docker Compose Temel Özellikleri
    • Docker Compose dört temel özelliği vardır: YAML konfigürasyon dosyası, temiz syntax ve indentlerle çalışması, aynı anda tüm logları ekrana düşürebilme imkanı, konteyner bağımlılıklarını tek dosya üzerine yönetme.
    • Docker Compose kullanırken standart Docker komutlarını kullanmak yeterlidir, ekstra öğrenme gerektirmez.
    57:35Nginx Konfigürasyon Dosyası Oluşturma
    • Nginx için bir konfigürasyon dosyası oluşturulur ve içinde server tanımlaması yapılır.
    • Konfigürasyonda header ekleme, port dinleme ve proxy yönlendirme kuralları belirlenir.
    • Proxy yönlendirmesi için "app" adı kullanılır ve bu, Nginx'in istekleri hangi porta yönlendireceğini belirler.
    59:30Dockerfile Oluşturma
    • Nginx konteyneri için Dockerfile oluşturulur ve en son sürümü kullanması belirlenir.
    • Konfigürasyon dosyası Dockerfile ile birlikte klasöre kopyalanır.
    • Dockerfile ile dış dosyaları imajın içerisine dahil etme imkanı vardır.
    1:00:55Docker Compose Dosyası Oluşturma
    • Docker Compose dosyasında (YAML) servisler tanımlanır ve her servis için build context, port eşlemeleri ve bağımlılıklar belirlenir.
    • "web" servisi için 5000 portu, "proxy" servisi için 881 portu kullanılır.
    • "proxy" servisinin "web" servisine bağımlı olması için "depends_on" ve "links" özellikleri kullanılır.
    1:05:05Docker Compose ile Konteyner Yönetimi
    • Docker Compose ile önce "docker-compose build" komutu ile imajlar oluşturulur, sonra "docker-compose up" ile konteynerler ayağa kaldırılır.
    • Konteynerler birbirine bağlı olarak çalıştırılır ve durdurulur: başlangıçta bağımlılıklı servisler önce çalıştırılır, durdurulurken ise bağımlılıklı servisler önce durdurulur.
    • "restart" politikası ile servislerin başarısız durumda otomatik olarak tekrar başlatılması sağlanabilir.
    1:09:39Docker ve Port Forwarding
    • Hürriyet.com.tr araması, arka tarafta 80 portundan gelen istekleri 905 portuna yönlendiriyor.
    • Kullanıcılar Docker'ın çalıştığı sunuculara doğrudan erişim olmadığı için, portların açık olması büyük bir risk oluşturmuyor.
    • Port 905 üzerinden yapılan bağlantılar, Docker'ın 905 portuna yönlendirilerek port forwarding işlemi gerçekleştiriliyor.
    1:10:47Docker İçerisinde Docker Çalıştırma
    • Bir Docker konteyner içinde başka bir Docker konteyner çalıştırılabilir, ancak bu pratik önerilen bir yöntem değildir.
    • İç içe Docker konteyner kullanımı, konteynerlerin bağımsız hareket edememesi ve yönetim zorluğu gibi dezavantajlar getirir.
    • Bağımlılıkları düşük tutmak için tek bir imaj yerine farklı konteynerler kullanılması önerilir.
    1:12:43Uygulama Yenileme Süreci
    • Uygulama geliştirme sürecinde, onaylanan değişiklikler canlıya çıkarmak için önce bir sunucudan konteyner durdurulur.
    • Eski imaj silinip yeni imaj yüklenerek yeni bir konteyner çalıştırılır.
    • Yeni versiyon test edildikten sonra site scaler aracılığıyla yayına çıkarılır.

    Yanıtı değerlendir

  • Yazeka sinir ağı makaleleri veya videoları özetliyor