Ana içeriğe geç

Docker Hello World: Başlayın ve Her Şeyin Çalıştığını Doğrulayın

docker run hello-world komutunu çalıştırmak, Docker kurulumunuzun doğru çalıştığını en hızlı şekilde doğrulamanın, bir konteyner çalıştırdığınızda neler olduğunu anlamanın ve gerçek uygulamalar oluşturmadan önce yaygın kurulum sorunlarını gidermenin en hızlı yoludur.
· 7 dk. oku

Yapay Zeka ile Keşfedin

Yükleyiciyi çalıştırdınız, kurulumu tıkladınız ve Docker hazır olduğunu söylüyor. Peki, gerçekten nasıl emin olabilirsiniz? İnternetteki her Docker rehberi, ortamınızı zaten doğruladığınızı varsayıyor; ancak bu doğrulama adımını nasıl yapacağınızı kimse söylemiyor.

İyi haber şu ki Docker, her şeyin çalıştığını onaylayan hello-world adlı yerleşik bir test imajı sağlar. Docker doğru yapılandırıldıysa anında geri bildirim almak için yalnızca tek bir komut çalıştırmanız yeterlidir.

Bu yazıda, hello-world imajının ne yaptığını, nasıl çalıştırılacağını, çıktının ne anlama geldiğini ve bir şeyler ters gittiğinde yaygın sorunları nasıl düzelteceğinizi göstereceğim.

Hello World örneğini çalıştırdıktan sonra Docker’ın temellerini öğrenmeye hazırsınız. Introduction to Docker kursumuz sizi bir öğleden sonra içinde çalışır hâle getirecek.

Docker Hello World Nedir?

hello-world imajı, kurulumunuzu test etmek için Docker’ın resmi tanılama aracıdır.

Docker bu imajı, Docker’ın çalıştığını kanıtlayabilen en küçük kapsayıcı olarak sürdürür. Onay mesajı yazdırıp çıkan küçücük bir çalıştırılabilir dosyadır. Hepsi bu.

Docker, yeni kullanıcıların üç şeyi hızlıca doğrulayabilmesi için hello-world sağlar:

  • Docker sisteminize doğru şekilde kurulmuş
  • Docker komutlarını çalıştırmak için doğru izinlere sahipsiniz
  • Docker daemon’ına erişilebiliyor ve istekleri yanıtlıyor

python --version komutunu Python kurulumundan sonra çalıştırmaya benzetebilirsiniz. Henüz bir şey inşa etmiyorsunuz; yalnızca aracın kullanıma hazır olduğunu teyit ediyorsunuz.

Docker Hello World Nasıl Çalıştırılır

hello-world imajını çalıştırmak tek bir komut gerektirir.

docker run hello-world

Bu komutu çalıştırdığınızda Docker iki şey yapar:

  • İmajın yerelde var olup olmadığını kontrol eder. Docker, hello-world imajını daha önce indirip indirmediğinizi görmek için yerel imaj önbelleğinize bakar. İmaj oradaysa Docker indirmeyi atlar ve doğrudan çalıştırmaya geçer.

  • İmaj yerelde bulunamazsa Docker onu Docker Hub’dan çeker. Docker Hub, Docker’ın resmi imajları sakladığı varsayılan registiridir. hello-world imajı küçücüktür - sadece birkaç kilobayt, bu yüzden indirme hızla tamamlanır.

Docker imaja sahip olduktan sonra bu imajdan bir konteyner oluşturur ve çalıştırır. Konteyner yerleşik programını yürütür, onay mesajını yazdırır ve çıkar.

Docker Hello World’ü Çalıştırdığınızda Ne Olur?

docker run hello-world komutunu çalıştırdığınızda adım adım süreç şöyledir.

Önce Docker, imajın yerelde olup olmadığını kontrol eder. hello-world imajını daha önce indirip indirmediğinizi görmek için yerel imaj önbelleğinizde arama yapar. İmaj oradaysa Docker bir sonraki adıma geçer. Değilse Docker, Docker Hub’a bağlanır ve imajı çeker.

Sonra Docker, imajdan bir konteyner oluşturur. İmaj bir şablon gibidir - programı ve onu çalıştırmak için gereken her şeyi içerir. Konteyner ise bu şablonun çalışan örneğidir.

Konteyner programını çalıştırır ve terminalinize bir onay mesajı yazdırır. Bu mesaj Docker’ın az önce ne yaptığını açıklar ve her şeyin çalıştığını doğrular.

Son olarak konteyner çıkar. hello-world programı sürekli çalışacak şekilde tasarlanmamıştır. Bunun yerine mesajı yazdırır ve hemen durur. Konteyner sisteminizde hâlâ mevcuttur, ancak durdurulmuş durumdadır.

Bu sürecin tamamı komutu çalıştırdığınızda otomatik olarak gerçekleşir; bu adımların hiçbirini elle yönetmeniz gerekmez.

Docker Hello World Çıktısını Anlamak

hello-world başarıyla çalıştığında, az önce ne olduğunu parçalara ayıran çok satırlı bir mesaj görürsünüz.

Docker run hello-world çıktısı

