LXC, işletim sistemi emülatörü olan sanal makinelerden farklı olarak tamamen soyut bir makine yerine soyut bir işletim sistemi seviyesinde sanallaştırma sağlayan konteyner çeşitlerinden biridir.
Bu yazımda bir LXC konteyneri nasıl kurulur, ağ yapılandırması nasıl yapılır ve kurulacak olan bu konteynerde postgresql nasıl kurulur, bunlardan bahsedeceğim.
Sahip olduğum işletim sistemi:
Distributor ID: Ubuntu
Description: Ubuntu 18.04 LTS
Release: 18.04
Codename: bionic
Sistemimize LXC kurmak için:
$ sudo apt install lxc1
komutunu çalıştıralım. Konteynerimizi yaratmak için hazırız. Bu yazımda postgres-cont isimli bir konteyner oluşturacağım ancak siz konteynerinize -n parametresiyle istediğiniz ismi verebilirsiniz. Root seviyesi izni ile:
$ sudo lxc-create -n postgres-cont -t download
komutunu çalıştırıyoruz. Bu komut bizi konteynerimize kurabileceğimiz işletim sistemlerini detaylarıyla birlikte seçebileceğimiz bir ekrana götürecektir:
İnternet kalitenize bağlı olarak konteyner yaratılırken geçen süre değişebilir, sabırlı olun :)
Sıradaki komut varolan konteynerleri gösterir:
$ sudo lxc-ls --fancy
Çıktı:
NAME STATE AUTOSTART GROUPS IPV4 IPV6
postgres-cont STOPPED 0 - - -
Ancak konteynerimiz çalışır durumda değil (STOPPED). Şimdi oluşturduğumuz konteyneri çalıştırma zamanı. Şunu yazın ve çalıştırın:
$ sudo lxc-start -n postgres-cont
Tekrar konteynerlerimizi listelediğimizde:
$ sudo lxc-ls --fancy
Çıktı olarak artık:
NAME STATE AUTOSTART GROUPS IPV4 IPV6
postgres-cont RUNNING 0 - 10.0.3.98 -
Konteynerimizin çalışır durumda olduğunu görebiliyoruz (RUNNING). Artık konteynerimize erişebiliriz. Bunun için şu komutu çalıştırıyoruz:
$ sudo lxc-attach -n postgres-cont
Konteynerimize kurmamız gereken şeylerin başında net-tools
geliyor:
$ sudo apt-get install net-tools
Varsayılan olarak Vi editör geliyor ancak ben Nano kullanmayı tercih ettiğim için nano kuracağım:
$ sudo apt-get install nano
Ve tabiki postgreSQL:
$ sudo apt-get install postgresql
Artık postgresql konteynerimizde kullanılmaya hazır. Şu komut ile:
$ sudo -u postgres psql
postgresql konsoluna ulaşmış oluyoruz:
Aslında az önce çalıştırdığımız komutta psql
komutunu postgres kullanıcısı ile çalıştırdık. Bunun nedeni PostgreSQL postgres dışındaki herhangi bir sistem kullanıcısı ile erişilemez olması. Yani eğer biz konteynerimizin root kullanıcısıyla psql
komutunu çalıştırsaydık hata alacaktık:
lxc-create
komutu ile oluşturduğumuz konteynerimizin kök(root) dosya sistemine varsayılan olarak /var/lib/lxc dizininden ulaşabiliriz. Bu sayede ana makinemiz ile konteynerimiz arasında dosya aktarımı da sağlayabiliriz.
Bu konuyla alakalı konteynerimizde oluşturacağımız test.txt
isimli dosyayı ana makinemizden erişip ana makinemize taşıyacağımız küçük bir örnek:
Oluşturduğumuz konteynerimize /etc/default
dizinindeki lxc-net
isimli dosyada tanımlanmış LXC_DHCP_RANGE isimli değişkenin değer aralığında rastgele olarak bir IPv4 adresi tanımlanır:
LXC_DHCP_RANGE="10.0.3.2,10.0.3.254"
Bu rastgeleliği ortadan kaldırmak ve oluşturacağımız konteynerimizin IPv4 adresini kendimiz belirlemek istiyorsak bir kaç konfigürasyon yapmamız gerekiyor.
Öncelikle lxc-net
isimli dosyayı düzenleyelim:
#LXC_DHCP_CONFILE=/etc/lxc/dnsmasq.conf
Varsayılan olarak comment edilmiş bu satırı uncomment ediyoruz ve /etc/lxc
dizininde dnsmasq.conf isimli bir dosya oluşturuyoruz:
$ sudo touch /etc/lxc/dnsmasq.conf
Oluşturduğumuz dosyaya şu satırı ekliyoruz, kaydedip çıkıyoruz:
dhcp-host=postgres-cont,10.0.3.190
lxc-net
isimli dosyadaki LXC_DHCP_RANGE isimli değişkenin değer aralığında herhangi bir IP adresi girebilirsiniz ancak ben bu yazım için 10.0.3.190 adresini kullanacağım.
Yapılan değişikliklerin uygulanması için konteynerimizi durdurup lxc-net servisini yeniden başlatmamız gerekiyor:
$ sudo lxc-stop -n postgres-cont
$ sudo service lxc-net restart
Şimdi konteynerimizi tekrar çalışır duruma getirdiğimizde manuel olarak tanımlanan 10.0.3.190 IPv4 adresini alacaktır.
$ sudo lxc-start -n postgres-cont
$ sudo lxc-ls --fancy
Çıktı:
NAME STATE AUTOSTART GROUPS IPV4 IPV6
postgres-cont RUNNING 0 - 10.0.3.190 -
Konteynerimizi 10.0.3.190
adresine sabitlemiş olduk.
Sonuç olarak elimizde içerisinde PostgreSQL barındıran, sabit IPv4 adresli çalışan bir LXC konteyneri var. Bir sonraki yazım, bir LXC konteynerindeki PostgreSQL’e konteyner dışından erişim hakkında olacak. PyCharm ile konteyner içerisindeki PostgreSQL’e ulaşacağız.