Ubuntu üzerine LXC Container ve LXC WebPanel Kurulumu

Ubuntu üzerine LXC Container ve LXC WebPanel Kurulumu

Docker docker nereye kadar dedik ve birazda değişiklik olması için LXC container kurmaya karar verdik, öncesinde sıfır ubuntu kurdum version 19.04 ve update ettim. Sonrasında LXC ve lxc template’lerini kumakla başlayalım.

apt-get install lxc lxc-templates -y

Sorunsuz kurulum olup olmadığına aşağıdaki komutla bakabilirsiniz , cgroups’lar , nat’lar , namespace’lerin oluştuğunu göreceksiniz.

lxc-checkconfig

Şimdi templatelerin gelip gelmediğini aşağıdaki komutla kontrol edelim.

ls /usr/share/lxc/templates/

root@lxc:/home/ayhanarda# ls /usr/share/lxc/templates/
lxc-alpine lxc-archlinux lxc-centos lxc-debian lxc-fedora lxc-gentoo lxc-oci lxc-opensuse lxc-plamo lxc-sabayon lxc-sparclinux lxc-ubuntu lxc-voidlinux
lxc-altlinux lxc-busybox lxc-cirros lxc-download lxc-fedora-legacy lxc-local lxc-openmandriva lxc-oracle lxc-pld lxc-slackware lxc-sshd lxc-ubuntu-cloud

Görüldüğü üzere templatelerimiz gelmiş , şimdi ilk konteyner’imizi oluşturalım. Örneğin ubuntu konteyner açalım, ismi de new-container olsun.

lxc-create -n new-container -t ubuntu

İlk kez imaj indirirken biraz uzun sürebilir , ikinci de de aynı durumun olup olmadığını görmek için tekrar indirme ihtiyacı hissettim , bununda adı , new-container-2 olsun diyorum ve tekrar indiriyorum.

lxc-create -n new-container-2 -t ubuntu

Ve sonuç düşündüğüm gibi oldu , birincisi 2 dakika kadar sürerken ikincisi zaten kalıbı daha önce indiği için 2 saniye kadar sürdü.

Şimdi lxc container’larımızı listeleyelim.

root@lxc:/home/ayhanarda# lxc-ls
new-container new-container-2

Görüldüğü üzere 2 adet container gözüküyor , şimdi new-container isimli olanı çalıştıralım.

lxc-start -n new-container -d

Peki container’ın konsoluna nasıl erişiriz dediğinizi duyar gibiyim , aşağıdaki komutu kullanabilirsiniz.

lxc-console -n new-container

Şifre soracaktır , konteyner’ı indirdiğimizde zaten bize ubuntu kullanıcı adı ve şifresini vermiş idi , bu bilgiler ile giriş yapabilirsiniz.

Konteyner ile ilgili bilgi almak için aşağıdaki komutu kullanabilirsiniz.

lxc-info -n new-container

Çıktısı aşağıdaki gibi olacaktır.

root@kxc:/home/ayhanarda# lxc-info -n new-container
Name: new-container
State: RUNNING
PID: 41933
IP: 10.0.3.16
CPU use: 1.58 seconds
BlkIO use: 33.30 MiB
Memory use: 69.94 MiB
KMem use: 12.58 MiB
Link: vethRUDGSR
TX bytes: 1.89 KiB
RX bytes: 2.84 KiB
Total bytes: 4.73 KiB

Konteyner’larımızı başlatmak ya da durdurmak için aşağıdaki komutları kullanabilirsiniz.

lxc-start -n new-container
lxc-stop -n new-container

Konteyner’larımızı pause ya da unpouse etmek için ise aşağıdaki komutları kullanabilirsiniz.

lxc-freeze -n new-container
lxc-unfreeze -n new-container

Eğer konteyner’ımızın snapshot’ını almak istersek önce durdurmalıyız ve sonra snapshot’ı aşağıdaki komutla alabiliriz.

lxc-stop -n new-container
lxc-snapshot -n new-container