Çıktı, Docker’ın imajı yerelde bulamadığını, bu yüzden Docker Hub’dan çektiğini teyit eden bir ifadeyle başlar. "Unable to find image 'hello-world:latest' locally" gibi bir şey ve ardından indirme ilerleme çubukları görürsünüz.

Ardından Docker’ın düzgün çalıştığını doğrulayan ana mesaj gelir. Bu mesaj, Docker’ın attığı adımları tek tek anlatır. Docker daemon’unun imajı çektiğini, ondan bir konteyner oluşturduğunu, içindeki çalıştırılabilir dosyayı çalıştırdığını ve çıktıyı terminalinize akıttığını açıklar.

Mesaj ayrıca deneyebileceğiniz sonraki adımları içerir. Ubuntu gibi, çalışmaya devam eden ve içinde komutlar yürütmenize izin veren daha etkileşimli bir konteyner çalıştırmanızı önerir. Bu, tek seferlik bir test konteyneri ile geliştirmede kullanacağınız gerçek konteynerler arasındaki farkı anlamanıza yardımcı olur.

Son olarak konteynerin çıktığını görürsünüz. hello-world programı mesajını yazdırıp hemen duracak şekilde tasarlanmıştır - uzun süre çalışan bir servis veya uygulama değildir. Konteyner, Docker’ın çalıştığını doğruladığında görevini tamamlamış olur.

Bu tam çıktıyı hatasız görürseniz Docker kurulumunuz doğru çalışıyor demektir ve gerçek konteynerler çalıştırmaya hazırsınız.

Docker Hello World’ü Çalıştırırken Yaygın Sorunlar

hello-world gibi basit bir test bile Docker doğru kurulmamışsa başarısız olabilir. En yaygın sorunlar ve çözümleri burada.

Docker komutu bulunamadı

"docker: command not found" veya "docker is not recognized" görürseniz Docker kurulu değildir ya da sisteminizin PATH değişkeninde değildir.

Linux’ta Docker’ın kurulu olup olmadığını kontrol edin:

which docker

Image 2 - Docker location

Docker konumu

Bu komut hiçbir şey döndürmezse Docker’ı kurmanız gerekir. macOS ve Windows’ta Docker Desktop’ın kurulu ve çalışır olduğundan emin olun.

İzin reddedildi hataları

"permission denied while trying to connect to the Docker daemon socket" görebilirsiniz.

Bu, kullanıcı hesabınızın Docker’a erişim iznine sahip olmaması durumunda meydana gelir. Linux’ta Docker’ı sudo ile çalıştırmanız ya da kullanıcınızı docker grubuna eklemeniz gerekir:

sudo usermod -aG docker $USER

Değişikliğin etkili olması için oturumu kapatıp tekrar açın. Docker Desktop ile macOS ve Windows’ta bu bir sorun değildir.

Docker daemon çalışmıyor

"Cannot connect to the Docker daemon" alırsanız Docker servisi çalışmıyor demektir.

Linux’ta Docker servisini başlatın:

sudo systemctl start docker

macOS ve Windows’ta Docker Desktop’ı açın. Uygulama çalıştığında daemon otomatik olarak başlar. Hazır olduğunda sistem tepsisinde bir Docker simgesi görürsünüz.

İmaj çekilirken ağ sorunları

Bazen Docker, hello-world imajını Docker Hub’dan indiremeyebilir. İmajı çekememe veya bağlantı zaman aşımı hataları görürsünüz.

Önce internet bağlantınızı kontrol edin. Kurumsal bir güvenlik duvarının veya proxy’nin arkasındaysanız Docker’ı bunu kullanacak şekilde yapılandırmanız gerekebilir. Linux’ta bu ayar /etc/systemd/system/docker.service.d/http-proxy.conf dosyasına yapılır. Docker Desktop’ta proxy’yi Ayarlar’dan belirleyebilirsiniz.

Bu çözümler işe yaramazsa hata mesajı genellikle sizi doğru yöne yönlendirir - dikkatlice okuyun.

Docker Hello World’den Sonra Ne Yapmalı

Artık Docker’ın çalıştığını doğruladığınıza göre sıradaki adımlar şunlar.

Gerçek bir konteyneri etkileşimli bir kabukla çalıştırın. Bir Ubuntu konteynerini çekip çalıştırmayı deneyin:

docker run -it ubuntu bash

Image 3 - Ubuntu bash

Ubuntu bash

-it bayrakları konteyner içinde etkileşimli bir terminal sağlar. Komutlar çalıştırabilir, paketler kurabilir ve konteynerlerin nasıl çalıştığını keşfedebilirsiniz. Konteynerden çıkmak için exit yazın.

Mevcut imajları keşfedin. Docker Hub’da PostgreSQL ve MySQL gibi veritabanları, Python ve Node.js gibi programlama dilleri ve Redis ile Nginx gibi araçlar için resmi imajlar bulacaksınız. hub.docker.com adresinden göz atın ya da doğrudan komut satırından arayın:

docker search python

Mevcut Python imajları. 

