Dockerlaştırma, yazılım sektöründeki dağıtım ve otomasyon sürecini yeniden tanımladı. Başlangıcından beri, Docker ekibi, otomatik dağıtımı sorunsuz hale getirmek için sürekli çaba gösterdi. Konteynerleştirme teknolojisi yalnızca hızlı uygulama geliştirmeyi ve verimliliği sağlamakla kalmaz, aynı zamanda zamandan ve yoğun çabalardan da tasarruf sağlar. Çoklu konteyner uygulamalarını orkestre etme, tanımlama ve çalıştırma gibi rakipsiz işlevler, Docker'ı geliştiriciler için favori bir seçim haline getiriyor.
Docker Konteynerleri ve İmajları
Docker'ı daha iyi anlamak için derinlemesine incelemeden önce, temel bilgileri tazelemek önemlidir. Docker ile çalışma deneyiminiz yoksa, nasıl çalıştığını anlamak zor olabilir. Bu bölümde, yeni başlayanlar için temel olan birkaç kavramı tanımlayacağız. Bu kavramlara aşina olduğunuzu düşünüyorsanız, bu bölümü atlayıp bir sonraki bölüme geçebilirsiniz. Ayrıca, temel Docker kavramlarını açıklayan kapsamlı kılavuzumuza.
-
Docker İmajları
Docker imajları, salt okunur dosyalardan oluşan bir koleksiyondur. Docker imajlarını bir kez oluşturduktan sonra, silinmesine izin verilmesine rağmen bunları değiştiremezsiniz. İhtiyaçlarımıza göre bir veya daha fazla Docker konteyneri oluşturmak için bir Docker imajı kullanırız. Sisteminizde çalışan imajların sayısını kontrol etmek için şu komutu kullanın:
|
1 |
$docker images |
When you pull images from a remote registry like Docker Hub gibi uzak bir kayıt defterinden imaj çektiğinizde, dosya ve klasörleri indirmiş olursunuz. Bir imaj çekmek için şu komutu kullanın:
|
1 |
$docker pull (imajın adıthe image) |
-
Docker Konteynerleri
Docker imajları, Docker konteynerlerinin taslağıdır. Teknik olarak bir Docker konteyneri, bir Docker imajının örneğidir. Bir Docker imajını ebeveyn gibi düşünürseniz, Docker konteyneri de çocuktur. Yalnızca bir kez oluşturabileceğiniz Docker imajlarının aksine, tek bir imaj kullanarak birden fazla konteyner oluşturabilirsiniz. Sisteminizde çalışan imajların listesini kontrol etmek için şu komutu kullanın:
|
1 |
$docker ps |
Bir konteyner çekmek için aşağıdaki komutu kullanın:
|
1 |
$docker pull (konteynerin adıthe container) |
-
Docker İmajları ve Konteynerleri Nasıl Çalışır?
Docker imajları ve konteynerleri, Docker'ın potansiyelini açığa çıkarmak için el ele çalışır. Tek bir konteyner, run komutu aracılığıyla Docker imajı kullanılarak oluşturulur. Bir Docker konteyneri oluşturduğunuzda, Konteyner Katmanı (Container Layer) olarak bilinen yeni bir katman oluşturulur. Yeni oluşturulan katman, uygulamayı ve bağımlılıklarını içerir. Oluşturduğunuz her konteynerin farklı bir okunabilir/yazılabilir Konteyner Katmanı vardır ve Docker konteynerinde yapılan tüm değişiklikler otomatik olarak Konteyner Katmanına yansıtılır. Unutmayın, bir konteyneri silmeyi seçerseniz Konteyner Katmanını da kaybedersiniz.
Docker Compose'a Merhaba Deyin
Docker Compose, tüm Docker konteynerlerinizi tek bir YAML dosyasında yapılandırmanıza ve orkestre etmenize olanak tanıyan bir konteyner yönetim aracıdır. Konteynerler arası bağlantılar ve birimler (volumes) oluşturmak, bunları başlatmak ve durdurmak bu araçla çok daha kolay hale gelir.
-
Docker Compose Ne İşe Yarar?
Basitçe söylemek gerekirse, Docker Compose çakışmaları ve organizasyonel sorunları ortadan kaldırarak karmaşık görevleri kolaylaştırır. Kullanıcıların farklı Docker konteynerlerini merkezi olarak yönetmelerine olanak tanır. Başka bir deyişle, tüm hizmetleri tek bir büyük konteynerde toplamak yerine, Docker Compose bir hizmeti birden fazla hizmete bölerek kullanıcıların bunlara zahmetsizce erişmesini ve yönetmesini sağlar.
Bu kılavuzda, CentOS 7 üzerinde çoklu konteyner uygulamalarını yönetmek için Docker Compose'un güncel sürümünü yükleme adımlarında size yol göstereceğiz. Ayrıca, yazılımı başarıyla kullanmak için ihtiyacınız olan bazı temel komutların üzerinden geçeceğiz.
-
How to Use Docker Compose
Docker Compose'u kullanmak, yeni başlayanlar için bile son derece kolaydır. Docker Compose'un içerdiği üç adımlı sürece göz atalım:
1. Build: İlk olarak, proje ihtiyaçlarınıza göre Dockerfile içinde imajlar oluşturun veya belki de kayıt defterinden çekin.
2. Define: Ardından, tüm bileşen hizmetlerini compose.yml dosyasında tanımlamanız gerekir.
3. Run: Bileşenleri tanımladıktan sonra, docker-compose komutunu kullanarak çalıştırma zamanı gelmiştir.
Gereksinimler
CentOS sunucunuza Docker Compose kurulumuna geçmeden önce şunlara sahip olduğunuzdan emin olun:
- Bir CentOS 7 sunucusunda sudo erişimine sahip root olmayan kullanıcı.
- Makinenizde Docker kurulu olmalıdır. Lütfen şu kılavuza bakın: Ubuntu 18.04 üzerinde Docker nasıl kurulur ve çalıştırılır.
Artık hazırsınız. Ardından, CentOS 7'ye Docker Compose kurmak için aşağıdaki adımları takip edin.
Adım 1: Docker Compose Kurulumu
Docker Compose'un en güncel sürümünü edinmek için şu belgedeki talimatları izleyin: Docker belgeleri ve ikili dosyaları şuradan indirin: Docker’ın GitHub deposu. Aşağıdaki komutu çalıştırarak yazılımın en son sürümüne sahip olduğunuzu kontrol edin:
|
1 |
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose |
İkili dosyanın çalışmasını sağlamak için aşağıdaki izinleri ayarlayın:
|
1 |
sudo chmod +x /usr/local/bin/docker-compose |
Ardından, kurulumun başarılı olup olmadığını kontrol etmek için sürümünüze bakın:
|
1 |
$docker-compose --version |
Aşağıdaki kod kurulu sürümü yazdıracaktır:
Ardından, kurduğunuz Docker Compose'u kullanarak bir “Hello World” örneği çalıştırabilirsiniz.
Adım 2: Bir Konteyner Çalıştırmak için Docker Compose Kullanımı
Genel Docker kayıt defteri olan Docker Hub'da, gösterim ve test amacıyla kullanılabilecek bir “Hello World” imajı bulunmaktadır. Bu imaj, çok minimum bir yapılandırmayla Docker Compose kullanarak bir konteynerin nasıl çalıştırılacağını gösterir. İlk olarak, YAML dosyamız için bir dizin oluşturmanız gerekir:
|
1 |
$mkdir hello-world |
Ardından, bu dizine geçin:
|
1 |
$cd hello-world |
Ardından, tercih ettiğiniz metin düzenleyiciyi kullanarak YAML dosyasını oluşturun. Bu kılavuzda Vi:
|
1 |
$vi docker-compose.yml |
Ekleme moduna geçmek için i tuşuna basın, ardından bunu dosyaya yazın:
|
1 2 |
my-test: image: hello-world |
Konteyner adına ilk satır dahil edilecektir. İkinci satır, programa konteyneri oluşturmak için hangi imajı kullanması gerektiğini söyler. docker-composeup komutu yazdığınızda, kullanılabilir olup olmadığını kontrol etmek için hello-world adında yerel bir imaj arayacaktır. Ekleme modundan çıkmak için ESC tuşuna basın. Ardından, dosyayı kaydedip çıkmak için :x yazın ve ENTER tuşuna basın. Makinenizdeki imajları manuel olarak kontrol etmek için docker images komutu kullanılabilir:
|
1 |
$ sudo docker images |
Hiç yerel imaj olmadığında yalnızca sütun başlıkları görünür:
Konteyneri oluşturmak için hala /hello-world dizinindeyken:
|
1 |
$sudo docker-compose up |
Komutu ilk kez çalıştırdığınızda ve hello-world adında yerel bir imaj bulunmadığında, bu imaj Docker Hub deposundan indirilecektir:
Kurulumun çalıştığından emin olmak için Docker Compose imajı çeker, bir konteyner oluşturur, onu bağlar ve hello programını yürütür:
Bundan sonra, yapılanların açıklamasını içeren bir çıktı görüntülenir:
When hello görevini tamamladığında, konteyner kapatılacak ve komut artık konteynerde çalışmayacaktır. Etkin işlemlere bakıldığında sütun başlıkları görüntülenecektir. Ancak, şu anda çalışmadığı için hello-world konteyneri listelenmeyecektir:
|
1 |
$sudo docker ps |
Yalnızca mevcut olanları değil, tüm konteynerleri görmek için -a bayrağını kullanın:
|
1 |
$sudo docker ps -a |
Bir konteyner çalıştırmayı denediğinize göre, bazı temel Docker Compose komutlarını öğrenmeye geçebilirsiniz.
Adım 3: Docker Compose Komutları
Docker Compose'a başlamanızı sağlamak için bu bölümde docker-compose aracı tarafından sağlanan temel komutlar ele alınacaktır. docker-compose dizin bazında çalışan bir komuttur. Her konteyner için bir dizin ve dizin başına bir docker-compose.yml dosyası oluşturarak, aynı bilgisayarda birçok Docker konteyner grubunu çalıştırabilirsiniz.
Şimdiye kadar Docker Compose'u kendi başınıza çalıştırıyordunuz. Şuna basarak kapatabilirsiniz: Ctrl-C. Bu, terminal penceresinin hata ayıklama mesajlarını görüntülemesini sağlar. Ancak, canlı ortamda çalışırken docker-compose aracını bir servis olarak çalıştırmanız önerilir. -d seçeneği bunu gerçekleştirmenin basit bir yolu olarak kullanılabilir:
|
1 |
docker-compose up -d |
Şimdi, docker-compose arka plana geçer. Docker konteyner grubunuz (durdurulmuş veya çalışan) aşağıdaki komutla yönetilebilir:
|
1 |
$sudo docker-compose ps -a |
Bir konteynerin State değeri, durdurulmuşsa Exited olarak bildirilecektir, aşağıdaki örnekte görüldüğü gibi:
Şu anda çalışan bir konteyner ise şunu gösterecektir:
|
1 2 3 4 |
Name Command State Ports --------------------------------------------------------------- nginx_nginx_1 nginx -g daemon off; Up 443/tcp, 80/tcp |
Docker grubunu başlatmak için kullandığınız docker-compose.yml dosyasıyla aynı dizindeki tüm çalışan Docker konteynerlerini sonlandırabilirsiniz:
|
1 |
$docker-compose stop |
Note: İşlemleri daha zorunlu bir şekilde sonlandırmanız gerekirse, docker-compose kill komutu da mevcuttur.
Bazı durumlarda, Docker konteynerleri eski verilerini içeride saklayabilir. Sıfırdan başlamak istiyorsanız, konteyner grubunuzdaki tüm konteynerleri kaldırmak için rm komutunu kullanın:
|
1 |
$docker-compose rm |
Bu komutlardan herhangi birini, Docker konteynerinin ve .yml dosyasının bulunduğu dizinden farklı bir dizinde çalıştırmak bir hata mesajıyla sonuçlanacaktır:
|
1 2 3 4 5 6 |
ERROR: Can't find a suitable configuration file in this directory veya any parent. Are you in the right directory? Supported filenames: docker-compose.yml, docker-compose.yaml |
Bu bölümde, Docker Compose ile konteynerleri yönetmenin temellerini ele aldık. Bahsedildiği gibi, konteynerleriniz üzerinde ek kontrole ihtiyaç duyarsanız, bir sonraki bölümde Docker dosya sistemine erişebilir ve konteyner içindeki bir komut satırından komutlar çalıştırabilirsiniz.
Step 4: Access the Docker Container Filesystem
Bir konteynerde komut satırı çalıştırmak ve konteynerin dosya sistemine erişmek, bir komut satırı aracı olan docker exec ile mümkündür. Örnek olarak, “Hello World” uygulamasını çalıştırın ve docker exec komutunun tamamlanmasının ne kadar sürdüğünü görün. Bu eğitim için, Docker Hub image of Nginx kullanılabilir. nginx adında yeni bir dizin oluşturun ve içine girin:
|
1 2 |
mkdir ~/nginx cd ~/nginx |
Şimdi bir docker-compose.yml dosyanız olmalıdır, bunu bir metin düzenleyicide açabilirsiniz:
|
1 |
vi docker-compose.yml |
Ardından, dosyaya aşağıdakileri ekleyin:
|
1 2 |
nginx: image: nginx |
Uygulamadan çıkma zamanı geldi. Nginx konteynerini arka planda başlatmak için aşağıdaki komutu kullanın:
|
1 |
$sudo docker-compose up -d |
Docker Compose, Nginx imajını indirecek ve konteyneri arka planda çalıştıracaktır. Devam etmek için konteynerin CONTAINER ID bilgisini girmeniz gerekecektir. Şu anda çalışan tüm konteynerleri aşağıdaki komutla görüntüleyebilirsiniz:
|
1 |
$sudo docker ps |
Aşağıdakileri göreceksiniz:
Eğer bu konteynerin içindeki dosya sistemini değiştirmek isteseydiniz, docker exec kullanarak, konteyner içinde bir kabuk (shell) oluşturmak için konteynerin benzersiz kimliğini (bu durumda, f139d0d78ca7) kullanırdınız:
|
1 |
$sudo docker exec -it f139d0d78ca7 /bin/bash |
Etkileşimli bir terminal -t seçeneği kullanılarak açılabilir, /bin/bash ise konteynere bir bash kabuğu sağlar. Bundan sonra konteyner için göreceğiniz bash istemi şudur:
|
1 |
root@b86b6699714c:/# |
Konteynerinizin içinde bir komut istemi bulacaksınız. Bir veri biriminin parçası olarak kaydedilmiş bir dizinde çalışmadığınız sürece, konteyneri yeniden başlatmak yaptığınız tüm değişikliklerin üzerine yazacaktır. Linux komut satırı araçlarıyla çalışmaya alışıksanız, çoğu Docker görüntüsünün en temel Linux kurulumları kullanılarak oluşturulduğunu bilmelisiniz.
Sonuç
CentOS 7 üzerinde çoklu konteyner uygulamalarını yönetmek için Docker Compose’un güncel sürümünü yükleme adımlarında size rehberlik ettik. Docker Compose’un çok sayıda konteyneri aynı anda başlatma ve kapatma yeteneği etkileyicidir. Şablonlardan uygulamalara geçmek dakikalar alır. Bu nedenle, işiniz aynı anda birden fazla konteyner çalıştırmayı gerektiriyorsa, Docker Compose kullanmaya devam etmek harika bir seçenektir. Yine de bu, her duruma uyan tek bir çözüm değildir. Özel ihtiyaçlarınıza bağlı olarak daha iyi bazı seçenekler de bulabilirsiniz, örneğin, Kubernetes.
Docker Compose’un gücünü daha fazla keşfetmek için şu adresteki eğitimlere başvurabilirsiniz: blogumuz:
- Docker Compose ile Laravel, Nginx ve MySQL Dağıtımı
- Ubuntu 20.04 Üzerine Docker Compose Nasıl Kurulur ve Yapılandırılır
Keyifli Çalışmalar!






Yorumlar
Henüz yorum yapılmamış. İlk siz olun.