Alınan snapshotları listemelek için aşağıdaki komutu kullanabilirsiniz.

root@lxc:/home/ayhanarda# lxc-snapshot -L -n new-container
snap0 (/var/lib/lxc/new-container/snaps) 2019:08:07 10:47:07

Snapshot’tan dönmek için ise komut aşağıdaki gibi olacaktır.

lxc-snapshot -r snap0 -n new-container

Konteyner’ı silmek için yine önce durdurmalı sonra silmelisiniz.

lxc-stop -n new-container
lxc-destroy -n new-container

Komutlarla uğraşmak istemiyorum , bir gui’mizde olsun diyorsanız aşağıdaki komut ile kurabilirsiniz.

wget https://lxc-webpanel.github.io/tools/install.sh -O – | bash

İşlem bittiğinde LXC web panel’e http://ipadresiniz:5000 nolu porttan admin kullanıcı adı ve şifresi ile erişebilirsiniz.

Ayhan ARDA

Proxmox file system may not support O_DIRECT hatası

Proxmox file system may not support O_DIRECT hatası

Proxmox kurulumundan sonra yeni bir sunucu oluşturup başlat dediğinizde aşağıdaki hatayı alabilir

kvm: -drive file=/var/lib/vz/images/100/vm-100-disk-1.qcow2,if=none,id=drive-ide0,format=qcow2,aio=native,cache=none,detect-zeroes=on: file system may not support O_DIRECT
kvm: -drive file=/var/lib/vz/images/100/vm-100-disk-1.qcow2,if=none,id=drive-ide0,format=qcow2,aio=native,cache=none,detect-zeroes=on: could not open disk image /var/lib/vz/images/100/vm-100-disk-1.qcow2: Could not open ‘/var/lib/vz/images/100/vm-100-disk-1.qcow2’: Invalid argument

Hatanın çözümü için Disk in cache mode unu none ‘dan writethrough ya da writeback e çekiniz. Yeni sunucunuz çalışacaktır.

Ayhan ARDA

Ova’dan Vmdk’ya , Vmdk’dan Qcow2 ye dönüştürme işlemi

Elimizde bir .ova imajı olduğunu düşünelim , amacımız bu imajı proxmox , nutanix ya da herhangi qcow2 kullanabilen sanallaştırma platformlarında çalıştırmak olsun.

Önce .ova imajını genelde testler için kullandığım kali linux sunucuma indirdim.

root@kali-ayhanarda:/home/ayhanarda/test# ls -al
total 526960
drwxr-xr-x 2 root root 4096 Dec 9 04:41 .
drwxr-xr-x 3 root root 4096 Dec 9 04:40 ..
-rw-r–r– 1 root root 539592704 Dec 9 04:54 ayhanarda.ova

Sonra açıyorum ve vmdk dosyasını çıkartıyorum.

root@kali-ayhanarda:/home/ayhanarda/test# tar -xvf ayhanarda.ova
ayhanarda.ova.ovf
ayhanarda.ova.mf
ayhanarda.ova.vmdk

Vmdk yı elde ettik , şimdi bunu qcow2 ye çevireceğiz.

root@kali-ayhanarda:/home/ayhanarda/test#qemu-img convert -O qcow2 ayhanarda.vmdk ayhanarda.qcow2

İşlem sonunda dosyanın oluşup oluşmadığını doğrulayabiliriz.

root@kali-ayhanarda:/home/ayhanarda/test#ls -al | grep qcow2
-rw-r–r– 1 root root 1678835712 Dec 9 04:59 ayhanarda.qcow2

Ayhan ARDA

docker compose

Centos 7 ‘de Docker ve Docker Compose Kurulumu ile Kullanımı

Docker Compose, multi-container uygulamalarınızı gereksinimleri ile birlikte tek bir dosyaya tanımlayarak akabinde tek bir komut ile reçetesini yazdığınız container ı ayağa kaldırmanızı sağlamaktadır.

