Uzak Docker Hostlarını Docker Machine ile Ubuntu 18.04 Üzerinde Sağlama ve Yönetme
Giriş
Modern yazılım geliştirme ve dağıtım süreçlerinde konteyner teknolojileri, özellikle Docker, vazgeçilmez bir araç haline gelmiştir. Geliştiriciler ve sistem yöneticileri, uygulamalarını izole edilmiş ortamlarda çalıştırmak, taşınabilirliği artırmak ve dağıtım süreçlerini basitleştirmek için Docker’dan faydalanır. Ancak, Docker’ı yerel makinenizin ötesinde, uzak sunucular, sanal makineler veya bulut platformları üzerinde yönetmek, ilk bakışta karmaşık görünebilir. İşte tam bu noktada Docker Machine devreye girer.
Docker Machine, Docker Engine’i çeşitli sanallaştırma platformları ve bulut sağlayıcıları üzerinde otomatik olarak kurmak ve yönetmek için tasarlanmış bir araçtır. Bu makalede, Ubuntu 18.04 işletim sistemi üzerinde Docker Machine’i nasıl kuracağınızı, farklı ortamlarda (VirtualBox, DigitalOcean, AWS ve mevcut sunucular) uzak Docker hostlarını nasıl sağlayacağınızı ve bu hostları nasıl yöneteceğinizi adım adım ele alacağız. Amacımız, Docker Machine’in sunduğu kolaylığı ve esnekliği tam anlamıyla anlamanızı sağlayarak, konteynerleştirilmiş uygulamalarınızı daha verimli bir şekilde dağıtmanıza ve yönetmenize yardımcı olmaktır.
Ön Koşullar
Bu makaledeki adımları uygulayabilmek için aşağıdaki ön koşulların sağlanmış olması gerekmektedir:
* Ubuntu 18.04 İşletim Sistemi: Docker Machine’i kuracağınız ve komutları çalıştıracağınız yerel makinenizin Ubuntu 18.04 olması gerekmektedir.
* İnternet Bağlantısı: Kurulum ve uzak host sağlama işlemleri için aktif bir internet bağlantısı gereklidir.
* Sudo Yetkileri: Kurulum ve bazı yapılandırma adımları için sudo yetkilerine sahip bir kullanıcı hesabınız olmalıdır.
* Temel Linux Komut Bilgisi: Terminal kullanımı ve temel Linux komutları hakkında bilgi sahibi olmak faydalıdır.
* SSH İstemcisi: Uzak sunuculara bağlanmak için bir SSH istemcisi (genellikle Ubuntu’da varsayılan olarak yüklüdür) gereklidir.
* Bulut Sağlayıcı Hesabı (isteğe bağlı): DigitalOcean veya AWS gibi bir bulut sağlayıcısında hesap (ve ilgili API anahtarları/kimlik bilgileri) uzak hostları bulutta sağlamak için gerekecektir.
* VirtualBox (isteğe bağlı): Yerel testler için VirtualBox kullanmak isterseniz, sisteminize kurulu olması gerekir.
1. Docker Machine Kurulumu
Docker Machine’i Ubuntu 18.04 sisteminize kurmak oldukça basittir. Genellikle ikili dosyasını indirip çalıştırılabilir hale getirme adımlarını içerir.
1.1. Gerekli Bağımlılıkların Yüklenmesi
Kuruluma başlamadan önce sisteminizin güncel olduğundan ve curl gibi temel araçların yüklü olduğundan emin olalım:
sudo apt update
sudo apt upgrade -y
sudo apt install curl -y
1.2. Docker Machine İkili Dosyasının İndirilmesi
Docker Machine’in en son kararlı sürümünü GitHub üzerinden doğrudan indirebiliriz.
1. En Son Sürümü Belirleme: Docker Machine’in GitHub yayınlar sayfasını kontrol ederek en son sürümü bulabilirsiniz (örneğin, v0.16.2). Bu makale yazıldığı sırada v0.16.2 en son sürümdür, ancak siz kontrol etmelisiniz.
2. İkili Dosyayı İndirme:
Aşağıdaki komutla ikili dosyayı indirelim. {DOCKER_MACHINE_VERSION} kısmını bulduğunuz en son sürümle değiştirin.
curl -L https://github.com/docker/machine/releases/download/v0.16.2/docker-machine-$(uname -s)-$(uname -m) -o /tmp/docker-machine
Bu komut, sistem mimarinize uygun Docker Machine ikili dosyasını indirir ve /tmp/docker-machine olarak kaydeder.
3. Çalıştırılabilir Hale Getirme ve PATH’e Ekleme:
İndirdiğimiz dosyayı çalıştırılabilir yapalım ve sistem PATH’inde bulunan bir dizine taşıyalım ki her yerden erişebilelim:
sudo chmod +x /tmp/docker-machine
sudo mv /tmp/docker-machine /usr/local/bin/docker-machine
4. Kurulumu Doğrulama:
Kurulumun başarılı olup olmadığını kontrol etmek için sürüm bilgisini sorgulayalım:
docker-machine version
Çıktı olarak docker-machine version 0.16.2, build... gibi bir ifade görmelisiniz.
1.3. Docker Compose Kurulumu (İsteğe Bağlı ama Önerilir)
Docker Machine ile uzak hostlar üzerinde çok konteynerli uygulamaları yönetmek için Docker Compose kullanmak oldukça yaygındır. Docker Compose, Docker Machine’in doğrudan bir parçası olmasa da, iş akışınızda büyük kolaylık sağlar.
1. Docker Compose İkili Dosyasını İndirme:
En son Docker Compose sürümünü indirmek için aşağıdaki komutu kullanın. {DOCKER_COMPOSE_VERSION} kısmını Docker Compose’un GitHub yayınlar sayfasından bulduğunuz en son kararlı sürümle değiştirin (örneğin, v2.24.5).
curl -L https://github.com/docker/compose/releases/download/v2.24.5/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
2. Çalıştırılabilir Hale Getirme:
sudo chmod +x /usr/local/bin/docker-compose
3. Kurulumu Doğrulama:
docker-compose version
Çıktı olarak Docker Compose version v2.24.5 gibi bir ifade görmelisiniz.
Artık Docker Machine ve Docker Compose sisteminize kuruldu ve uzak Docker hostlarını sağlamaya hazırsınız.
2. Uzak Docker Hostlarının Sağlanması (Provisioning)
Docker Machine’in en güçlü özelliklerinden biri, farklı ortamlarda yeni Docker hostlarını kolayca sağlayabilmesidir. Bu hostlar, yerel sanal makinelerden (VirtualBox) bulut sağlayıcılarına (DigitalOcean, AWS) veya hatta mevcut uzak sunuculara kadar çeşitlilik gösterebilir.
2.1. Genel Bakış: Docker Machine Sürücüleri (Drivers)
Docker Machine, farklı platformlarla entegre olmak için “sürücüler” (drivers) kullanır. Her sürücü, belirli bir platformda Docker Engine’i kurmak ve yapılandırmak için gereken adımları otomatize eder. Bazı yaygın sürücüler şunlardır:
* virtualbox: Yerel VirtualBox sanal makineleri oluşturmak için.
* digitalocean: DigitalOcean Droplet’leri üzerinde Docker hostları oluşturmak için.
* amazonec2: AWS EC2 örnekleri üzerinde Docker hostları oluşturmak için.
* azure: Microsoft Azure üzerinde Docker hostları oluşturmak için.
* google: Google Cloud Platform üzerinde Docker hostları oluşturmak için.
* generic: Docker yüklü mevcut bir uzak sunucuyu yönetmek için.
Şimdi bu sürücüleri kullanarak farklı senaryolarda hostlar oluşturalım.
2.2. VirtualBox ile Yerel Bir Host Oluşturma (Test Amaçlı)
VirtualBox, yerel geliştirme ve test ortamları için harika bir seçenektir. Docker Machine ile VirtualBox üzerinde bir Docker hostu oluşturmak oldukça kolaydır.
1. VirtualBox Kurulumu:
Eğer VirtualBox sisteminizde kurulu değilse, aşağıdaki komutlarla kurabilirsiniz:
sudo apt install virtualbox -y
2. Docker Host Oluşturma:
docker-machine create komutunu --driver virtualbox ile kullanarak bir host oluşturalım:
docker-machine create --driver virtualbox dev-host
Bu komut, dev-host adında yeni bir VirtualBox VM oluşturacak, üzerine Docker’ı kuracak ve gerekli sertifikaları yapılandıracaktır. İşlem birkaç dakika sürebilir.
3. Host Durumunu Kontrol Etme:
Oluşturduğunuz host’un durumunu görmek için:
docker-machine ls
Çıktı şöyle bir şey olacaktır:
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
dev-host - virtualbox Running tcp://192.168.99.100:2376 v20.10.24
4. Docker Ortamını Ayarlama:
Yerel Docker CLI’nizin dev-host ile iletişim kurmasını sağlamak için ortam değişkenlerini ayarlamanız gerekir:
eval $(docker-machine env dev-host)
Bu komut, DOCKER_TLS_VERIFY, DOCKER_HOST, DOCKER_CERT_PATH ve DOCKER_MACHINE_NAME gibi değişkenleri ayarlar.
5. Docker Komutlarını Çalıştırma:
Artık yerel makinenizden Docker komutlarını sanki doğrudan dev-host üzerinde çalışıyormuş gibi kullanabilirsiniz:
docker run hello-world
docker ps -a
Çıktı, hello-world konteynerinin dev-host üzerinde başarıyla çalıştığını gösterecektir.
2.3. DigitalOcean Üzerinde Bir Host Oluşturma
DigitalOcean, bulut sunucuları (Droplet’ler) sağlamak için popüler ve kullanımı kolay bir platformdur.
1. DigitalOcean API Token Alma:
DigitalOcean hesabınıza giriş yapın. Ayarlarınıza gidin ve “API” sekmesinden yeni bir “Personal Access Token” oluşturun. Bu token’ı güvende tutun, çünkü sunucularınızı yönetmek için kullanılacaktır.
2. Docker Host Oluşturma:
Aşağıdaki komutu kullanarak bir DigitalOcean Droplet’i üzerinde Docker hostu oluşturalım. {YOUR_DIGITALOCEAN_TOKEN} kısmını kendi API token’ınızla değiştirin.
docker-machine create --driver digitalocean \
--digitalocean-access-token YOUR_DIGITALOCEAN_TOKEN \
--digitalocean-region fra1 \
--digitalocean-size s-1vcpu-1gb \
--digitalocean-image ubuntu-18-04-x64 \
do-host
* --digitalocean-region: Droplet’in oluşturulacağı bölge (örneğin, fra1 – Frankfurt).
* --digitalocean-size: Droplet’in boyutu (örneğin, s-1vcpu-1gb – 1 CPU, 1GB RAM).
* --digitalocean-image: Droplet için kullanılacak işletim sistemi görüntüsü (burada Ubuntu 18.04).
* do-host: Oluşturulacak Docker hostunun adı.
Bu işlem de birkaç dakika sürecektir.
3. Host Durumunu Kontrol Etme:
docker-machine ls
do-host adında yeni bir giriş görmelisiniz.
4. Ortamı Ayarlama ve Test Etme:
eval $(docker-machine env do-host)
docker run -p 80:80 --name webserver nginx
Artık DigitalOcean Droplet’inizde Nginx çalışıyor olmalı. Droplet’in IP adresini docker-machine ip do-host komutuyla alıp tarayıcınızdan kontrol edebilirsiniz.
2.4. AWS EC2 Üzerinde Bir Host Oluşturma
Amazon Web Services (AWS), en büyük bulut sağlayıcılarından biridir ve Docker Machine ile EC2 örnekleri üzerinde Docker hostları oluşturabilirsiniz.
1. AWS Kimlik Bilgileri ve Ayarları:
* IAM Kullanıcısı: AWS hesabınızda Docker Machine’in EC2 örnekleri oluşturabilmesi için gerekli izinlere sahip bir IAM kullanıcısı oluşturun. Bu kullanıcıya AmazonEC2FullAccess ve IAMFullAccess (anahtar çifti oluşturmak için) gibi yetkiler vermeniz gerekebilir.
* Erişim Anahtarları: IAM kullanıcısı için bir “Access Key ID” ve “Secret Access Key” oluşturun. Bu anahtarları güvende tutun.
* Güvenlik Grubu: EC2 örneği için, SSH (port 22) ve Docker daemon (port 2376) erişimine izin veren bir güvenlik grubu oluşturmanız gerekecektir. Kaynak IP’yi kendi IP’nizle sınırlamanız önerilir.
2. Docker Host Oluşturma:
Aşağıdaki komutu kullanarak bir AWS EC2 örneği üzerinde Docker hostu oluşturalım. {YOUR_AWS_ACCESS_KEY_ID}, {YOUR_AWS_SECRET_ACCESS_KEY} ve diğer yer tutucuları kendi bilgilerinizle değiştirin.
docker-machine create --driver amazonec2 \
--amazonec2-access-key YOUR_AWS_ACCESS_KEY_ID \
--amazonec2-secret-key YOUR_AWS_SECRET_ACCESS_KEY \
--amazonec2-region eu-central-1 \
--amazonec2-vpc-id vpc-0123456789abcdef0 \
--amazonec2-instance-type t2.micro \
--amazonec2-ami ami-07d0cf3af28718e71 \
--amazonec2-security-group sg-0abcdef0123456789 \
aws-host
* --amazonec2-region: EC2 örneğinin oluşturulacağı bölge (örneğin, eu-central-1 – Frankfurt).
* --amazonec2-vpc-id: EC2 örneğinin yerleştirileceği VPC kimliği.
* --amazonec2-instance-type: EC2 örneğinin tipi (örneğin, t2.micro).
* --amazonec2-ami: Kullanılacak AMI kimliği. Burada Ubuntu 18.04 LTS için geçerli bir AMI kullanılmıştır. Bölgenize göre farklılık gösterebilir, AWS konsolundan doğru AMI’yi bulmanız önemlidir.
* --amazonec2-security-group: Oluşturduğunuz güvenlik grubunun adı veya kimliği.
* aws-host: Oluşturulacak Docker hostunun adı.
Bu işlem de biraz zaman alacaktır.
3. Host Durumunu Kontrol Etme ve Test Etme:
docker-machine ls
eval $(docker-machine env aws-host)
docker run -d -p 80:80 --name myapache httpd
docker-machine ip aws-host komutuyla AWS örneğinizin genel IP adresini alıp tarayıcınızdan kontrol edebilirsiniz.
2.5. Mevcut Bir Uzak Sunucuyu Yönetmek (Generic Driver)
Zaten bir uzak sunucunuz varsa ve üzerinde Docker kuruluysa veya kurmak istiyorsanız, generic sürücüsü ile Docker Machine’e ekleyebilirsiniz.
1. Ön Koşul: Uzak Sunucuda Docker Kurulumu (Gerekliyse)
Eğer uzak sunucunuzda Docker kurulu değilse, SSH ile bağlanıp kurmanız gerekir. Ubuntu 18.04 için basit bir Docker kurulumu şu şekildedir:
# Uzak sunucuya SSH ile bağlanın
ssh @
# Docker kurulumu
sudo apt update
sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io -y
# Kullanıcınızı docker grubuna ekleyin (isteğe bağlı ama önerilir)
sudo usermod -aG docker $USER
# Çıkış yapıp tekrar giriş yapmanız gerekebilir
exit
2. Docker Machine ile Mevcut Hostu Ekleme:
generic sürücüsü ile mevcut sunucuyu Docker Machine’e ekleyelim. Uzak sunucunuza SSH erişimi için bir kullanıcı adı ve SSH anahtar yolu belirtmeniz gerekecektir.
docker-machine create --driver generic \
--generic-ip-address \
--generic-ssh-user \
--generic-ssh-key ~/.ssh/id_rsa \
generic-host
* --generic-ip-address: Uzak sunucunuzun IP adresi.
* --generic-ssh-user: Uzak sunucuya SSH ile bağlanmak için kullanılacak kullanıcı adı (örneğin, ubuntu veya root).
* --generic-ssh-key: SSH anahtarınızın yolu (genellikle ~/.ssh/id_rsa).
* generic-host: Bu host için Docker Machine’de kullanılacak ad.
Docker Machine, bu sunucuya SSH ile bağlanacak, Docker Engine’i yapılandıracak ve TLS sertifikalarını kuracaktır. Eğer Docker zaten kuruluysa, bu adımları atlayacaktır.
3. Host Durumunu Kontrol Etme ve Test Etme:
docker-machine ls
eval $(docker-machine env generic-host)
docker ps
Artık mevcut uzak sunucunuzu Docker Machine üzerinden yönetebilirsiniz.
3. Uzak Docker Hostlarını Yönetme
Docker Machine, hostları sağladıktan sonra onları yönetmek için de bir dizi komut sunar. Bu komutlar, hostların durumunu kontrol etmekten, onları başlatıp durdurmaya, hatta üzerlerindeki Docker Engine’i yükseltmeye kadar geniş bir yelpazeyi kapsar.
3.1. Host Durumunu Görüntüleme
Tüm yönetilen Docker hostlarınızın listesini ve durumunu görmek için ls komutunu kullanabilirsiniz:
docker-machine ls
Bu komut, her host için adını, etkin olup olmadığını, sürücüsünü, durumunu (Running, Stopped vb.), URL’sini ve Docker sürümünü gösterir.
Belirli bir host’un detaylı bilgilerini almak için inspect komutunu kullanabilirsiniz:
docker-machine inspect
Bu komut, host hakkında IP adresi, sürücü bilgileri, sertifika yolları gibi ayrıntılı JSON çıktısı sağlar.
3.2. Docker Ortamını Ayarlama
Yerel Docker CLI’nizin belirli bir uzak Docker hostu ile etkileşime girmesi için ortam değişkenlerini ayarlamanız gerekir. Bu, docker-machine env komutuyla yapılır:
eval $(docker-machine env )
Bu komutu çalıştırdıktan sonra, docker komutları otomatik olarak belirtilen uzak host üzerinde çalışacaktır. Hangi host’un etkin olduğunu doğrulamak için docker-machine active komutunu kullanabilirsiniz:
docker-machine active
Veya docker-machine env çıktısını inceleyerek DOCKER_HOST değişkeninin doğru IP adresini gösterip göstermediğini kontrol edebilirsiniz.
Uzak host ile işiniz bittiğinde veya yerel Docker daemon’a geri dönmek istediğinizde, ortam değişkenlerini sıfırlayabilirsiniz:
eval $(docker-machine env -u)
3.3. SSH ile Host’a Bağlanma
Docker Machine, yönettiği hostlara doğrudan SSH bağlantısı kurmanızı sağlar:
docker-machine ssh
Bu komut, host’a SSH ile bağlanır ve size bir terminal oturumu açar. Bu sayede host üzerinde manuel olarak işlemler yapabilir, logları kontrol edebilir veya ek yazılımlar kurabilirsiniz.
3.4. Host’u Başlatma, Durdurma ve Yeniden Başlatma
Docker hostlarınızı tıpkı yerel bir sanal makine gibi başlatabilir, durdurabilir ve yeniden başlatabilirsiniz:
docker-machine start # Host'u başlatır
docker-machine stop # Host'u durdurur
docker-machine restart # Host'u yeniden başlatır
Bu komutlar, özellikle bulut sağlayıcılarındaki örneklerin maliyetini yönetmek veya bakım işlemleri yapmak için kullanışlıdır. Örneğin, kullanmadığınız bir host’u durdurarak bulut maliyetlerinden tasarruf edebilirsiniz.
3.5. Host’u Yükseltme (Upgrade)
Docker Machine, bir host üzerindeki Docker Engine sürümünü yükseltmenize olanak tanır:
docker-machine upgrade
Bu komut, Docker Engine’i host üzerinde en son kararlı sürüme günceller. Bu, güvenlik yamaları ve yeni özelliklerden faydalanmak için önemlidir.
3.6. Host’u Silme
Bir Docker hostuna artık ihtiyacınız kalmadığında, rm komutuyla silebilirsiniz:
docker-machine rm
Bu komut, host’u Docker Machine’den kaldırır ve aynı zamanda ilişkili sanal makineyi veya bulut örneğini (VirtualBox VM, DigitalOcean Droplet, AWS EC2 örneği vb.) de siler. Bu işlem geri alınamaz ve host üzerindeki tüm veriler kaybolur. Bu nedenle, bu komutu kullanmadan önce dikkatli olun ve önemli verileri yedeklediğinizden emin olun.
Birden fazla hostu aynı anda silmek için:
docker-machine rm host1 host2 host3
4. Docker Machine ile Çalışma Akışı ve En İyi Uygulamalar
Docker Machine, basit bir araç olmasına rağmen, doğru kullanıldığında geliştirme ve operasyonel süreçlerinizi önemli ölçüde hızlandırabilir. İşte Docker Machine ile çalışma akışınızı optimize etmek ve en iyi uygulamaları takip etmek için bazı ipuçları.
4.1. Ortam Değişkenlerini Yönetme
Farklı Docker hostları arasında sıkça geçiş yapıyorsanız, eval $(docker-machine env komutunu sürekli çalıştırmak yorucu olabilir. Bunun yerine, bu komutları shell profilinize (örneğin, ~/.bashrc veya ~/.zshrc) ekleyebilir veya kısa fonksiyonlar tanımlayabilirsiniz:
# .bashrc veya .zshrc dosyanıza ekleyin
function dm-use() {
if [ -z "$1" ]; then
echo "Kullanım: dm-use "
docker-machine ls
else
eval $(docker-machine env "$1")
echo "Şu anki aktif host: $(docker-machine active)"
fi
}
function dm-local() {
eval $(docker-machine env -u)
echo "Yerel Docker daemon'a geçildi."
}
Bu fonksiyonları tanımladıktan sonra, dm-use dev-host ile dev-host‘a geçebilir, dm-use do-host ile DigitalOcean host’una geçebilir ve dm-local ile yerel Docker daemon’a geri dönebilirsiniz.
4.2. Güvenlik Hususları
Docker Machine, varsayılan olarak TLS (Transport Layer Security) kullanarak istemci ile uzak Docker daemon arasındaki iletişimi şifreler. Ancak, yine de bazı güvenlik hususlarına dikkat etmek önemlidir:
* SSH Anahtarları: Docker Machine, hostlara SSH ile bağlanmak için anahtar çiftleri kullanır. Bu anahtarları güvende tutun ve asla paylaşmayın. ~/.ssh dizininizin izinlerinin doğru ayarlandığından emin olun (chmod 600 ~/.ssh/id_rsa).
* API Token’ları/Anahtarları: DigitalOcean, AWS gibi bulut sağlayıcıları için kullanılan API token’ları ve erişim anahtarları son derece hassas bilgilerdir. Bunları doğrudan komut satırında açıkça belirtmek yerine, ortam değişkenleri olarak ayarlamak (export DIGITALOCEAN_ACCESS_TOKEN=") veya Docker Machine’in kendi ortam değişkenlerini kullanmak (--digitalocean-access-token $DIGITALOCEAN_ACCESS_TOKEN) daha güvenlidir.
* Güvenlik Grupları/Firewall: Bulut sağlayıcılarında host oluştururken, Docker daemon portu (2376) ve SSH portu (22) için güvenlik grubu/firewall kurallarını mümkün olduğunca kısıtlayın. Yalnızca belirli IP adreslerinden erişime izin verin.
* Root Erişimini Kısıtlama: Mümkünse, uzak hostlarda root yerine sudo yetkilerine sahip standart bir kullanıcı hesabı kullanın.
4.3. Docker Compose ile Entegrasyon
Docker Machine, Docker Compose ile sorunsuz bir şekilde entegre olur. Bir host’a eval $(docker-machine env komutuyla bağlandıktan sonra, docker-compose komutlarını normalde yaptığınız gibi çalıştırabilirsiniz.
Örneğin, docker-compose.yml dosyanızın olduğu bir dizinde:
eval $(docker-machine env do-host) # DigitalOcean host'una bağlan
docker-compose up -d # Uygulamayı DigitalOcean host'unda başlat
docker-compose ps # Çalışan servisleri kontrol et
docker-compose down # Uygulamayı durdur ve konteynerleri kaldır
Bu, karmaşık çok konteynerli uygulamaları uzak sunuculara kolayca dağıtmanızı sağlar.
4.4. Otomasyon ve Scripting
Docker Machine komutları, shell script’leri içinde otomasyon için idealdir. Örneğin, bir geliştirme ortamı için birden fazla hostu otomatik olarak oluşturabilir, yapılandırabilir ve dağıtım yapabilirsiniz.
Basit bir örnek:
#!/bin/bash
Geliştirme hostu oluştur
docker-machine create --driver virtualbox dev-host
Test hostu oluştur (DigitalOcean)
export DIGITALOCEAN_ACCESS_TOKEN="YOUR_TOKEN"
docker-machine create --driver digitalocean --digitalocean-access-token $DIGITALOCEAN_ACCESS_TOKEN test-host
Dev host'a bağlan ve uygulama dağıt
eval $(docker-machine env dev-host)
docker-compose up -d
Test host'a bağlan ve başka bir uygulama dağıt
eval $(docker-machine env test-host)
... test uygulamasını dağıt ...
Tüm hostları listele
docker-machine ls
Bu tür script’ler, CI/CD boru hatlarında veya takım üyeleri için standartlaştırılmış geliştirme ortamları kurmakta kullanılabilir.
5. Sorun Giderme
Docker Machine kullanırken karşılaşabileceğiniz bazı yaygın sorunlar ve çözüm önerileri:
* Error with pre-create check: "This computer doesn't have VT-X/AMD-v enabled..." (VirtualBox):
Bu hata, sanallaştırma teknolojisinin BIOS/UEFI ayarlarınızda etkinleştirilmediğini gösterir. Bilgisayarınızın BIOS/UEFI ayarlarına girerek “Intel VT-x” veya “AMD-V” özelliğini etkinleştirmeniz gerekir.
* Error creating machine: Error in driver during machine creation: Error getting IP address: (Bulut sağlayıcıları):
Bu genellikle bir ağ veya güvenlik grubu sorunudur.
* Bulut sağlayıcınızda SSH (port 22) ve Docker daemon (port 2376) portlarının gelen bağlantılara açık olduğundan emin olun.
* API anahtarınızın/token’ınızın doğru ve geçerli olduğundan emin olun.
* Belirtilen bölge, görüntü veya boyutun geçerli olduğundan emin olun.
* Error running connection: ssh: handshake failed: ssh: unable to authenticate, attempted methods [publickey] (Generic Driver):
* Uzak sunucudaki SSH kullanıcısının ve SSH anahtarının doğru olduğundan emin olun.
* SSH anahtarınızın doğru izinlere sahip olduğundan (chmod 600 ~/.ssh/id_rsa) ve parola korumalıysa doğru parolayı girdiğinizden emin olun.
* Uzak sunucuda SSH servisi çalışıyor mu kontrol edin.
* Cannot connect to the Docker daemon at tcp://X.X.X.X:2376. Is the docker daemon running?:
Bu hata, eval $(docker-machine env komutunu çalıştırmadığınızda veya Docker daemon’un uzak host üzerinde çalışmadığında ortaya çıkabilir.
* Öncelikle eval $(docker-machine env komutunu çalıştırdığınızdan emin olun.
* docker-machine ssh ile host’a bağlanın ve sudo systemctl status docker komutuyla Docker servisinin durumunu kontrol edin. Gerekirse sudo systemctl start docker ile başlatın.
* TLS Sertifika Hataları:
Bazen sertifikalarla ilgili sorunlar yaşanabilir (örneğin, sertifikaların süresi dolmuşsa veya bozulmuşsa).
* docker-machine regenerate-certs komutuyla sertifikaları yeniden oluşturmayı deneyin.
* docker-machine debug Kullanımı:
Daha karmaşık sorunlar için docker-machine debug komutunu kullanabilirsiniz. Bu komut, hata ayıklama çıktısını etkinleştirir ve sorun gidermeye yardımcı olabilecek daha fazla bilgi sağlar.
docker-machine -D create --driver virtualbox debug-host
Bu, komutun her adımını ve olası hata mesajlarını detaylı olarak gösterecektir.
Sonuç
Bu makalede, Ubuntu 18.04 üzerinde Docker Machine’in nasıl kurulacağını ve uzak Docker hostlarının farklı platformlarda nasıl sağlanıp yönetileceğini ayrıntılı olarak inceledik. Docker Machine’in, yerel VirtualBox ortamlarından DigitalOcean ve AWS gibi bulut sağlayıcılarına kadar çeşitli altyapılarda Docker Engine’i hızlı ve tutarlı bir şekilde dağıtma yeteneğini gördük. Ayrıca, mevcut uzak sunucuları yönetmek için generic sürücüsünün nasıl kullanılacağını da ele aldık.
Docker Machine, özellikle çoklu ortam geliştirme, test ve dağıtım senaryolarında, Docker hostlarını manuel olarak kurma ve yapılandırma zahmetini ortadan kaldırarak önemli bir zaman tasarrufu sağlar. Ortam değişkenlerini yönetme, güvenlik hususları ve Docker Compose ile entegrasyon gibi en iyi uygulamalar, Docker Machine’in potansiyelini tam olarak kullanmanıza yardımcı olacaktır.
Docker Machine, Docker ekosisteminde önemli bir rol oynamış olsa da, Docker Inc. tarafından 2020’den itibaren “bakım moduna” alınmıştır. Bu, yeni özelliklerin eklenmeyeceği ve yalnızca kritik güvenlik yamalarının sağlanacağı anlamına gelir. Gelecekteki projeleriniz için, Docker’ın daha yeni versiyonlarında yer alan docker context gibi yerleşik özelliklere veya Kubernetes gibi konteyner orkestrasyon araçlarına yönelmek daha uygun olabilir. Ancak, mevcut sistemleri yönetmek veya daha basit uzaktan Docker hostu sağlama ihtiyaçları için Docker Machine hala son derece kullanışlı ve güvenilir bir araç olmaya devam etmektedir.
Docker Machine ile edindiğiniz bu bilgiler, konteynerleştirilmiş uygulamalarınızı daha esnek ve verimli bir şekilde yönetme yolculuğunuzda size değerli bir temel sağlayacaktır.