Merhaba! Bu yazıda AWS üzerinden Ubuntu bir Sunucuya nasıl Docker kuracağımızı göreceğiz. Ardından sunucumuzda çeşitli container’ları nasıl çalıştırabileceğimize bakacağız.

Docker sektörde çalışan pek çok yazılımcı ve sistem yöneticisi için yeni bir teknoloji. Bu sanallaştırma teknolojisi yazılım geliştirme ve deployment süreçlerini kolaylaştırdı. Docker sayesinde mikroservis mimarisi daha yaygın hale gelecek gibi görünüyor. Docker’la conteiner’lar sayesinde ne kadar kolaylıkla kurulum yapıldığını görünce şaşırmamak ede değil.

Bu yazıda da AWS üzerinde sanal bir Ubuntu makinada WordPress ayağa kaldıracağız.

İlk olarak AWS sitesi üzerinden bir instance oluşturacağım. Aslında Red Hat Enterprise ve CentOS kullanmak isterdim ama Ubuntu sonraki senaryolarımıza daha uygun. Ubuntu’ya çok alışmak istemiyorum çünkü kernel olarak Centos ve Red Hat’den farklılaşıyor.

64-bit (x86) versiyonunu kullanıyoruz. Bildiğiniz üzere ARM alışık olduğumuz x86 işlemcilerden farklı bir işlemci mimarisi kullanıyor. ARM’ye genellikle akıllı telefonlardan aşinayız şu anda kullandığım Huawei P30 ARM Dual-core 2.6 GHz Cortex-A76 işlemci kullanıyor.

Ubuntu Server 20.04 LTS sürümünü yükledik. Free tier kullandığım için 2.micro seçiyorum.

Bana 1 vCPU vermiş. 1 GiB’de memory var. Diğer detaylara dokunmuyorum. 8 GB harddisk veriyor. Free tier bize 30 GB’a kadar tanımış 30 GB’a yükseltiyorum.

Diğer ayarlara dokunmuyorum. Şimdi RSA için key pair oluşturacağız. Burası uzaktan bağlantı için önemli.

myserv diye isim verip ilgili .pem dosyasını indirdim. Bu dosyayı kaybetmemeniz gerekiyor.

Ok dedikten sonra AWS’nin instances menüsünden instance’ımın durumunu görebiliyorum. Buradan myserv2 diye isim verdim.

Şimdi sıra bağlanmaya geldi. Aşağıdaki gibi bir komutla bağlanabiliriz. Windows makinemde ssh toolu yüklü olduğundan direk girdik.

https://docs.docker.com/engine/install/ubuntu/ adresinden Docker’ı Ubuntu Focal 20.04 (LTS) işletim sistemi üzerine nasıl kuracağımıza bakıyorum. Önce bir update ile paket listesini güncelleyelim. Ardından Docker kurulumu için ihtiyacı olduğunu anladığımız bazı yazılımları kurduruyor.

Daha sonra Docker’ın resmi GPG key’ini ekliyoruz.

Docker’ı repository’e ekliyoruz.

Ardından da docker’ı kurmaya başlıyoruz.

Daha sonrasında kurulumun başarılı olup olmadığını test etmek için hello-word container’ını çalıştırtıyor.

Buradan kurulumumuzun başarılı olduğunu görmüş olduk.

Docker kurulumundan sonra bazı post-install adımları var.  Docker dokumanasonundan bu adımları görebiliriz.

İlk maddeden anladığımıza göre Docker TCP portu kullanmak yerine Unix socket’i kullanıyormuş. Unix socket’de default olarak root kullanıcısına ait olduğundan diğer kullanıcılar sadece sudo kullanarak erişim sağlayabilitorlar. Docker deamon’u her zaman root user olarak çalışıyor.

Eğer her docker komutuna sudo yazmak istemiyorsanız docker adında bir Unix grubu oluşturarak kullanıcılarınızı ona atayın. Docker deamon başladığından docker grubu üyeleri tarafından erişilebilir bir unix socket’i oluşturacaktır.

Docker isimli bir grup oluşturuyoruz.

Sanal makine kullandığımız için komple kapatıp açmamız öneriliyor. Instance’ı reboot ediyorum. Sonrasında aşağıdaki gibi sudo olmadan çalışabildiğini test etmiş oluyoruz.

Daha sonra systemd ile servisin başlamasını sağlayacağız.

Şu an bu iki konfigürasyon bize yeterli ilerleyen zamanda ihtiyaç duydukça gerekli konfigürasyonları yapabiliriz.

docker –v ile mevcut versiyonu görüntüleyebiliriz.

docker ps ile tüm containerları görüyorum.

docker ps –a ile tüm container’ları görebiliriz.

Burada iki container hello-world imajından açılmış.