Şimdi elimizde sıfır kurulu ve updateleri yapılmış bir centos 7 var , bir public ip verdim ( burada bolca var 🙂 ) , siz private ip de verebilirsiniz , sonuç olarak ssh erişimim de var ve makina bir şekilde internete çıkıyor, buraya kadar tamam ise konuya girebiliriz.

Bu arada docker compose eski fig in yerini aldı , fig duyar iseniz artık o deprecated oldu ve resmi olarak docker compose diye anılıyor.

Öncelikle Docker imajları hakkında bilgi verelim , Her bir docker container ı , bir docker imajının yerel bir kopyasıdır. Docker imajlarını bir linux işletim sistemi gibi düşünebilirsiniz ancak şöşnde sadece minimal gereksinimler bulunmaktadır ve bu imajlar ana host un kernel ini kullanırlar fakat çalışan bir container ın içine girerseniz sadece o container ın dosya sistemini görürsünüz.

En çok kullanılan imaj ları docker hub da bulabilirsiniz , Bunlar docker team tarafından kontrol edilir ve bazı imajların altında official ibaresini görür iseniz bu imajlara güvenebilirsiniz çünkü docker team bunları test etmiştir.

Şimdi docker kurarak başlayalım , bu iş için yine docker team ın hazırladığı bir shell script i çağırıp çalıştıracağız.

Centos 7 de wget öntanımlı gelmiyor , aşağıdaki komut ile indirebilirsiniz.

yum install wget

Şimdi scriptimizi çekiyor ve çalıştırıyoruz.

[root@ayhanarda-containers ~]# wget -qO- https://get.docker.com/ | sh

Yaklaşık 30 sn içinde kurulum tamamlandı , şimdi kurulup kurulmadığını aşağıdaki şekilde doğrulayabiliriz.

[root@ayhanarda-containers ~]# docker version
Client:
Version: 1.10.3
API version: 1.22
Go version: go1.5.3
Git commit: 20f81dd
Built: Thu Mar 10 15:39:25 2016
OS/Arch: linux/amd64

Eğer docker ı root olmayan bir kullanıcı ile kullanacak iseniz aşağıdaki komutla kendinizi docker grubuna dahil edebilirsiniz.

usermod -aG docker $(whoami)

Eğer root iseniz yukarıdaki komutu kullanmanıza gerek yok , şimdi docker ı başlatalım ve bundan sonraki rebootlar sonunda tekrar çalışacak hale getirelim , aşağıdaki 2 komutu kullanabilirsiniz.

[root@ayhanarda-containers ~]# systemctl enable docker.service
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[root@ayhanarda-containers ~]# systemctl start docker.service

Artık docker çalışır durumda. Şimdi docker compose kurulumuna geçebiliriz.

Öncelikle python-pip kuruyorum çünkü docker compose u pip ile kuracağım.

[root@ayhanarda-containers ~]# yum install epel-release

[root@ayhanarda-containers ~]# yum install -y python-pip

Şimdi docker compose u kuruyoruz.

[root@ayhanarda-containers ~]# pip install docker-compose

Kurulum tamamlandı.Şimdi hemen docker compose ile bir container ayağa kaldıralım.

Şimdi yaml dosyamız için bir klasör açıp içine giriyorum.

[root@ayhanarda-containers ~]# mkdir hello-world
[root@ayhanarda-containers ~]# cd hello-world

docker-compose.yml isimli dosyamızı oluşturup içine reçetemizi yazacağız. Ben favori editör olarak nano kullanıyorum , Siz farklı bir editor kullanabilirsiniz.

[root@ayhanarda-containers hello-world]# nano docker-compose.yml

içine aşağıdaki satırları yazabilir ve kaydedebilirsiniz.

ayhanarda-test:
image: hello-world

Yani aşağıdaki gibi gözükmeli.

[root@ayhanarda-containers hello-world]# cat docker-compose.yml
ayhanarda-test:
image: hello-world

