Docker
Docker provides a software platform for developing, shipping, and running applications in a consistent controlled environment known as a container. Containers are a form of virtualization at the operating system level, but they're a lot more lightweight than a traditional VM because they share the kernel with the operating system of the host.
Docker has two main components you need to know about. First, an image. A Docker image is a read-only template that basically explains everything you need to create a Docker container. This includes stuff like the code, a runtime, environment variables, and any other kind of configuration files that are needed for the image. Now next we have Docker containers. A Docker container is an encapsulation of an application and all of its dependencies. This includes all the code, all the libraries, and everything that's needed to run the application in a consistent and isolated environment. Using containers, you can basically make sure your code is going to run the same no matter where it is. And it'll actually help you avoid the “it works on my machine” problem.
Docker, uygulamaların tutarlı ve kontrol edilebilir bir ortamda (container) geliştirilmesi, dağıtılması ve çalıştırılması için bir yazılım platformu. Container'lar, işletim sistemi seviyesinde bir sanallaştırma biçimidir, ancak geleneksel sanal makinelerden çok daha hafif çünkü host işletim sistemiyle çekirdeği (kernel) paylaşırlar. Docker hakkında bilmeniz gereken iki ana bileşen vardır. Birincisi, image. Docker image, bir container oluşturmak için gereken her şeyi tanımlayan salt okunur (read-only) bir şablon. Bu şablon; kod, çalışma zamanı (runtime), ortam değişkenleri ve gerekli tüm yapılandırma dosyalarını içerir. İkinci olarak Docker container’ları var. Docker container, bir uygulamanın ve tüm bağımlılıklarının kapsüllenmiş (encapsulated) hali. Bu, uygulamayı çalıştırmak için gereken tüm kodu, kütüphaneleri ve diğer her şeyi içerir; üstelik bunların hepsi izole ve tutarlı bir ortamda çalışır. Container’lar sayesinde kodun her ortamda aynı şekilde çalışacağından “benim makinemde çalışıyor” sorununu ortadan kaldırır.
Kubernetes
Kubernetes is an open source platform designed to automate the deployment, scaling, and management of containerized applications. Firstly, it helps you manage and deploy applications across multiple hosts and it can automatically handle the scaling. On top of this, they can help you distribute and load balance your network traffic to make sure no one container is overloaded by requests. We can even handle things like killing containers that aren't responding to user defined health checks. While it is container runtime agnostic, Docker is a super common platform to use with it.
Kubernetes, container'laştırılmış uygulamaların dağıtımını, ölçeklendirilmesini ve yönetimini otomatikleştirmek için tasarlanmış açık kaynaklı bir platform. İlk olarak, birden fazla host üzerinde uygulamaları yönetmeni ve dağıtmanı sağlar; ayrıca ölçeklendirme işlemlerini otomatik olarak gerçekleştirir. Ağ trafiğini dağıtarak ve yük dengelemesi yaparak herhangi bir container’ın aşırı yüklenmesini önler. Hatta kullanıcı tarafından tanımlanan health checklere yanıt vermeyen container’ları otomatik olarak sonlandırabilir. Kubernetes, container çalışma zamanı konusunda bağımsızdır; ancak Docker, en yaygın kullanılan platformlardan biridir.
Docker, bir container teknolojisi. Uygulamaları izole bir şekilde paketleyip çalıştırmamızı sağlar. Kubernetes, birçok container’ı yöneten bir orkestrasyon aracı. Yani, Docker ile oluşturulmuş container’ları yönetmek için Kubernetes kullanılır.
Docker = “bir uygulamayı kutulamak” Kubernetes = “birden fazla kutuyu kontrol etmek, dağıtmak, gerektiğinde ek kutular açmak/kapatmak”