Uzak Docker Hostlarını Docker Machine ile CentOS 7 Üzerinde Sağlama ve Yönetme
Giriş
Günümüzün hızla değişen yazılım geliştirme ve dağıtım dünyasında, konteyner teknolojileri, özellikle Docker, uygulamaların taşınabilirliğini, ölçeklenebilirliğini ve izole bir şekilde çalışmasını sağlayarak devrim yaratmıştır. Ancak, Docker konteynerlerini çalıştırmak için kullanılan fiziksel veya sanal sunucuların (Docker hostları) yönetimi, özellikle birden fazla ortamda (geliştirme, test, üretim) ve farklı altyapı sağlayıcılarında (yerel sanallaştırma, bulut sağlayıcıları, şirket içi sunucular) dağıtık bir yapıya sahip olduğunda karmaşık bir hal alabilir. İşte tam da bu noktada Docker Machine devreye girer.
Docker Machine, Docker’ın resmi bir aracı olup, çeşitli altyapılar üzerinde Docker hostları oluşturmayı, yapılandırmayı ve yönetmeyi otomatikleştiren bir komut satırı arayüzüdür (CLI). Bu makale, Docker Machine’i kullanarak CentOS 7 işletim sistemi üzerinde çalışan uzak Docker hostlarını nasıl sağlayacağınızı ve yöneteceğinizi ayrıntılı bir şekilde ele alacaktır. CentOS 7, kurumsal ortamlarda yaygın olarak kullanılan stabil ve güvenli bir dağıtım olduğu için bu senaryo oldukça pratiktir. Makale boyunca, yerel makinenizden uzak CentOS 7 sunucularında Docker ortamlarını nasıl kuracağınızı, yöneteceğinizi ve sorun gidereceğinizi adım adım öğreneceksiniz.
Docker Machine Nedir?
Docker Machine, Docker Engine’i çeşitli sanal makineler (VM’ler) üzerinde kurmak için kullanılan bir araçtır. Bu VM’ler yerel bilgisayarınızda (VirtualBox gibi), bir bulut sağlayıcısında (AWS, Azure, DigitalOcean, Google Cloud) veya şirket içi bir veri merkezinde olabilir. Docker Machine’in temel amacı, Docker hostlarını tek bir CLI arayüzünden kolayca oluşturup yöneterek Docker ortamlarının karmaşıklığını azaltmaktır.
Docker Machine, “sürücüler” (drivers) adı verilen eklentiler aracılığıyla farklı altyapı sağlayıcılarıyla iletişim kurar. Her sürücü, belirli bir sanallaştırma veya bulut platformuyla etkileşim kurmak için gerekli mantığı içerir. Örneğin, virtualbox sürücüsü yerel VirtualBox VM’lerini yönetirken, digitalocean sürücüsü DigitalOcean droplet’larını yönetir. generic sürücüsü ise zaten mevcut olan herhangi bir sunucuya (SSH erişimi olan) bağlanarak Docker’ı kurup yapılandırmanızı sağlar.
Docker Machine, bir host oluşturduğunda, o host üzerine otomatik olarak Docker Engine’i kurar, gerekli TLS sertifikalarını oluşturur ve bunları yerel makinenize kopyalar. Bu sertifikalar, yerel Docker CLI’nızın uzak host ile güvenli bir şekilde iletişim kurmasını sağlar. Böylece, docker komutlarını yerel makinenizden çalıştırdığınızda, aslında uzak bir Docker hostundaki Docker daemon’ı ile etkileşim kurmuş olursunuz.
Docker Machine’in Avantajları
* Basitlik: Karmaşık kurulum ve yapılandırma adımlarını otomatikleştirir.
* Çoklu Ortam Desteği: Farklı bulut sağlayıcıları ve sanallaştırma platformları üzerinde aynı komutlarla çalışır.
* Tekil Yönetim: Tüm Docker hostlarınızı tek bir merkezden yönetmenizi sağlar.
* Güvenlik: TLS tabanlı güvenli iletişim sağlar.
* Hız: Yeni bir Docker ortamını saniyeler veya dakikalar içinde hazır hale getirir.
Ön Gereksinimler
Docker Machine ile uzak hostları yönetmeye başlamadan önce, hem yerel makinenizde hem de hedef uzak hostlarda belirli ön gereksinimlerin karşılandığından emin olmanız gerekir.
Yerel Makine İçin
Yerel makineniz, Docker Machine komutlarını çalıştıracağınız ve uzak Docker hostlarını yöneteceğiniz makinedir.
* İşletim Sistemi: Linux (CentOS, Ubuntu vb.), macOS veya Windows. Bu makalede Linux (genellikle bir iş istasyonu) kullanıldığı varsayılmaktadır.
* Docker Engine ve Docker Compose: Docker Machine’i kurmak ve kullanmak için doğrudan gerekli olmasa da, Docker komutlarını çalıştırmak ve Docker Compose dosyalarıyla çalışmak için yerel Docker CLI’sına ve Docker Compose’a sahip olmanız önerilir.
* Docker Machine Kurulumu: Docker Machine’in kendisi yerel makinenize kurulmalıdır.
* SSH İstemcisi: Uzak hostlara bağlanmak için ssh komutunun yerel makinenizde yüklü olması gerekir. Bu genellikle Linux ve macOS sistemlerinde varsayılan olarak bulunur. Windows’ta Git Bash veya WSL (Windows Subsystem for Linux) aracılığıyla edinilebilir.
* API Erişim Bilgileri (Bulut Sağlayıcıları İçin): Eğer bir bulut sağlayıcısı (örneğin DigitalOcean, AWS) üzerinde host oluşturacaksanız, o sağlayıcının API anahtarına veya kimlik bilgilerine ihtiyacınız olacaktır. Bu bilgiler genellikle ortam değişkenleri olarak veya komut satırı parametreleri aracılığıyla sağlanır.
Uzak Hostlar İçin (Generic Sürücü Kullanılırsa)
Eğer Docker Machine’in generic sürücüsünü kullanarak zaten mevcut olan bir CentOS 7 sunucusuna Docker kuracaksanız, bu sunucunun aşağıdaki gereksinimleri karşılaması gerekir:
* İşletim Sistemi: CentOS 7 (veya desteklenen diğer Linux dağıtımları).
* SSH Erişimi: Uzak sunucuya SSH üzerinden erişiminizin olması gerekir. Bu genellikle bir kullanıcı adı (örneğin root veya centos) ve bir SSH anahtarı veya parola ile sağlanır.
* Sudo Yetkileri: SSH ile bağlandığınız kullanıcının sudo yetkisine sahip olması gerekir, çünkü Docker Machine Docker’ı kurmak ve yapılandırmak için root yetkileri gerektiren işlemler yapacaktır.
* Güvenlik Duvarı Ayarları: Eğer sunucunuzda bir güvenlik duvarı (firewall, örneğin firewalld veya iptables) çalışıyorsa, Docker’ın varsayılan portu olan 2376 (TLS ile) ve uygulama konteynerlerinizin kullanacağı portların dışarıdan erişilebilir olduğundan emin olmanız gerekebilir. CentOS 7’de firewalld yaygın olarak kullanılır.
Docker Machine Kurulumu
Docker Machine’i yerel Linux makinenize kurmak oldukça basittir. Genellikle, Docker’ın resmi GitHub deposundan uygun binary dosyayı indirip PATH’inize eklemek yeterlidir.
Linux (Yerel Makine) Üzerine Kurulum
Aşağıdaki adımlar, Docker Machine’i yerel Linux makinenize kurmak için genel bir kılavuzdur.
1. En Son Sürümü Belirleyin: Docker Machine’in en son kararlı sürümünü öğrenmek için Docker Machine GitHub Releases sayfasına gidin. Örneğin, bu makale yazılırken v0.16.2 en son sürüm olabilir.
2. Binary Dosyayı İndirin: curl kullanarak uygun binary dosyayı indirin. x86_64 mimarisi için:
base=https://github.com/docker/machine/releases/download/v0.16.2 && \
curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine && \
sudo mv /tmp/docker-machine /usr/local/bin/docker-machine
* $(uname -s) komutu işletim sisteminizin adını (örn. Linux) döndürür.
* $(uname -m) komutu makinenizin donanım mimarisini (örn. x86_64) döndürür.
3. Çalıştırılabilir İzinleri Verin: İndirdiğiniz dosyaya çalıştırma izni verin:
sudo chmod +x /usr/local/bin/docker-machine
4. Kurulumu Doğrulayın: Kurulumun başarılı olup olmadığını kontrol etmek için sürüm bilgisini sorgulayın:
docker-machine version
Çıktı olarak docker-machine version 0.16.2, build 40f4f61 veya benzeri bir sonuç almalısınız.
Gerekli Sürücülerin Kurulumu (Opsiyonel)
Docker Machine, çeşitli sürücülerle birlikte gelir. Ancak, bazı sürücüler (örneğin VirtualBox sürücüsü için VirtualBox yazılımının kendisi) ayrıca kurulmalıdır.
* VirtualBox Sürücüsü İçin: Eğer yerel makinenizde sanal hostlar oluşturmak için VirtualBox sürücüsünü kullanacaksanız, öncelikle VirtualBox’ı sisteminize kurmanız gerekir. VirtualBox’ın resmi web sitesinden veya dağıtımınızın paket yöneticisinden kurulum yapabilirsiniz.
# CentOS/RHEL üzerinde VirtualBox kurulumu (yerel makine için)
# Genellikle bu adım yerel makine bir Linux iş istasyonu ise yapılır.
# Bu adımlar uzak CentOS 7 hostu için DEĞİLDİR.
sudo yum install epel-release
sudo yum config-manager --add-repo https://download.virtualbox.org/virtualbox/rpm/rhel/virtualbox.repo
sudo yum install VirtualBox-6.1 # Sürüm numarasını güncelleyin
* Bulut Sağlayıcı Sürücüleri İçin: Bulut sağlayıcı sürücüleri (örn. DigitalOcean, AWS EC2), genellikle ek bir kurulum gerektirmez. Ancak, ilgili sağlayıcının API anahtarlarını veya kimlik bilgilerini edinmeniz ve bunları docker-machine create komutunda veya ortam değişkenleri olarak sağlamanız gerekir.
Uzak Docker Hostu Sağlama (Provisioning)
Docker Machine’in en güçlü özelliklerinden biri, farklı altyapılar üzerinde Docker hostları sağlamasıdır. Bu bölümde, CentOS 7 üzerinde bir Docker hostunu nasıl sağlayacağınızı çeşitli senaryolarla inceleyeceğiz.
Genel Komut Yapısı
docker-machine create komutu, yeni bir Docker hostu oluşturmak için kullanılır. Temel yapısı şöyledir:
docker-machine create --driver [sürücüye_özel_parametreler]
Farklı Sürücülerle Sağlama Örnekleri
Generic Sürücü ile Mevcut CentOS 7 Sunucusuna Bağlanma
Bu senaryo, zaten çalışan bir CentOS 7 sunucunuz olduğunda ve Docker Machine’in bu sunucuya bağlanarak Docker’ı kurmasını ve yönetmesini istediğinizde idealdir. Bu, “bare-metal” sunucular veya manuel olarak kurulmuş VM’ler için geçerlidir.
1. Ön Gereksinimler (Uzak CentOS 7 Sunucusu):
* Sunucunun IP adresi (örneğin 192.168.1.100).
* SSH erişimi olan bir kullanıcı adı (örneğin centos veya root).
* Bu kullanıcının sudo yetkisi olmalı.
* SSH anahtarınızın uzak sunucuda yetkilendirilmiş olması önerilir (parola ile de çalışır ancak anahtar daha güvenlidir).
2. docker-machine create Komutu:
docker-machine create \
--driver generic \
--generic-ip-address 192.168.1.100 \
--generic-ssh-user centos \
--generic-ssh-key ~/.ssh/id_rsa \
--generic-ssh-port 22 \
--generic-sudo-flag \
centos7-remote-host
* --driver generic: Generic sürücüsünü kullanacağımızı belirtir.
* --generic-ip-address: Uzak CentOS 7 sunucusunun IP adresini belirtir.
* --generic-ssh-user: SSH bağlantısı için kullanılacak kullanıcı adını belirtir.
* --generic-ssh-key: SSH anahtar dosyasının yolunu belirtir. Eğer parola ile bağlanacaksanız bu parametreyi atlayabilir ve Docker Machine sizden parolayı isteyecektir.
* --generic-ssh-port: SSH portunu belirtir (varsayılan 22’dir).
* --generic-sudo-flag: Docker Machine’in root yetkileri gerektiren komutları sudo ile çalıştırmasını sağlar. Bu çok önemlidir.
* centos7-remote-host: Oluşturulacak Docker hostunun adıdır.
3. Komutun Çalışması: Bu komut çalıştırıldığında, Docker Machine şunları yapacaktır:
* Belirtilen IP adresine ve kullanıcıya SSH ile bağlanmaya çalışır.
* Bağlantı başarılı olursa, CentOS 7 sunucusunda Docker Engine’i kurar.
* Docker daemon’ı için gerekli TLS sertifikalarını oluşturur.
* Bu sertifikaları yerel makinenize (genellikle ~/.docker/machine/machines/centos7-remote-host dizinine) kopyalar.
* Docker daemon’ını başlatır ve güvenli uzaktan erişim için yapılandırır.
Cloud Sağlayıcıları ile Sağlama (Örnek: DigitalOcean)
Eğer bir bulut sağlayıcısı üzerinde yeni bir CentOS 7 VM oluşturup Docker’ı kurmak isterseniz, ilgili sağlayıcının sürücüsünü kullanırsınız. Burada DigitalOcean örneğini ele alalım.
1. DigitalOcean API Token Alma: DigitalOcean hesabınıza giriş yapın, “API” bölümüne gidin ve yeni bir “Personal Access Token” oluşturun. Bu token’ı güvende tutun.
2. API Token’ı Ortam Değişkeni Olarak Ayarlama:
export DIGITALOCEAN_ACCESS_TOKEN="sizin_digitalocean_api_token_buraya"
Bu token’ı her komut çalıştırmadan önce ayarlamanız veya shell profilinize eklemeniz gerekebilir.
3. docker-machine create Komutu:
docker-machine create \
--driver digitalocean \
--digitalocean-image centos-7-x64 \
--digitalocean-region fra1 \
--digitalocean-size s-1vcpu-1gb \
--digitalocean-ssh-key-path ~/.ssh/id_rsa.pub \
do-centos7-host
* --driver digitalocean: DigitalOcean sürücüsünü kullanacağımızı belirtir.
* --digitalocean-image centos-7-x64: CentOS 7 işletim sistemi görüntüsünü seçer.
* --digitalocean-region fra1: Droplet’ın oluşturulacağı bölgeyi belirtir (örneğin Frankfurt 1).
* --digitalocean-size s-1vcpu-1gb: Droplet’ın boyutunu belirtir (1 CPU, 1GB RAM).
* --digitalocean-ssh-key-path ~/.ssh/id_rsa.pub: SSH anahtarınızın genel kısmını DigitalOcean droplet’ına ekler, böylece SSH ile bağlanabilirsiniz.
* do-centos7-host: Oluşturulacak Docker hostunun adıdır.
Bu komut, DigitalOcean üzerinde yeni bir CentOS 7 droplet oluşturacak, Docker Engine’i kuracak ve gerekli yapılandırmaları yapacaktır.
Yerel Sanallaştırma ile Sağlama (Örnek: VirtualBox)
Geliştirme veya test ortamları için yerel makinenizde bir CentOS 7 VM üzerinde Docker hostu oluşturmak isterseniz, VirtualBox sürücüsünü kullanabilirsiniz.
1. VirtualBox Kurulumu: Yerel makinenizde VirtualBox’ın kurulu olduğundan emin olun.
2. docker-machine create Komutu:
docker-machine create \
--driver virtualbox \
--virtualbox-memory 2048 \
--virtualbox-cpu-count 2 \
vb-centos7-host
* --driver virtualbox: VirtualBox sürücüsünü kullanacağımızı belirtir.
* --virtualbox-memory 2048: VM’e 2048 MB (2 GB) RAM ayırır.
* --virtualbox-cpu-count 2: VM’e 2 CPU çekirdeği ayırır.
* vb-centos7-host: Oluşturulacak Docker hostunun adıdır.
Bu komut, VirtualBox üzerinde yeni bir VM oluşturacak, CentOS (genellikle Boot2Docker veya Tiny Core Linux tabanlı bir minimalist OS) kuracak ve Docker Engine’i yapılandıracaktır. CentOS 7 imajını doğrudan VirtualBox sürücüsü ile belirtmek daha karmaşıktır ve genellikle bu sürücü Boot2Docker gibi hafif bir OS ile gelir. Eğer özellikle CentOS 7 istiyorsanız, generic sürücüsünü kullanıp önceden kurulmuş bir CentOS 7 VM’e bağlanmanız daha uygun olacaktır.
Sağlama Sonrası Kontroller
Bir Docker hostu oluşturduktan sonra, durumunu kontrol etmek önemlidir.
* Tüm Docker Hostlarını Listeleme:
docker-machine ls
Bu komut, tüm kayıtlı Docker hostlarını, IP adreslerini, sürücülerini ve durumlarını gösterir.
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
centos7-remote-host * generic Running tcp://192.168.1.100:2376 v19.03.13
do-centos7-host - digitalocean Running tcp://159.89.200.100:2376 v19.03.13
vb-centos7-host - virtualbox Running tcp://192.168.99.100:2376 v19.03.13
* Belirli Bir Hostun Durumunu Kontrol Etme:
docker-machine status centos7-remote-host
Çıktı: Running
* Bir Hostun IP Adresini Öğrenme:
docker-machine ip centos7-remote-host
Çıktı: 192.168.1.100
Uzak Docker Hostlarını Yönetme
Docker Machine ile bir veya daha fazla Docker hostu sağladıktan sonra, yerel Docker CLI’nızı kullanarak bu hostları yönetebilirsiniz.
Ortam Değişkenlerini Ayarlama
Yerel Docker CLI’nızın hangi Docker daemon’ı ile konuşacağını belirtmek için ortam değişkenlerini ayarlamanız gerekir. Docker Machine bunu sizin için kolaylaştırır:
1. Ortam Değişkenlerini Yükleme:
eval $(docker-machine env centos7-remote-host)
Bu komut, centos7-remote-host adlı makine için gerekli DOCKER_TLS_VERIFY, DOCKER_HOST, DOCKER_CERT_PATH ve DOCKER_MACHINE_NAME ortam değişkenlerini mevcut shell oturumunuza yükler.
2. Değişkenleri Kontrol Etme (Opsiyonel):
env | grep DOCKER
Çıktı:
DOCKER_TLS_VERIFY=1
DOCKER_HOST=tcp://192.168.1.100:2376
DOCKER_CERT_PATH=/home/kullanici/.docker/machine/machines/centos7-remote-host
DOCKER_MACHINE_NAME=centos7-remote-host
Artık yerel makinenizdeki docker komutları, centos7-remote-host üzerindeki Docker daemon’ı ile etkileşim kuracaktır.
3. Varsayılan Ortama Geri Dönme:
eval $(docker-machine env -u)
Bu komut, Docker ortam değişkenlerini temizler ve yerel Docker daemon’ınıza geri dönmenizi sağlar (eğer yerelde bir daemon çalışıyorsa).
Docker Komutlarını Çalıştırma
Ortam değişkenlerini ayarladıktan sonra, herhangi bir standart Docker komutunu sanki yerel makinenizde çalışıyormuş gibi kullanabilirsiniz. Ancak bu komutlar aslında uzak CentOS 7 hostunuzda işlenecektir.
* Çalışan Konteynerleri Listeleme:
docker ps
(Uzak hostta çalışan konteynerler listelenecektir.)
* Docker İmajlarını Listeleme:
docker images
(Uzak hostta bulunan imajlar listelenecektir.)
* Bir Konteyner Çalıştırma:
docker run -d -p 80:80 --name mynginx nginx:latest
Bu komut, mynginx adında bir Nginx konteynerini uzak CentOS 7 hostunda başlatacak ve 80. portu dışarıya açacaktır. Daha sonra docker-machine ip centos7-remote-host komutuyla aldığınız IP adresini tarayıcınızda kullanarak Nginx sunucusuna erişebilirsiniz.
* Docker Compose ile Uygulama Dağıtımı:
Öncelikle, docker-compose.yml dosyanızı yerel makinenizde oluşturun:
# docker-compose.yml
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
app:
image: myapp:latest # Kendi uygulamanızın imajı
ports:
- "5000:5000"
Ardından, ortam değişkenlerini uzak host için ayarlayın ve Docker Compose komutunu çalıştırın:
eval $(docker-machine env centos7-remote-host)
docker-compose up -d
Bu komutlar, docker-compose.yml dosyanızda tanımlanan servisleri uzak CentOS 7 hostunda başlatacaktır.
SSH ile Uzak Host’a Bağlanma
Bazen doğrudan uzak hosta SSH ile bağlanmanız gerekebilir (örneğin logları kontrol etmek, dosya sistemi üzerinde işlem yapmak). Docker Machine, bu işlemi de basitleştirir:
docker-machine ssh centos7-remote-host
Bu komut, centos7-remote-host adlı makineye SSH ile bağlanır. Bağlantı kesildiğinde veya exit yazdığınızda yerel makinenize dönersiniz.
Host Durumunu Kontrol Etme
Bir host hakkında daha fazla bilgi almak için inspect komutunu kullanabilirsiniz:
docker-machine inspect centos7-remote-host
Bu komut, hostun tüm yapılandırma detaylarını (IP adresi, sürücü ayarları, sertifika yolları, Docker Engine sürümü vb.) JSON formatında gösterir.
Hostları Durdurma, Başlatma ve Yeniden Başlatma
Docker hostlarını enerji tasarrufu veya bakım için durdurabilir, başlatabilir veya yeniden başlatabilirsiniz.
* Durdurma:
docker-machine stop centos7-remote-host
Bu komut, makineyi kapatır. docker-machine ls komutunda durumu Stopped olarak görünecektir.
* Başlatma:
docker-machine start centos7-remote-host
Bu komut, durdurulmuş bir makineyi başlatır. Durumu Running olacaktır.
* Yeniden Başlatma:
docker-machine restart centos7-remote-host
Bu komut, makineyi yeniden başlatır.
Hostları Güncelleme
Docker Machine, bir host üzerindeki Docker Engine sürümünü güncellemenize olanak tanır:
docker-machine upgrade centos7-remote-host
Bu komut, centos7-remote-host üzerindeki Docker Engine’i en son kararlı sürüme yükseltmeye çalışacaktır.
Hostları Kaldırma
Bir Docker hostuna artık ihtiyacınız kalmadığında, onu kaldırabilirsiniz. Dikkat: Bu işlem, hosttaki tüm verileri ve kaynakları kalıcı olarak silecektir.
docker-machine rm centos7-remote-host
Docker Machine, silme işlemini onaylamanızı isteyecektir. Onayladığınızda, host (ve varsa bulut sağlayıcısındaki VM) silinir ve yerel makinenizdeki ilgili sertifika ve yapılandırma dosyaları kaldırılır.
Gelişmiş Kullanım Senaryoları ve İpuçları
Birden Fazla Host ile Çalışma
Docker Machine’in en büyük avantajlarından biri, birden fazla Docker hostunu kolayca yönetebilmesidir. Farklı ortamlarda (geliştirme, test, üretim) veya farklı bulut sağlayıcılarında (AWS, DigitalOcean, Azure) hostlar oluşturabilirsiniz. Her bir host için eval $(docker-machine env komutunu kullanarak hedefi değiştirebilir ve o host üzerinde Docker komutlarını çalıştırabilirsiniz. Bu, bir geliştiricinin yerel makinesinden birden çok dağıtım ortamını yönetmesini sağlar.
Güvenlik Hususları
* SSH Anahtarları: generic sürücüsüyle bağlanırken veya bulut sağlayıcılarında SSH anahtarları kullanırken, anahtarlarınızın güvenliğini sağlayın (chmod 600 ~/.ssh/id_rsa). Asla özel anahtarınızı başkalarıyla paylaşmayın.
* API Tokenları: Bulut sağlayıcı API tokenlarını ortam değişkenleri olarak ayarlarken dikkatli olun. Bunları shell geçmişinizde bırakmamak için export komutunu kullanın ve bir oturum sona erdiğinde değişkeni temizleyin. Daha güvenli bir yaklaşım, bu tokenları bir sır yöneticisinde (secret manager) tutmaktır.
* TLS Kullanımı: Docker Machine, varsayılan olarak TLS ile güvenli bağlantılar kurar. Bu, Docker istemcisi ile daemon arasındaki iletişimin şifrelenmesini ve kimlik doğrulamasını sağlar. DOCKER_TLS_VERIFY=1 ayarının her zaman aktif olduğundan emin olun.
* Güvenlik Duvarı: Uzak CentOS 7 hostunuzdaki güvenlik duvarını (firewalld) doğru şekilde yapılandırın. Sadece gerekli portlara (örn. Docker için 2376, uygulamalarınız için 80, 443 vb.) dışarıdan erişime izin verin.
# CentOS 7 üzerinde firewalld için örnek komutlar
sudo firewall-cmd --permanent --add-port=2376/tcp # Docker TLS portu
sudo firewall-cmd --permanent --add-service=http # HTTP uygulamaları için
sudo firewall-cmd --permanent --add-service=https # HTTPS uygulamaları için
sudo firewall-cmd --reload
Ortam Değişkenlerini Kalıcı Yapma (Genellikle Önerilmez)
Her shell oturumunda eval $(docker-machine env komutunu çalıştırmak yerine, bazı kullanıcılar bu değişkenleri .bashrc veya .zshrc gibi shell yapılandırma dosyalarına eklemeyi düşünebilir. Ancak bu, genellikle önerilmez çünkü yerel Docker CLI’nızın her zaman belirli bir uzak hosta bağlı kalmasına neden olur. Çoğu durumda, hangi hostu yönetmek istediğinizi açıkça belirtmek daha esnektir.
Docker Compose ile Uzak Hostlarda Uygulama Dağıtımı
Daha önce de belirtildiği gibi, docker-compose.yml dosyalarınızı kullanarak karmaşık çok servisli uygulamaları uzak Docker hostlarına dağıtabilirsiniz. Bu, CI/CD (Sürekli Entegrasyon/Sürekli Dağıtım) süreçlerinde test veya hazırlık ortamlarını hızlıca ayağa kaldırmak için oldukça kullanışlıdır. Tek yapmanız gereken, hedef hostun ortam değişkenlerini ayarlamak ve docker-compose up komutunu çalıştırmaktır.
Sorun Giderme
Docker Machine kullanırken karşılaşabileceğiniz bazı yaygın sorunlar ve çözümleri:
* Error creating machine: Error running provisioning: ...: Bu hata genellikle bir host oluşturulurken ortaya çıkar ve provisioning (sağlama) sürecinde bir sorun olduğunu gösterir.
* SSH Bağlantı Sorunları: generic sürücüsü kullanıyorsanız, SSH kullanıcı adınızın, anahtarınızın veya parolanızın doğru olduğundan ve uzak sunucunun SSH portunun (varsayılan 22) açık olduğundan emin olun. ssh -vvv centos@192.168.1.100 gibi bir komutla manuel olarak bağlanmayı deneyerek sorunu teşhis edebilirsiniz.
* Sudo Yetkileri: Generic sürücüsüyle generic-sudo-flag kullanıldığından ve belirtilen SSH kullanıcısının sudo yetkisine sahip olduğundan emin olun.
* Bulut Sağlayıcı Kimlik Doğrulama: Bulut sağlayıcı tokenlarınızın veya kimlik bilgilerinizin doğru olduğundan ve geçerlilik sürelerinin dolmadığından emin olun.
* Kaynak Sınırlamaları: Bulut sağlayıcınızda yeterli kota veya kaynak (IP adresi, VM boyutu) olup olmadığını kontrol edin.
* Ağ Sorunları: Yerel makineniz ile uzak host veya bulut sağlayıcısı API’si arasında ağ bağlantısı olduğundan emin olun.
* Cannot connect to the Docker daemon at tcp://... Is the docker daemon running?: Ortam değişkenlerini ayarladıktan sonra Docker komutlarını çalıştırdığınızda bu hatayı alıyorsanız:
* Host Durumu: docker-machine status komutuyla hostun Running durumda olduğundan emin olun.
* Güvenlik Duvarı: Uzak hosttaki güvenlik duvarının Docker’ın TLS portunu (2376) engellemediğinden emin olun.
* Ortam Değişkenleri: eval $(docker-machine env komutunu doğru şekilde çalıştırdığınızdan ve env | grep DOCKER ile değişkenlerin doğru ayarlandığından emin olun.
* TLS Sertifikaları: Docker Machine’in yerel makinenize doğru TLS sertifikalarını kopyaladığından ve bunların geçerli olduğundan emin olun. Bazen docker-machine regenerate-certs komutunu çalıştırmak yardımcı olabilir.
* Logları Kontrol Etme: Sorunları gidermenin en iyi yollarından biri, Docker Machine’in veya uzak hostun loglarını kontrol etmektir.
* Docker Machine’in kendi logları için ~/.docker/machine/logs dizinini kontrol edebilirsiniz.
* Uzak CentOS 7 hostunda ise, docker-machine ssh ile bağlanarak sudo journalctl -u docker komutuyla Docker daemon loglarını inceleyebilirsiniz.
Sonuç
Docker Machine, uzak Docker hostlarını sağlamak ve yönetmek için güçlü, esnek ve kullanımı kolay bir araçtır. Bu makalede, Docker Machine’in ne olduğunu, neden önemli olduğunu ve özellikle CentOS 7 üzerinde çalışan uzak hostları nasıl oluşturacağınızı, yapılandıracağınızı ve yöneteceğinizi ayrıntılı olarak ele aldık. generic sürücüsü ile mevcut sunuculara bağlanmaktan, bulut sağlayıcılarında yeni VM’ler oluşturmaya kadar çeşitli senaryoları inceledik. Ayrıca, Docker komutlarını uzak hostlarda çalıştırmak, SSH ile bağlanmak, hostları durdurmak/başlatmak ve kaldırmak gibi temel yönetim işlemlerini öğrendik.
Docker Machine, geliştiricilerin ve operasyon ekiplerinin Docker ortamlarını daha verimli bir şekilde yönetmelerine olanak tanıyarak, altyapı karmaşıklığını azaltır ve dağıtım süreçlerini hızlandırır. CentOS 7 gibi stabil bir işletim sistemiyle birleştiğinde, Docker Machine, güvenilir ve sürdürülebilir bir konteyner altyapısının temelini oluşturabilir. Her ne kadar Docker Swarm ve Kubernetes gibi orkestrasyon araçları daha büyük ölçekli konteyner dağıtımları için tercih edilse de, tekil Docker hostlarının veya küçük kümelerin yönetimi söz konusu olduğunda Docker Machine hala değerli bir araç olarak yerini korumaktadır. Bu makalede edindiğiniz bilgilerle, uzak Docker hostlarınızı güvenle kurup yönetebilecek ve Docker tabanlı uygulamalarınızı daha etkin bir şekilde dağıtabileceksiniz.