Şimdi yapmamız gereken tek bir hareket kaldı , bu prospektüsün yazılı olduğu containerı up etmek , hala hello-world klasörümüzün içinde iken aşağıdaki komutu kullanabilirsiniz.

[root@ayhanarda-containers hello-world]# docker-compose up
Pulling ayhanarda-test (hello-world:latest)…
latest: Pulling from library/hello-world
03f4658f8b78: Pull complete
a3ed95caeb02: Pull complete
Digest: sha256:8be990ef2aeb16dbcb9271ddfe2610fa6658d13f6dfb8bc72074cc1ca36966a7
Status: Downloaded newer image for hello-world:latest
Creating helloworld_ayhanarda-test_1
Attaching to helloworld_ayhanarda-test_1
ayhanarda-test_1 |
ayhanarda-test_1 | Hello from Docker.

..

Şimdi belirttiğimiz image ı indirdik , hadi bunu doğrulayalım.

[root@ayhanarda-containers hello-world]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest 690ed74de00f 5 months ago 960 B

Şimdi aynı yöntemle bir de nginx kuruyorum , bunu yazmayacağım , şimdi docker hub da offical nginx i bulup adını doğrulayıp aynı yöntem ile oluşturabilirsiniz. Docker ps ile çalıştığını görebilirsiniz.

[root@ayhanarda-containers ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e37b79df162b nginx “nginx -g ‘daemon off” About a minute ago Up About a minute 80/tcp, 443/tcp nginx_nginx_1

Yukarıda bir Container id göreceksiniz , her çalışan container ın bir id si vardır, yani eğer biz bu container ın dosya sistemine girmek ister isek aşağıdaki gibi o makinanın içine erişebiliriz , hatta nginx in conf dosyasında değişiklik yapabiliriz , işimiz bitince exit yazarak çıkabiliriz.

[root@ayhanarda-containers ~]# docker exec -it e37b79df162b /bin/bash
root@e37b79df162b:/# cd etc/nginx/conf.d/
root@e37b79df162b:/etc/nginx/conf.d# ls
default.conf

Farklı docker-compose ve multi-container örnekleri ile yakında görüşmek üzere..

Ayhan ARDA

VMware vSphere üzerinde Photon OS ve Docker ve DockerUI Kurulumu

Docker ve container hosting kavramları yayılmaya devam ediyor , Bu kapsamda docker ın PhotonOs üzerinde kurulumunu ele alacağım.

Öncelikle aşağıdaki adresten Photon Os full iso yu indiriyorum.

https://dl.bintray.com/vmware/photon/iso/1.0TP2/x86_64/photon-1.0TP2.iso

Sonra vcenter ım üzerinden yeni bir sanal makina oluşturup indirdiğim iso ile boot ediyorum , buraya kadar detay vermeye gerek yok sanırım , kurulum başlangıç ekranı aşağıdaki gibi olacaktır.

photonos-1

Lisans anlaşmasını onaylamamız gerekecek.

photonos-2

Ben test için 50 Gb lık bir disk vermiştim, aşağıdaki ekran beni karşılıyor ve enter a basarak geçiyorum.Diskin içini sileceğini söylüyor ve Y harfine basarak onay veriyorum.

photonos-3

Bir sonraki ekran kurulum seçenekleri sormakta , screen shot a gerek duymadım, ben full diyerek geçtim.sonrasında bir hostname istiyor , bu tercih Size kalmış, en son olarak ta bir şifre belirlemenizi isteyecek.

Kurulum 220 sn sürdü , sunucu tekrar başlatıldı ve şimdi root kullanıcı adı ve belirlediğim şifre ile işletim sisteminin içindeyim.

Şimdi benim ortamımda dhcp yok , dolayısı ile bir ip adresi kayıtlı değil ve bu neden ile ssh erişimi de yapamıyorum , o halde bir ip adresi verelim.

Öncelikle mevcut dhcp config dosyasını static ismi ile kopyalıyorum. Önce bir ifconfig çıktımıza bakalım.

iki interface görüyorum , biri eno16777728 , diğeri ise lo (loopback)

O halde komutum şu olmalı.

root [ ~ ]# mv /etc/systemd/network/10-dhcp-en.network /etc/systemd/network/10-static-eno16777728.network

Yani 10-dhcp-en.network dosyasının adını 10-static-eno16777728.network olarak değiştirdik.

Şimdi bu dosyamızı açalım.

root [ ~ ]# nano /etc/systemd/network/10-static-eno16777728.network

İçinde aşağıdaki değişiklikleri yapalım ya da içini silelim aşağıdaki örnein aynısını ip adresi ve interface adını değiştirerek yapalım. Ben aslında public ip verdim ama ip range imin belli olmaması için örnekte local ip vermiş gibi yazıyorum.

[Match]
Name=eno16777728

[Network]
Address=192.168.1.10/24
Gateway=192.168.1.1
DNS=8.8.8.8
Domains=photonos.local

Ip verdiğimize göre şimdi network servisini tekrar başlatabiliriz.

root [ ~ ]# systemctl restart systemd-networkd-service

Şimdi ssh a girebilir durumda mıyız? Tabiki hayır , öncelikle ssh config dosyamızda root girişine izin verelim.

root [ ~ ]# nano /etc/ssh/sshd_config

Bu dosya da #PermitRootLogin yes gördüğünüz kısmı PermitRootLogin yes olarak değiştiriniz. Yani başındaki diez i kaldırıp enable edin ve kaydedin. Şimdi ssh servisimizi başlatabiliriz.

root [ ~ ]# systemctl start sshd

Artık sunucumuza verdiğimiz ip ile ssh 22 nolu porttan bağlanabiliriz.

Şimdi docker daemon unu başlatmanın vakti geldi.

root [ ~ ]# systemctl start docker
root [ ~ ]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
root [ ~ ]# systemctl status docker
* docker.service – Docker Daemon
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled)
Active: active (running) since Wed 2016-03-23 12:48:42 UTC; 33s ago
Main PID: 429 (docker)