Kendi imajınızı bir Dockerfile ile oluşturun. Basit başlayın: Uygulama kodunuzu bir konteynere kopyalayan ve nasıl çalıştırılacağını tanımlayan Dockerfile adlı bir dosya oluşturun. Birkaç satırlık temel bir Dockerfile bile imajların talimatlardan nasıl oluşturulduğunu size öğretecektir.

Sonuç

docker run hello-world komutu tek bir şeyi iyi yapar: Docker kurulumunuzun çalıştığını kanıtlar.

Bu gerçek bir uygulama değildir. Konteynerleri nasıl inşa edeceğinizi veya üretim servislerini nasıl dağıtacağınızı öğretmez. Ancak Docker kurulumunuzda bir sorun olmadığını bilmenizi sağlayarak içinizi rahatlatır.

Eğer hello-world hatasız çalıştı ve onay mesajını yazdırdıysa Docker ortamınız doğru şekilde kurulu demektir ve gerçek konteynerlerle çalışmaya hazırsınız.

Peki sırada ne var? Introduction to Docker kursumuzu alın. Ekip içinde çalışmanız için gereken temel bilgileri verecek. Ardından 10 Docker Proje Fikri makalemizi izleyerek işe yarar bir şeyler inşa edin.

Dario Radečić

Yazar

Dario Radečić

Hırvatistan merkezli Kıdemli Veri Bilimci. 700’ün üzerinde yayımlanmış makaleyle 10 M+ görüntüleme elde eden, önde gelen bir teknoloji yazarı. TPOT ile Makine Öğrenimi Otomasyonu kitabının yazarı.

FAQs

Docker imaj boyutunu nasıl optimize edebilirim?

Tam Ubuntu veya Debian imajları yerine Alpine Linux gibi daha küçük taban imajlarıyla başlayın. Çok aşamalı (multi-stage) derlemeler kullanarak derleme bağımlılıklarını çalışma zamanı bağımlılıklarından ayırın - bu, derleyicileri ve derleme araçlarını hariç tutarak son imajınızı yalın tutar. Ayrıca Dockerfile’ınızdaki RUN komutlarını birleştirerek katman sayısını azaltın ve gereksiz dosyaların imaja kopyalanmasını önlemek için .dockerignore kullanın.

Docker’ı üretimde kullanmak için en iyi uygulamalar nelerdir?

Konteynerleri asla root olarak çalıştırmayın - Dockerfile’ınızda root olmayan bir kullanıcı oluşturun ve ona geçin. Ortamlar arasında tutarlı dağıtımlar için latest yerine belirli imaj etiketleri kullanın. Tek bir konteynerin tüm ana makine kaynaklarını tüketmesini önlemek için konteynerleriniz için kaynak sınırları (CPU ve bellek) belirleyin. Sağlık kontrolleri de önemlidir - Dockerfile’ınızda tanımlayın ki orkestrasyon araçları sağlıksız konteynerleri tespit edip yeniden başlatabilsin.

Docker’ı CI/CD boru hatlarıyla nasıl entegre ederim?

GitHub Actions, GitLab CI ve Jenkins gibi çoğu CI/CD platformu yerleşik Docker desteğine sahiptir. Genellikle imajınızı boru hattının bir parçası olarak oluşturur, commit SHA’sı veya sürüm numarasıyla etiketler, Docker Hub veya AWS ECR gibi bir konteyner kayıt defterine itersiniz ve ardından ortamınıza dağıtırsınız. Önemli olan, her kod değişikliğinin test edilmiş, sürümlenmiş bir konteyner imajı üretmesini sağlamak için build-tag-push-deploy iş akışını otomatikleştirmektir.

Docker’da çok aşamalı derlemeler kullanmanın avantajları nelerdir?

Çok aşamalı derlemeler, uygulamanızı derlemek için bir araç seti, çalıştırmak için ise farklı ve daha küçük bir set kullanmanıza olanak tanır. Örneğin, bir aşamada Go derleyicisini içeren bir ortamda bir Go uygulamasını derleyebilir, ardından yalnızca derlenmiş ikiliyi son aşamada minimal bir Alpine imajına kopyalayabilirsiniz. Bu, imaj boyutunu ciddi şekilde azaltır - derlenmiş bir uygulama 1 GB derleme aracına ihtiyaç duyabilirken çalıştırmak için yalnızca 20 MB gerekebilir. Daha küçük imajlar, daha hızlı dağıtımlar ve daha düşük depolama maliyetleri demektir.

Docker konteynerlerimin güvenli çalıştığından nasıl emin olabilirim?

Dağıtmadan önce Docker Scout veya Trivy gibi araçlarla imajlarınızı güvenlik açıklarına karşı tarayın. Sırlarınızı Dockerfile’a veya ortam değişkenlerine koymayın - Docker secrets veya harici gizli yönetim araçları kullanın. Güvenlik yamalarını almak için taban imajlarınızı güncel tutun ve gereksiz Linux yeteneklerini kaldırmak için --cap-drop bayrağıyla konteyner yeteneklerini sınırlayın. Ayrıca mümkün olduğunda salt-okunur dosya sistemleri kullanın ve kesinlikle gerekli olmadıkça Docker soketini konteynerlerin içinde açığa çıkarmayın.

Konular

İlgili