Kulağınızı yazılım topluluğunun toprağına bile hafifçe aldıysanız, Docker'ı duyacaksınız. Son zamanlarda popülerlikte büyük bir artış elde ettikten sonra, altyapısı buna bağlı olan birçok küresel firma da dahil olmak üzere kullanıcıları hızlı bir şekilde çekmeye devam ediyor. Docker'ın şöhret artışının bir kısmı, kullanıcılarının Evanjelik eğilimleriyle anında hayran olmalarına bağlanabilir.
Ancak popülaritenin ardında ne var ve nasıl çalışır? Kavramsal bir giriş yapalım ve Docker'ı biraz pratik oynama ile keşfedelim.
Docker nedir?
Docker, yazılımı izole bir ortamda konteyner. Kapsayıcı sanal makineye (VM) benzer, ancak tamamen farklı bir şekilde çalışır (yakında devreye gireceğiz). Bir VM'nin yaptığı yalıtımın çoğunu sağlarken, kaplar kaynakların sadece bir kısmını kullanır.
Neden harika
Teknik detaylara dalmadan önce neden önemsemelisiniz?
Tutarlılık
Diyelim ki bir web uygulaması kodluyorsunuz. Test ettiğiniz yerel makinenizde geliştiriyorsunuz. Bazen bir hazırlama sunucusunda çalıştırırsınız ve yakında dünyanın görmesi için büyük bir üretim sunucusuna koyacaksınız.
Yapabilirsen iyi olmaz mıydı sürekli tüm cihazlarınızda aynı ortamı mı çevirdiniz? Web uygulamanız yerel kutunuzdaki bir Docker kapsayıcısının içinde düzgün çalışıyorsa, test sunucunuzda çalışır, üretim sunucusunda çalışır, her yerde çalışır.
Bu, proje bağımlılıklarını yönetmeyi inanılmaz derecede kolaylaştırır. Doğrudan kodunuz tarafından çağrılan harici kütüphaneler ve modüllerle uğraşmakla kalmaz, tüm sistem beğeninize göre yapılandırılabilir. Yeni bir kullanıcının indirmek ve çalıştırmak istediği açık kaynaklı bir projeniz varsa, bir kapsayıcı başlatmak kadar basittir.
Yalnızca yeniden üretilebilir bir ortamdan yararlanan kod çalıştırmakla kalmaz, aynı zamanda kaplarda kod oluşturmak da yaygındır; Ahududu Pi için derleme çapraz Docker kullanarak yazdık.
Ölçeklenebilirlik
Docker'ı değişen taleplere sahip hizmetler (web siteleri veya API'ler gibi) oluşturmak için kullanırsanız, yalnızca daha fazla kap ateşleyerek (her şeyin doğru bir şekilde yapıldığından emin olması şartıyla) provizyonunuzu ölçeklendirmek inanılmaz derecede kolaydır. Kubernetes ve Docker Swarm gibi konteyner kümelerini düzenlemek için bir dizi çerçeve var, ancak bu başka bir günün hikayesi.
Nasıl çalışır
Konteynerler oldukça zekidir. Sanal makine benzetilmiş donanım üzerinde çalışır ve tamamen bağımsız bir işletim sistemidir. Ancak, kaplar yerel olarakana bilgisayarın çekirdeğini paylaşın.Aşağıdaki farkları görebilirsiniz.
Bu, kapların sanal makinelerden şaşırtıcı derecede daha iyi performans gösterdiği anlamına gelir. Docker hakkında konuştuğumuzda, aynı anda kaç işletim sistemi tutabileceğimizi değil, kaç Linux işlemini çalıştırabileceğimizden bahsediyoruz. Yaptıklarına bağlı olarak, PC'nizde binlerce konteyner olmasa bile yüzlerce döndürmek mümkün olacaktır. Ayrıca, bir kapsayıcıyı başlatmak birçok VM için dakikalarla karşılaştırıldığında saniyeler veya daha az zaman alacaktır. Kaplar çok hafif olduğu için, uygulamanın tüm yönlerini ezici bir bakım ve modülerlik için farklı kaplarda çalıştırmak yaygın bir uygulamadır. Örneğin, veritabanı sunucunuz için farklı kapsayıcılar olabilir, redis, nginx vb.
Ancak kaplar ana çekirdeği paylaşıyorsa, nasıl ayrılırlar? Oldukça düzgün, düşük seviyeli bir hile var, ancak bilmeniz gereken tek şey Linux ad alanlarının yoğun bir şekilde kaldırarak kendi ağ arayüzleri ve daha fazlası ile tamamen bağımsız bir kapsayıcı gibi görünen şeyle sonuçlanıyor. Bununla birlikte, kaplar ve ana bilgisayarlar arasındaki engel, VM'leri kullanmaya kıyasla hala daha zayıftır, bu nedenle güvenlik açısından kritik uygulamalar için, bazıları konteynırlardan uzak durmayı önerebilir.
Bunu nasıl kullanabilirim?
Örnek olarak, bir Docker kapsayıcısında minimal bir web sunucusu oluşturacağız. Basit tutmak için bir Python web mikroçevresi olan Flask'ı kullanacağız. Bu bizim çalıştırmak istediğimiz program,
main.py :
flask import Flask app = Flask (__ name__) @ app.route ('/') def home (): 'Docker kapsayıcısının içinden merhaba'; __name__ == '__main__' ise: app.run (ana bilgisayar = '0.0.0.0', bağlantı noktası = 80)
Flask'a aşina değilseniz endişelenmeyin; bilmeniz gereken tek şey bu kodun
localhost: 80 .
Bir Konteynerin İçinde İşlem Yapma
Peki bunu bir kabın içine nasıl koyabiliriz? Kaplar,görüntü, bir konteyner için bir reçete gibidir. Kapsayıcı, yalnızca görüntünün çalışan bir örneğidir (bu, aynı görüntünün birden çok çalışan kabına sahip olabileceğiniz anlamına gelir).
Nasıl bir görüntü elde ederiz? Docker Hub, resmi katkıları olan ancak herkesin kendi başlarına itmesine izin veren halka açık bir resim koleksiyonudur. Docker hub'ından bir görüntü alabilir ve istediğimizi yapabilmesi için genişletebiliriz. Bunu yapmak için bir
Dockerfile - bir görüntü oluşturmak için talimatların bir listesi.
Yapacağımız ilk şey
Dockerfile hangi görüntüyü kullanmak / genişletmek istediğimizi belirtmektir. Başlangıç noktası olarak, Python'un kurulu olduğu bir görüntü seçmek mantıklı olacaktır. Neyse ki, birçok lezzette bulunan bakımlı bir Python görüntüsü var. Debian streç üzerinde çalışan Python 3.7 ile bir tane kullanacağız.
İşte bizim
Dockerfile :
Python'DAN: 3.7-streç KOPYA uygulaması / / uygulaması WORKDIR / app RUN pip install Flask CMD '(python', 'main.py')
Tartıştığımız ilk satırdan sonra,
Dockerfile oldukça açıklayıcı. Şu şekilde bir hiyerarşi kurulumumuz var:
app └──main.py Dockerfile
Böylece biz
Uygulamanın / dizini kapsayıcıya kopyalanır ve komutların geri kalanını çalışma dizini olarak kullanarak çalıştırırız. Kullanırız
bip yüklemek
Flask , son olarak kapsayıcı başlatıldığında çalıştırılacak komutu belirtmeden önce. Bu komutun başlatıldığı işlemin kapsayıcıya bağlı olacağını unutmayın: işlem çıkarsa kap ölür. Docker'ı düzgün bir şekilde kullanıyorsanız (genellikle) her bir kapsayıcı içinde çalışan bir projenin tek bir işlemi / yığını ile bu genellikle iyi bir şeydir.
Görüntü Oluşturma
Tamam, resmimizin nasıl oluşturulacağına dair bazı talimatlar yazdık, hadi yapalım.
$ docker oluştur.
Bu, Docker'a bir
Dockerfile geçerli dizinde (
. ). Ancak, çalıştırılmasını biraz daha kolaylaştırmak için, oluşturulmuş resmimize bir ad verelim,etiket.
$ docker build -t flask-merhaba.
Bu Python görüntüsünü hub'dan ilk kez kullandığımız için, indirilmesi bir veya iki dakika sürer, ancak gelecekte yerel olarak kullanılabilir olacaktır.
Şimdi bir konteyner üretmek için koşabileceğimiz yepyeni parlak bir görüntümüz var! Bu kadar basit:
$ docker run flask-merhaba
Konteynırımız başarıyla çalışıyor ve Flask'tan sayfamıza hizmet vermeye hazır olduğunu söyleyerek çıktı alıyoruz. Ancak bir tarayıcı açar ve
localhost , görülecek hiçbir şey yok. Bunun nedeni elbette sunucumuzun izole edilmiş bir ağ yığınına sahip olan kabın içinde çalışmasıdır. Sunucumuza erişebilmek için 80 numaralı bağlantı noktasını iletmemiz gerekiyor. Şimdi konteyneri CTRL + C ile öldürelim ve ileriye doğru bir bağlantı noktasıyla tekrar çalıştıralım.
$ docker run -p 80:80 flask-merhaba
… ve çalışıyor!
özet
Bu süreci ilk gördüğünüzde, biraz uzun soluklu görünebilir. Ancak,
liman işçisi-oluşturma birden fazla kapsayıcı / hizmet çalıştırırken çok güçlü olan bu iş akışını otomatik hale getirmek.
Sizi bir sırrın içine sokacağız: başınızı Docker'a getirdiğinizde, elit bir kulübün parçası gibi hissediyorsunuz. Herhangi bir kurulum gerektirmeden, sadece bir tuşa dokunuşla kimsenin yazılımını kolayca çekebilir ve çalıştırabilirsiniz.