“docker image ls” komutu ile de imajları görebiliriz. Imajlar docker kullanarak oluşturulmuş ve bir container ayağa kaldırmak için hazırlanmış paketler.

Artık örnek bir container kurup çalıştırabiliriz. Ben wordpress uygulaması kurmak istiyorum. Bunun için mariadb gerekecek.

Docker Container İçerisinde MariaDB

İlk olarak ana dizine aşağıdaki gibi bir wordpress klasörü oluşturacağım.

MariaDB containerını tek bir komutta aşağıdaki gibi indirip kuracağız. Komut için bazı parametreler girmemiz gerekiyor.

MariaDB için ortam değişkenlerimiz Docker komutunda –e ile belirtilmiş olanlar.

  • -e MYSQL_ROOT_PASSWORD= Buraya parolamızı gireceğiz.
  • -e MYSQL_DATABASE= Yeni bir database oluşturup isim veriyor. Buna wordpress verelim.

Docker Parametreleri:

  • –name wordpressdb  Container’a vereceğimiz isim. wordpressdb olacak.
  • -v “$PWD/database”:/var/lib/mysql  Containerın storage’ına bağlı bir data directory oluşturarak verinin kalıcılığını sağlıyoruz.
  • -d  Docker’a MariaDB’yi daemon içerisinde çalıştırmasını söylüyor.
  • mariadb:latest – Ne kuracağımızı ve verisoynunu belirtiyor.

Password kısmını değiştirerek aşağıdaki komutu giriyoruz.

Eğer bir sıkıntı yoksa aşağıdaki mesajı görmemiz gerekiyor.

Docker ps dediğimizde yine benzer şekilde görebiliyoruz.

Containerlarla çalışırken kullanabileceğimiz başka faydalı komutlar da var. Bunlar start, stop, rm

Yine yardımı kullanarak başka komutlar hakkında bilgi sahibi olabiliriz.

Komut satırı dokümantasyonunun tamamında Docker Support sayfasından da erişebiliyoruz.

Docker Container İçerisinde WordPress

Container’lar içerisinde çalışan uygulamalarımız host işletim sisteminin userspace’inde birbirinden izole biçimde çalışırlar. Diğer containerlarla aynı kernel’i paylaşırlar. Böylece paketlenmiş bir yazılımı çalıştırmak için gereken fazladan kaynaktan tasarruf edildiği gibi container’ların platform bağımsız çalışması sağlanır. Docker container linking denilen bir özellikle farklı containerların birbiri ile çalışmasına da olanak sağlar.

WordPress’in resmi docker versiyonunu Docker Hub  dan bulabiliriz. Bu imajı aşağıdaki kodla çekebiliriz. İndirilecek sürüm belirtilmediğinde, Docker mevcut olan en son sürümü getirir.

WordPress conteiner için yine bazı ortam değişkenleri ve Docker parametreleri gireceğiz:

  • -e WORDPRESS_DB_PASSWORD= Veritabanı için verdiğimiz parolanın aynısını veriyoruz.
  • –name wordpress  Container’a bir isim veriyor.
  • –link wordpressdb:mysql  Uygulamaların iletişim kurabilmesi için WordPress container’ını MariaDB conteiner’ına bağlıyor.
  • -p 80:80  Docker’a Server’ın HTTP portuna gelen bağlantıları conteinerın içerisinde 80 numaralı porta göndermesini söylüyor.
  • -v “$PWD/html”:/var/www/html WordPress dosyalarını container’ın dışından erişilebilir yapıyor. Container’ı silsek dahi bu volume kalacaktır.
  • -d  Container’ın arka planda çalışmasını sağlıyor.
  • wordpress  Docker’a neyi kuracağını söylüyor. Daha önce pull komutuyla indirdiğimiz paketi kullanacak.

MariaDB container’ı için yaptığımız gibi <password> değişkenini girerek aşağıdaki komutu çalıştırıyoruz.

Bu işlemden sonra tekrar çalışan container’larımıza bakalım.

Buradan sonra artık test edebiliriz.

http:// 3.133.81.63/wp-admin/install.php adresinden cevap vermediğini görüyorum.

Oysa ssh ile bağlandık örneğin aşağıdaki gibi test edersek bağlandığını göreceğiz

Demek ki http portu 80 kapalı. Ubuntu firewalldan 80’i aktif edelim diyebilirim. Ama kontrol ettiğimde ufw’nin zaten disable konumda olduğunu görüyorum. Bizi burada bloklayan AWS.

AWS’ye inbount (içeri giren) trafiğe izin verdiğimde artık websitesi erişilebilir olacak.

Bu kuralı eklediğimizde artık http://<public IP>/wp-admin/install.php adresinden websitemiz ulaşılabilir oldu.