Docker ile VM Arasındaki Fark Nedir?

Docker ve sanal makineler (VM'ler), uygulama dağıtımında kullanılan iki teknolojidir. Yazılım geliştirme yaşam döngüsünde dağıtım, uygulama kodunu son kullanıcılarınız için çalışacak şekilde hazırlar. Docker, geliştiricilerin yazılımı container adı verilen standart birimler halinde paketlemek için kullandıkları açık kaynak bir platformdur. Container; kitaplıklar, sistem araçları ve çalışma zamanı dahil olmak üzere hem uygulama koduna hem de ortamına sahiptir. Docker'ı kullanarak uygulamaları herhangi bir makinede dağıtabilir, ölçeklendirebilir ve kodunuzun tutarlı bir şekilde çalışmasını sağlayabilirsiniz. Buna karşın sanal makine, fiziksel bir makinenin dijital kopyasıdır. Aynı ana sunucu işletim sisteminde çalışan, kendi işletim sistemlerine sahip birden fazla sanal makineniz olabilir. Geliştiriciler sanal makineyi, uygulamanın ortamını oluşturacak şekilde yapılandırır. Docker container'larını sanal makinelerde çalıştırmak da mümkündür.

Docker hakkında bilgi edinin »

Sanallaştırma: Docker ve sanal makine karşılaştırması

Sanallaştırma, sunucular ve ağlar gibi gerçek hayattaki kaynakların sanal bir örneğini oluşturmaya olanak tanır. Bilgi işlem alanında sanallaştırma, sanallaştırılmış bir bileşenin birden fazla izole örneğinin gerçek hayattaki bileşen üzerinde çalışmasını sağlar.

Örneğin, fiziksel bir sunucuda birden fazla sanal sunucu çalışabilir. Bunlar, gerçek hayattaki kaynakları birden fazla sanal bulut sunucusu arasında paylaşarak daha iyi kullanılır ve çalıştırılmaları daha uygun maliyetlidir. Sanallaştırma, büyük ölçüde uygulama geliştirme ve dağıtımının temelidir.

Sanal makineler

Adından da anlaşılacağı gibi, sanal makineler (VM'ler) tüm makinenin (sunucunun) sanallaştırılmasını sağlar. Sanal makine; CPU, bellek, ağ arabirimi kartı, USB denetleyicileri ve ses kartları gibi fiziksel bir makinenin donanım bileşenlerine öykünür. Sanal ortamda, konuk bir işletim sistemi ve birden fazla uygulama çalıştırabilirsiniz. 

Sanal makineler bulut teknolojilerini mümkün kılmıştır. Amazon Web Services'ta (AWS) sanal makineye bulut sunucusu adı verilir. AWS'ye ait olan ve AWS tarafından yönetilen bu bulut sunucuları API'ler aracılığıyla kullanılabilir.

Bulut sunucuları hakkında bilgi edinin »

Docker

VM, herhangi bir donanımda sanal makine çalıştırmanıza olanak tanır. Docker, herhangi bir işletim sisteminde uygulama çalıştırmanıza olanak tanır. Container olarak bilinen izole kullanıcı alanı bulut sunucularını kullanır.

Docker container'larının kendi dosya sistemi, bağımlılık yapısı, süreçleri ve ağ özellikleri vardır. Uygulama, container'ın içinde gereken her şeye sahiptir ve her yerde çalışabilir. Docker container'ı teknolojisi, temel ana sunucu işletim sistemi çekirdek kaynaklarını doğrudan kullanır. 

Docker ve sanal makineler arasındaki diğer benzerlikler nelerdir?

Sanallaştırma teknolojileri olarak Docker ve sanal makinelerin (VM'ler) belirli benzerlikleri vardır.

Görüntüler

Hem Docker container'ları hem de sanal makineler görüntülerden oluşturulur. Her görüntü, sanallaştırılmış ortamın ayrıntılı planı olarak işlev görür. Görüntüler, kullanıcıların her seferinde yapılandırmak zorunda kalmadan tutarlı ortamlar oluşturmasına ve bunları paylaşmasına olanak tanır.

Görüntü, uygulamaları çalıştırmak için gerekli tüm sistem kaynaklarını belirtir. Örneğin VM görüntüsü, işletim sistemi yedekleri oluştururken, Docker container'ı görüntüsü, uygulama ortamı yedeği oluşturur.

Sürüm Oluşturma

Hem Docker container'ı görüntülerinin hem de sanal makine görüntülerinin, zaman içindeki ortam yapılandırması değişikliklerini izlemek için sürümü oluşturulabilir.

Docker'da sürüm oluşturma, zaman içinde Docker görüntülerindeki değişiklikleri izleme ve yönetme olanağını ifade eder. Geliştiricilerin uygulamalarının farklı sürümlerini takip etmelerine, gerekirse önceki sürümlere geri dönmelerine ve bir uygulamanın farklı sürümlerini aynı anda dağıtmalarına olanak tanır. 

Benzer şekilde, sanal makinelerde sürüm oluşturma, zaman içinde sanal makine görüntüsündeki değişiklikleri izleme ve yönetme sürecini ifade eder. Sanal makine sürümü oluşturma, sanal donanım veya işletim sistemi yapılandırmasında yapılan güncellemeler ve düzeltme ekleri gibi değişiklikleri takip eder.

Taşınabilirlik

Hem sanal makineler hem de Docker, farklı temel mimari türleri için farklı uygulama yapılandırmaları geliştirme gereğinin zorluklarını ele almak için tasarlanmıştır. Zorluklara farklı yaklaşımlar benimsemelerine karşın, hem Docker hem de VM görüntüleri ister şirket içi ister bulutta olsun, mimariler arasında büyük ölçüde taşınabilir. 

Önemli farklar: Docker ve sanal makine karşılaştırması

Hem sanal makineler (VM'ler) hem de Docker, uygulamaları farklı ortamlarda çalıştırmanın zorluğunu ele alır. Ancak bunu, biraz farklı nedenlerle ve farklı yaklaşımlarla yaparlar.

Amaç

Başlangıçta sanal makineler, birden fazla işletim sisteminin tek bir fiziksel makinede çalışmasına olanak tanımak için tasarlanmıştır. Amaç, kullanıcıların temel donanımdan izole edilmiş bir sanal ortam oluşturmasını sağlamaktır. VM'ler, uygulamaları farklı donanım mimarilerinde çalıştırmayı ve donanım kaynaklarını daha verimli kullanmayı kolaylaştırmak için donanım ayrıntılarını soyutlar.

Öte yandan Docker, uygulamaları izole ve yeniden üretilebilir bir ortamda paketlemek ve çalıştırmak için hafif ve taşınabilir bir yöntem sağlamak üzere tasarlanmıştır. Docker; geliştirme, test ve üretim gibi farklı ortamlarda uygulama dağıtmanın zorluğunu ele almak için işletim sistemi ayrıntılarını soyutlar. Yazılım ortamı güncellemelerini yönetmek ve her yerde ortam tutarlılığını korumak çok zor olabilir. Bu, özellikle yüzlerce uygulama çalıştıran veya uygulamaları yüzlerce mikro hizmete ayrıştıran kuruluşlar için geçerlidir. Docker, bu sorunu container kullanımı yoluyla ele alır. 

Son ürün

Docker, Docker şirketinin sahibi olduğu ve işlettiği açık kaynak container platformunun adıdır. Çok daha az popüler olan Podman gibi alternatif platformlar vardır. Ancak Docker, container kullanımı ile eş anlamlıdır. Container, son kullanıcı için kullanılabilir parça niteliğindeki yapıttır.

Sanal makinenin kendisi son kullanıcı için kullanılabilir parçadır. Teknolojisi belirli bir marka ile ilişkili değildir. VM'leri şirket içi veri merkezlerinde dağıtabilir veya yönetilen bir bulut hizmeti olarak API'ler aracılığıyla VM'lere erişebilirsiniz.

Mimari

Sanal makine, uygulamalar ve bağımlılıkları (kitaplıklar ve diğer ikili dosyalar gibi) ile birlikte kendi çekirdeğini ve ana sunucu işletim sistemini çalıştırır. Hipervizör, donanım (ana makine veya sunucu) ve sanal makine arasında koordinasyon sağlar. Örnek oluşturma sırasında özetlenen fiziksel donanım kaynaklarını, özel kullanımı için sanal makineye tahsis eder. Tek bir güçlü sunucuda, tek bir hipervizör tarafından yönetilen ve her birinde yüzlerce uygulamanın çalıştığı birden fazla sanal makine bulunabilir.

Docker container'ı yalnızca bağımlılıklarını içerir. Yazılım Docker Engine, Docker'da sanallaştırmayı destekler. İster fiziksel ister sanal bir makine olsun, çalışan container'lar ve temel işletim sistemi arasında koordinasyon sağlar.

Docker ile daha gelişmiş sanallaştırma yönetimi için Kubernetes kullanın. Daha fazla bilgi için bkz. Kubernetes ile Docker Arasındaki Fark Nedir?

Kaynak paylaşımı

Hem sanal makineler hem de Docker container'ları, kaynak çoklamayı veya sanallaştırılmış bulut sunucuları arasında kaynak paylaşımını kullanır.

Sanal makineler, donanımdan belirli bir miktarda kaynağı önceden talep eder. Sanal makine çalıştığı sürece bu miktarı sürekli olarak kullanmaya devam eder. 

Docker container'ları ise kaynakları istek üzerine kullanır. Sanal makineler gibi belirli bir miktarda fiziksel donanım kaynağı istemek yerine, tek bir işletim sistemi çekirdeğinden sadece ihtiyaç duydukları kadarını talep ederler. Birden fazla container aynı işletim sistemini paylaşır. Docker container'ları, çekirdek müşteri adaylarıyla kaynak paylaşımını yönetir ve bir VM'ye göre daha az sistem kaynağı kullanabilir. 

Güvenlik

Docker container'ları hafif kaynak tüketimi için çekirdeği ana sunucu işletim sistemiyle paylaştığından, çekirdekte güvenlik açıkları varsa risk altındadır. Bununla birlikte, Docker birçok gelişmiş güvenlik denetimi de sağlar.

Bunun aksine, VM tüm işletim sistemini çalıştırdığından, uygulamaları çalıştırırken ek bir izolasyon düzeyi bulunur. VM'ler, işletim sistemi sıkı güvenlik önlemlerine sahip olduğu sürece daha yüksek güvenlik sunar.

Hangi durumlarda kullanmalıdır? Docker ve sanal makine karşılaştırması

Docker container'ları Linux mimarisinde çalışır. Ad alanları ve denetim grupları (cgroups) gibi Linux çekirdeğine özgü özellikler gerektirir. Geliştiriciler genellikle Docker platformunu Linux tabanlı sanal makinelerde çalıştırır. Docker, uygulama kodunu her yerde çalışan container'lar halinde paketler. Ortam güncellemeleri container'da yalnızca bir kez yapılır. Uygulama ortamınızı güncellemeniz gerekmez. 

Örneğin, AWS'de bir bulut sunucusu başlatabilir ve Docker ile önceden yapılandırılmış olarak gelen bir Amazon Makine Görüntüsü (AMI) ile hemen yükleyebilirsiniz. 

 

Ancak, özellikle uygulamaları dağıtmak için sanal makine (VM) mi yoksa Docker mı kullanacağınıza karar veriyorsanız bu, uygulamanın çalışma gereksinimlerine bağlıdır.

Sanal makine hangi durumlarda kullanılmalıdır?

Bu gereksinimlere sahip uygulamalar çalıştırıyorsanız sanal makine kullanmak en iyisidir: 

  • İşletim sistemine özel bağımlılıklar;
  • Önemli donanım kaynağı gereksinimleri;
  • İşletim sistemlerinde çeşitli denetimler ayarlama ihtiyacı;
  • Modern işletim sistemlerinde artık çalışmayan eski uygulamalar;
  • Kullanılabilir tek bir temel fiziksel altyapı ile farklı işletim sistemi gereksinimleri.

Docker hangi durumlarda kullanılmalıdır?

Bu gereksinimlere sahip uygulamaları çalıştırırken Docker'ı kullanmak en iyisidir: 

  • Hafif kaynak gereksinimleri veya mikro hizmet mimarisi;
  • Bulut tabanlı sunucular da dahil olmak üzere dağıtılmış fiziksel altyapı ortamı;
  • Hızlı dağıtım döngüleri (Dockerfile'ları yönetmek VM yapılandırmalarından daha kolay olduğu için);
  • Hızlı ölçeklenebilirlik gereksinimi.

Farkın özeti: Docker ve VM

 

Docker container'ı

VM

Bu nedir?

Docker, Docker container'larını oluşturmak ve çalıştırmak için kullanılan bir yazılım platformudur. Docker container'ı, işletim sisteminde kullanıcı işlemlerinin çalıştığı kısım olan bir kullanıcı alanı bulut sunucusunun öykünmesidir.

Sanallaştırılmış donanım da dahil olmak üzere, bir işletim sistemini çalıştıran fiziksel bir makinenin öykünmesi.

Sanallaştırma

Container, uygulama kodundaki işletim sistemi ayrıntılarını soyutlar.

VM, uygulama kodundaki donanım ayrıntılarını soyutlar.

Amaç

Donanım ayrıntılarını soyutlamak ve donanım kullanımını artırmak.

Uygulama ortamı yönetimini iyileştirmek ve birden fazla ortamda tutarlılık sağlamak.

Yöneten

Docker Engine, işletim sistemi ile Docker container'ları arasında koordinasyon sağlar.

Hipervizör, makinenin fiziksel donanımı ile sanal makineler arasında koordinasyon sağlar.

Mimari

Kaynakları temel alınan ana sunucu çekirdeği ile paylaşır.

Kendi çekirdeğini ve işletim sistemini çalıştırır.

Kaynak paylaşımı

İstek üzerine.

Sanal makine görüntüsünün yapılandırma gereksinimlerinde ayarlanan sabit bir miktar.

AWS, uygulama dağıtım gereksinimlerinizi nasıl destekleyebilir?

Amazon Web Services (AWS), sanal makineler (VM'ler) ve Docker yönetimi için özel olarak tasarlanmış bir dizi hizmete sahiptir:

  • Amazon Esnek İşlem Bulutu (Amazon EC2) 600'den fazla farklı türde güvenli, güvenilir ve ölçeklenebilir bulut sunucusu sunar. Bir Amazon Makine Görüntüsü (AMI) şablonu yükleyerek dakikalar içinde kullanıma hazır, tam olarak belirlenmiş bir geliştirme, test veya üretim ortamı sunucusuna sahip olabilirsiniz.
  • Amazon Esnek Container Hizmeti (Amazon ECS), container'lı uygulamaları dağıtmayı ve ölçeklendirmeyi kolaylaştıran, tam olarak yönetilen bir container düzenleme hizmetidir. Müşteriler, container bulut sunucularını sanal özel buluttaki (VPC) özel bir Docker görüntüsü kayıt defterine veya VPC'nin dışında erişilebilen bir kayıt defterine erişecek şekilde yapılandırabilir.
  • Amazon Esnek Container Kayıt Defteri (Amazon ECR), container'larınızı istediğiniz yerde kolayca depolamanıza, paylaşmanıza ve dağıtmanıza olanak tanır. Amazon ECR, geliştirme ve üretim iş akışlarınızı basitleştirmek için Docker komut satırı arabirimiyle (CLI) entegre olur. Örneğin, geliştirme makinenizdeki Docker CLI'yi kullanarak container görüntülerinizi Amazon ECR'ye aktarabilirsiniz. Amazon container düzenleyicileri, üretim dağıtımları için bunları doğrudan alabilir.
  • AWS Fargate, fiziksel bir sunucuyu veya sanal makineleri yönetmenize gerek kalmadan container'ları dağıtmanıza ve yönetmenize olanak tanıyan sunucusuz bir hizmettir.

Hemen bir hesap oluşturarak AWS'de uygulama geliştirmeye başlayın.