Hemen test için bir nginx container ı aktif etmeye ne dersiniz?

root [ ~ ]# docker run -d -p 80:80 vmwarecna/nginx
Unable to find image ‘vmwarecna/nginx:latest’ locally
latest: Pulling from vmwarecna/nginx
511136ea3c5a: Pull complete
e977d53b9210: Pull complete
c9fa20ecce88: Pull complete
184d60f5cc4f: Pull complete
96d31e36bd8a: Pull complete
fd2224b9a216: Pull complete
7f3a2bd1e995: Pull complete
4c4851e85e94: Pull complete
560d74bc7ae1: Pull complete
07f0aa77ae76: Pull complete
126105e511b8: Pull complete
775024331ffa: Pull complete
db26ae25be15: Pull complete
6d36a12c92d5: Pull complete
Digest: sha256:f73bbae0f31823c06478b1fa5efb4957bc25239802fd5ea94e4442c0a6090d23
Status: Downloaded newer image for vmwarecna/nginx:latest
d3adea692a100ce4020a91018c17433cdd4aedc90e8cd446a9845279059311aa

Mevcut çalışan containerlarımıza bir bakalım.

root [ ~ ]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d3adea692a10 vmwarecna/nginx “nginx -g ‘daemon off” 24 seconds ago Up 23 seconds 0.0.0.0:80->80/tcp, 443/tcp sleepy_wright

Şimdi browserdan ip adresini yazıp bir test edelim.

photonos-4

Artık elimizde nginx çalışan bir container var.

Peki bu container ları web üzerinden yönetebilir miyiz?

Tabiki evet,  DockerUi Kurulumundan bahsedelim.

