Selamlar;
Bu paylaşımda docker container dan bahsedeceğim. Kısaca docker hakkında bilgi vereyim. Docker, go dili kullanılarak yazılmış konteyner ve sanallaştırma programıdır.İçeriğinde işletim sistemi imajları barındırmakta ve bu imajların farklı biçimlerini "versiyon"lama gibi bir çok yeteneğe sahiptir. İki farklı dağıtımı bulunmaktadır,Docker Community Edition (CE) ücretsiz olan sürüm ve Docker Enterprise Edition (EE) ücretli olan sürüm.Bilgi verme kısmı tamamlandığına göre kurulum adımlarına geçiyorum. NOT: Paylaşımda "Ubuntu 16.10 x86-64" üzerine "Docker Community Edition (CE)" sürümü apt-get ve "deb" paket yöntemi ile kurulacaktır.
Apt-get yöntemi ile Docker Community Edition (CE) kurulumu:
Docker kurulumu yapmadan önce , kurulması gereken bir takım docker bağımlılıkları bulunmakta. Bu bağımlılıkları kurduktan sonra docker kurulumuna geçmeliyiz. Bağımlılıkları kurmak için aşağıdaki komutu çalıştırıyoruz.
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
Docker kurulumu için gerekli bağımlılıkların kurulumunu tamamladığımıza göre, docker kurulumuna devam ediyorum, aşağıdaki komutla gpg key dosyasını almalıyız.
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
Ek bilgi : Proxy ve websense'in bulunduğu filtreli bir ağdan internete çıkıyorsanız bu kısımda "gpg" key ile ilgili bir hata almanız yüksek bir ihtimal. Bunu önlemek için ilgili "crt" uzantılı sertifikayı "/usr/local/share/ca-certificates/" dizine altına kopyalayıp sonrasın da "update-ca-certificates" komutu ile sertifikayı ekleyerek aşılmakta. Elinizdeki sertifika cer uzantılı ise , "openssl x509 -inform DER -in certificate.cer -out certificate.crt" komutu ile "cer" dosyayı "crt" haline dönüştürebilirsiniz. Ayrıca "systemd" altına aşağıda verilen proxy tanımlarını yapmamız gerekmekte, daha fazla bilgi için:
https://docs.docker.com/engine/admin/systemd/#manually-creating-the-systemd-unit-files
https://docs.docker.com/engine/admin/systemd/#manually-creating-the-systemd-unit-files
sudo su
mkdir -p /etc/systemd/system/docker.service.d
touch /etc/systemd/system/docker.service.d/http-proxy.conf
nano
/etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTPS_PROXY=https://proxy.com:8080" "HTTP_PROXY=http://proxy.com:8080" "NO_PROXY=localhost,127.0.0.1"
systemctl daemon-reload
systemctl restart docker
Kurulum adımlarına geri dönüyorum. Docker dağıtımına ait apt-repository, adres tanımını eklemek için aşağıdaki komutu kullanıyoruz.sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
Docker kurulumunu aşağıdaki komutları kullanarak tamamlıyoruz.
sudo apt-get update
sudo apt-get install docker-ce
Docker kurulumunu test edelim.
sudo docker version
sudo docker run hello-world
sudo docker search ubuntu-16.04
"Deb" paketi ile Docker Community Edition (CE) kurulumu:
İlk olarak Docker Community Edition (CE) sürüme ait "deb" paketini https://download.docker.com/linux/ubuntu/dists/ adresinden işletim sistemi sürümüne uygun olan paketi bularak indiriyoruz. Bu işlemi yapabilmek için "lsb_release -a" komutu ile alınan çıktıda bulunan "Codename" alanındaki isimi kullanıyoruz.
Doğru dağıtımı bulduk,şimdi şu şekilde ilerleyip "deb" paketini indirmeliyiz.|---> yakkety/pool/stable/amd64/.https://download.docker.com/linux/ubuntu/dists/yakkety/pool/stable/amd64/ adresinden "docker-ce_17.03.1~ce-0~ubuntu-yakkety_amd64.deb" güncel sürümü indirelim.
Kurulumu tamamlamak için;
sudo dpkg -i docker-ce_17.03.1~ce-0~ubuntu-yakkety_amd64.deb
Bağımlılık hatası alınır ise:
sudo apt-get update sudo apt-get install -f Tekrar; sudo dpkg -i docker-ce_17.03.1~ce-0~ubuntu-yakkety_amd64.deb
Kurulumu test etmek için;
Benim başıma geldi. Bu istek geldiğinde mesainin bitmesine az kalmıştı, eve gidip uygun bir docker imajı indirdim (Ubuntu 16.04), sonrasında gerekli kurulumları (java 8+tomcat 7+ jenkins.war deploy) yaptım. Bu imajı evdeki makineme kaydettim. Ama bu imajı iş yerine getirmem gerekliydi. Şimdi nasıl imaj hazırlanır ve hazırlanan imaj başka bir makineye nasıl yüklenir konularına değineceğim. Bu işlemleri yapabilmek için aşağıdaki komutları sırası ile çalıştırmalıyız.
Bir paylaşımında sonuna geldik, görüşmek üzere;
Saygılarımla.
sudo docker version
sudo docker run hello-world
Docker container kurulumunu tamamladık. İlk olarak internetten bir docker imaj indirmeliyiz. Bunu yapabilmek için sırayla listelediğim komutları çalıştıralım. Docker komutları:sudo su Offical Ubuntu sürümler; docker search --filter=is-official=true ubuntu
docker pull ubuntu docker images docker run -ti <IMAGE ID> docker run -ti 0ef2e08ed3fa Ubuntu konteynere terminalden bağlandık. Konteyneri kapatmadan host makinaya dönmek için; Klavye:(
ctrl+p+q) ctrl+p ---> ctrl+q kullanabilirsiniz.
Docker komut kullanımı hakkında
docker [option] [command] [arguments]
attach Çalışan bir konteynere bağlanın
build Docker dosyasından bir imaj oluşturma
commit Bir değişiklik sonrası imaja kaydetme
cp Dosyaları / klasörleri bir konteyner ile yerel dosya sistemi arasında
kopyala
create Yeni bir konteyner oluştur
diff Konteyner dosya sistemindeki değişiklikleri incele
events Sunucudan gerçek zamanlı etkinlikler alın
exec Çalışan bir konteynerde bir komut çalıştır
export Bir konteynırın dosya sistemini tar arşivi olarak dışa aktarmak
history Bir imajın geçmişini göster
images İmaj Listesi
import Bir dosya sistemi görüntüsü oluşturmak için içerikleri bir "tar"
dosyadan içe aktarın
info Sistem bilgisi göster
inspect Konteyner veya imaj üzerinde düşük düzeyli bilgileri döndürür
kill Konteyner işlemini sonlandırır
load Tar arşivinden imaj yükleyin
login Docker giriş yapın
logout Docker'dan çıkma
logs Konteyner günlüklerini getir
network Docker ağlarını yönet
pause Konteyner içindeki tüm işlemleri duraklatın
port Konteyner için bağlantı noktası eşlemelerini veya belirli bir yönlendirme
listesini listeleyin
ps Konteyner listesi
pull Bir imaj veya Konteynerı çalışma alanına çekmek
push Bir imajı veya bir konteyneri uzak sunucuya itme
rename Konteyner ismini değiştir
restart Konteynerı yeniden başlat
rm Bir yada daha fazla konteyneri silme
rmi Bir yada daha fazla imajı silme
run Bir komutu yeni bir konteynerde çalıştırın
save Bir veya daha fazla imajı tar arşivi şeklinde kaydedin
search Docker Hub'da imaj arayın
start Bir veya daha fazla durdurulmuş konteynerı başlatır
stats Konteyner kaynak kullanımı istatistikleri görüntüleme
stop Çalışan bir konteynırı durdurur
tag Resmi depoya etiketleme
top Bir konteynerın çalışan süreçlerini görüntüleme
unpause Duraklatılmış bir konteynerda tüm işlemlere devam eder.
update Bir veya daha fazla konteynırın yapılandırmasını güncelleme
version Docker sürüm bilgisini göster
volume Docker yığınlarının yönetimi
wait Konteyner bekletme
Buraya kadar herşey yolunda gitti,kurulum yaptık,imajı çalıştırdık. Şimdi ise bir konteynere ihtiyacımız olan paketleri kurarak kendi imajımızı oluşturmaya sıra geldi.
Örneğin iş yerinde docker konteyner üzerinde jenkins CI çalıştırmamız istense ayrıca internet bağlantısında problem var docker repolara da ulaşamıyoruz!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ne yapmalıyız?
Benim başıma geldi. Bu istek geldiğinde mesainin bitmesine az kalmıştı, eve gidip uygun bir docker imajı indirdim (Ubuntu 16.04), sonrasında gerekli kurulumları (java 8+tomcat 7+ jenkins.war deploy) yaptım. Bu imajı evdeki makineme kaydettim. Ama bu imajı iş yerine getirmem gerekliydi. Şimdi nasıl imaj hazırlanır ve hazırlanan imaj başka bir makineye nasıl yüklenir konularına değineceğim. Bu işlemleri yapabilmek için aşağıdaki komutları sırası ile çalıştırmalıyız.
docker images
docker save -o /home/mehmet/ubuntu.tar ubuntu
ubuntu.tar dosyasını bir usb belleğe kopyalayıp, docker kurulu olan bir başka makineye
kopyaladıktan sonra;
docker load -i ubuntu.tar
Komutu ile yüklüyoruz. Daha fazla bilgi için : http://stackoverflow.com/questions/23935141/how-to-copy-docker-images-from-one-host-to-another-without-via-repository
NOT:Bu arada unutmadan bir imajda değişiklerin kalıcı olabilmesi için kurulum işlemleri
sonrası;
docker ps
docker commit <
CONTAINER ID > image_name
docker commit b4154ba90e3c ubuntu-jenkins
docker images
Bu "commit"işlemini yapmazsak docker konteyneri kapattığımızda bütün kurulumlar atmosfere
karışır ve bir daha da gelmez :) Sonra Ah Vah demeyin...
Son olarak ağır bir docker run komutu ile paylaşıma son vermek istiyorum. Bu komuttan önce yeni bir docker network ağı oluşturup sonrasında yüklediğimiz Jenkins CI konteyneri bu network üzerinden static bir ip adresi ve hostname ile multi port açarak(22 ve 8080) ayrıca jenkins CI imajdaki "/etc/hosts" dosyasınada adres ekleyerek çalıştıracağız.Docker network ağı oluşturma:
docker network create --subnet=172.18.0.0/16 mocal
ifconfig -a
Network tanımı yaptık bu
172.18.0.0/16 kesmede 65536 ip adresi alınabilir.İsterseniz /24
kesme(256 host) kullanın. Daha fazl bilgi için: http://stackoverflow.com/questions/27937185/assign-static-ip-to-docker-container
Herneyse devam ediyorum. İşte Jenkins CI için static ip adres| hostname|/etc/hosts|22ve8080|
docker run -h jenkins --net mocal --ip 172.18.0.20 --add-host="mocal01:172.18.0.1" -p 2222:22 -p 81:8080 -ti ubuntu-jenkins /bin/bash
Kısaca bu komutu açıklayım. -h hostname --net mocal networkü --ip 172.18.0.20 static ip
--add-host="mocal01:172.18.0.1" /etc/hosts dosyasına girdi. -p 2222:22 -p 81:8080 ise
konteynerde çalışan ssh servisi host makinanın 2222 portuna yine konteynerde çalışan
tomcat servisin 8080 portunu host makinanın 81 portuna yönlendiği, -ti ubuntu-jenkins
/bin/bash ise ubuntu-jenkins konyetnere terminal ile bağlan demek. Konteyner çalıştıktan
sonra service ssh start && /opt/tomcat/bin/.catalina.sh start komutları ile servisleri
başlatalım.
Jenkins ve ssh servisleri kontrol edelim.Jenkins web arayüz Dış dünyadan ssh ile docker Jenkins CI konteynere bağlantı Host üzerinde ssh ile bağlantı:Docker hub url : https://hub.docker.com/r/mehmetocal79/ubuntu/
Bir paylaşımında sonuna geldik, görüşmek üzere;
Saygılarımla.
Mehmet ÖCAL 2017
iletişim:mehmetocal79@gmail.com
Hiç yorum yok:
Yorum Gönder