root [ ~ ]# docker run -d -p 9000:9000 –privileged -v /var/run/docker.sock:/var/run/docker.sock dockerui/dockerui
Unable to find image ‘dockerui/dockerui:latest’ locally
latest: Pulling from dockerui/dockerui
706db4235055: Pull complete
84f978a622ba: Pull complete
95c8b9dc91e0: Pull complete
Digest: sha256:4bfb5b2498e98baaa4e1fd0e12e9022d0b1eb5d79fd68ee7751941bac7fcfed3
Status: Downloaded newer image for dockerui/dockerui:latest
a45c12f8abcbde61f7f759b626127a3672aa5ddef4115da2a6ccfeef563214b6
root [ ~ ]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a45c12f8abcb dockerui/dockerui “/dockerui” 4 seconds ago Up 3 seconds 0.0.0.0:9000->9000/tcp happy_raman

Şimdi browserdan ip adresiniz ve 9000 nolu port ile dockerui arayüzüne erişebilirsiniz.

Örnek : http://192.168.1.10:9000

 

dockerui-install

Vakit oldukça devamını bu konu ya da farklı bir yazı da getireceğim.

Ayhan ARDA

Vmware de Cevap Vermeyen Sanal Sunucuyu Kapatma

Sanal makinalarımız crash olduğunda ya da migrate işlemlerinde yarıda kalırsa vcenter,vspere ya da web arayüzleri üzerinden kapatma ya da restart işlemi yapmanıza izin vermeyebilir , tek çareniz beklemek olacak ancak bir süre sonra beklemenin yersiz olacağını düşüneceksiniz, bu durumda ana makinanıza ssh üzerinden bağlanın ve aşağıdaki adımları takip edin.

Takılı kalan ya da problem yaşayan makinanızın World ID sini bulun, örneğin sorun yaşayan makinamız ayhanarda-VM5160 olduğunu varsayalım , bunun wid si 8574  olarak gözükmekte. (Bold olarak işaretlenmiştir.)

~ # vmdumper -l
wid=8240 pid=-1 cfgFile=”/vmfs/volumes/5190b0dc-71a55840-717a-001a64c7825c/ayhanarda-VM4893/ayhanarda-VM4893.vmx” uuid=”56 4d 89 2a 08 9e bd 29-95 68 a0 03 24 1b 51 4b” displayName=”ayhanarda-VM4893” vmxCartelID=8188
wid=8574 pid=-1 cfgFile=”/vmfs/volumes/551bb409-1d0436b8-4818-001a64c7840e/ayhanarda-VM5160/ayhanarda-VM5160.vmx” uuid=”56 4d d0 16 5b 59 94 92-aa 89 c0 e0 7d 7c 1e 3a” displayName=”ayhanarda-VM5160″ vmxCartelID=8561
wid=8579 pid=-1 cfgFile=”/vmfs/volumes/551bb409-1d0436b8-4818-001a64c7840e/ayhanarda-VM4864/ayhanarda-VM4864.vmx” uuid=”56 4d 40 66 8e b1 af fa-88 87 7a d8 4b 56 66 f5″ displayName=”ayhanarda-VM4864″ vmxCartelID=8568
wid=8606 pid=-1 cfgFile=”/vmfs/volumes/551bb409-1d0436b8-4818-001a64c7840e/ayhanarda-VM4898/ayhanarda-VM4898.vmx” uuid=”56 4d a1 f5 e4 f4 85 b2-b0 1c d4 36 db 8b 26 74″ displayName=”ayhanarda-VM4898″ vmxCartelID=8566

Şimdi wid değeri elimizde , sıra makinayı kill leme dediğimiz tüm süreçlerini sonlandırmaya geldi , aşağıdaki komutu kullanarak sanal makinayı tamamen durdurabilirsiniz. (wid değerini sorunlu makina ile değiştirmelisiniz.)

esxcli vm process kill –type=force –world-id=8574

Yukarıdaki komut kill işlemini zorlayarak yapar , dilerseniz ya da risk görür iseniz type kısmında force yerine soft ya da hard seçeneklerini deneyebilirsiniz , force garanti çözümdür.

Ayhan ARDA