Docker qurulması
Biz dockerin qurulması və ilkin anlayışlar ətrafında bəhs edəcəyik. Bu məqsədlə iki ədəd linux host, centos7 və ubuntu16 istifadə edəcəyik. Gələcək məqalələrdə həm bu host-lar , həmdə xüsusi docker üçün nəzərdə tutulmuş linux distributivlər üzərində cluster qurulmasını incələyəcəyik. Docker qurulması üçün 64-bit əməliyyat sistemi və 3.10 və ya daha yuxarı səviyyə kernel versiyası tələb olunur. Linux terminalında uname -r yazaraq hazırkı kernelin versiyasını müəyyən edə bilərik. İlkin olaraq sistemlərin yenilənməsi (update) və qurulma işinin root istifadəçisindən ayrıca daha az səlahiyyətli istifadəçi tərəfindən icra edilməsi tövsiyyə olunur. Məqaləni uzatmamaq üçün mən root istifadəçisi ilə davam edəcəm.
Centos 7
kernelin yenilənməsinin mümkün olduğunu nəzərə alaraq dəyişikliklərin tətbiqi üçün sistemi yenidən başlatmağımız tövsiyyə olunur.
yum update -y;reboot
Paket menegeri vasitəsi ilə dockeri install etmək üçün tələb olunan docker repo-nu əlavə edək
tee /etc/yum.repos.d/docker.repo<<-'EOF' [dockerrepo] name=Docker Repository baseurl=https://yum.dockerproject.org/repo/main/centos/7/ enabled=1 gpgcheck=1 gpgkey=https://yum.dockerproject.org/gpg EOF
Docker -i yum vasitəsi ilə yükləyək və sistemə quraşdaraq.
yum install docker-engine –y
Docker xidmətinin system yüklənərkən avtomatik işə düşməsini aktivləşdirək
systemctl enable docker.service
Docker xidmətini işə salaq və işlək olduğunu yoxlayaq.
systemctl start docker systemctl status docker
Ubuntu
apt-get update apt-get upgrade apt-get install apt-transport-https ca-certificates
Gpg açar və repo -nu əlavə edək.
apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D /etc/apt/sources.list.d/docker.list - faylını yaradaq və aşağıdakı sətri əlavə edək. deb https://apt.dockerproject.org/repo ubuntu-xenial main
Paket meneger-in indeksini yeniləyək
apt-get update
Tələb olunan paketləri və docker-engine əlavə edək.
apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual apt-get install docker-engine
Docker xidmətini işə salaq və aktivləşdirək
systemctl enable docker systemctl start docker systemctl status docker
Beləliklə docker-engine hər iki host serverdə dockeri quraşdırdıq.
Docker engine nədir?
Docker-engine aşağıdakı komponentlərdən ibarət olan client-server prinsipi əsasında işləyən program təminatıdır.
- Arxa fonda çalışan deamon prosesi adlanan server hissəsi
- Proqramların deamon prosesi ilə danışa və ona əmrlər göndərə biləcəkləri REST API interfeys
- CLI client – terminaldan istifadə olunacaq alət (məs: docker)
Docker daemon prosesi host serverdə işləyir və istifadəçilər docker alətləri vasitəsi ilə bu prosesə müraciət edə bilirlər. CLI client və digər docker alətləri REST API vasitəsi ilə docker prosesinə müraciət və əmrlərini ötürürlər. Docker prosesi isə qəbul etdiyi əmrlərə uyğun olaraq image, container, şəbəkə, disk resursları və s. obyektlər üzərində əməliyyatları icra edir. (məs: docker version, docker run, docker pull)
Docker image – yalnız oxuma imkanlı(read-only) nümunə olub özündə yeni conrainter yaratmaq üçün təlimatlar saxayır. Misal olaraq özündə kiçildilmiş, yalnız minimal komponentlər saxlayan Ubuntu əməliyyat sistemi, apache web server və bizim proqram təminatını saxlayan nümunə göstərmək olar. Belə bir nümunələri (image) biz özümüz sıfırdan yarada və ya öncədən başqaları tərəfindən hazırlanmış nümunələri endirə və istifadə edə bilərik. Docker nümunələrini adi fayl olan Dockerfile adlanan fayl vasitəsi ilə təsvir etmək və yaratmaq mümkündür.
Docker container – bəhs etdiyimiz nümunələr əsasında yaradılan, işə salına bilinən instanslardır. Biz docker aləti vasitəsi ilə containerləri işə sala, dayandıra, başlada, silə və s. edə bilərik.
Docker registry – image-lərin, nümunələrin kitabxanasıdır. Registry-yə image-lərin saxlanıldığı və paylaşıldığı yer kimi baxa bilərik. Registry ümumi(public) və ya şəxsi(private) ola bilər. Registry –yə linux paket repoları kimi baxa bilərik. Registry docker xidmətinin işlədiyi eyni serverdə, kənar serverdə və ya public web resurs üzərində ola bilər. Biz hazırladığımız docker image-ləri bu registry-lərə əlavə edə bilərik və istədiyimiz zaman registrydən image-ləri endirib istifadə edə bilərik. Misal üçün, web program təminatı üçün özündə Ubuntu + nginx + ruby on rails saxlayan testapp01 adlı docker image hazırladıqdan sonra onu daxili docker registry-yə əlavə edə bilərik. Bundan sonra hər dəfə bizdə bu tələblərə uyğun platforma lazım olduqda, istənilən docker-engine qurulmuş olan host serverdə testapp01 image-ini yükləyə və qısa zamanda istədiyimiz qədər container işə sala bilərik. Etdiyimiz dəyişiklikləri məsələn yeni testapp01/auth_module adlı image-ə əlavə edib yenidən registry-yə yükləyə bilərik.
Docker Hub – dockerin rəsmi registry-sıdır. Docker Hub -da böyük sayda vendorların özləri və başqaları tərəfindən əlavə olunmuş image-lər mövcuddur. Biz həm image-lər üzrə axtarış apara, onları endirib istifadə edə, həm də öz image-lərimizi əlavə edə bilərik. Bizə lazım olan image-in bizdən öncə orda hazır olması mümkündür. Misal üçün bizə test etmək üçün asterisk voip sistemi lazımdır, biz Docker Hubdan asterisk-i endirib vaxt itirmədən container yarada və testlərimizi edə bilərik. Docker Hubda biz istifadəçi hesabı yardıb, öz repo-larımızı da istifadə edə bilərik.
Docker – ilkin istifadə
Docker client və serverin , API –in, go dilinin versiyasını görmək üçün docker version əmrindən istifadə edirik.
root@host02:~# docker version Client: Version: 1.12.2 API version: 1.24 Go version: go1.6.3 Git commit: bb80604 Built: Tue Oct 11 18:29:41 2016 OS/Arch: linux/amd64 Server: Version: 1.12.2 API version: 1.24 Go version: go1.6.3 Git commit: bb80604 Built: Tue Oct 11 18:29:41 2016 OS/Arch: linux/amd64 root@host02:~#
Sistem səviyyəsində docker mühiti haqqında docker info əmri vasitəsi ilə daha geniş məlumat əldə edə bilərik.
root@host02:~# docker info | more Containers: 3 Running: 1 Paused: 0 Stopped: 2 Images: 5 Server Version: 1.12.2 Storage Driver: aufs Root Dir: /var/lib/docker/aufs Backing Filesystem: extfs Dirs: 17 Dirperm1 Supported: true Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: host bridge overlay null Swarm: inactive Runtimes: runc Default Runtime: runc Security Options: apparmor seccomp Kernel Version: 4.4.0-21-generic Operating System: Ubuntu 16.04.1 LTS --More--
İlk image-in istifadə edilməsi.
Biz nginx üçün docker image endirmək və 2 nginx container işə salmaq istəyirik. İlk olaraq Docker Hub –da bu image-in olub-olmadığını yoxlaya bilərik. Rəsmi image olduğu halda onun istifadəsi daha məqsədə uyğun olar. İstənilən halda biz özümüz istədiyimiz kimi image hazırlayıb onu istifadə edə bilərik. docker search nginx
root@host02:~# docker search nginx NAME DESCRIPTION STARS OFFICIAL AUTOMATED nginx Official build of Nginx. 4367 [OK] jwilder/nginx-proxy Automated Nginx reverse proxy for docker c... 831 [OK] richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable ... 286 [OK] million12/nginx-php Nginx + PHP-FPM 5.5, 5.6, 7.0 (NG), CentOS... 76 [OK] webdevops/php-nginx Nginx with PHP-FPM 58 [OK] maxexcloo/nginx-php Framework container with nginx and PHP-FPM... 58 [OK] bitnami/nginx Bitnami nginx Docker Image 18 [OK] evild/alpine-nginx Minimalistic Docker image with Nginx 8 [OK] million12/nginx Nginx: extensible, nicely tuned for better... 8 [OK] gists/nginx Nginx on Alpine 8 [OK] maxexcloo/nginx Framework container with nginx installed. 7 [OK] webdevops/nginx Nginx container 5 [OK] 1science/nginx Nginx Docker images based on Alpine Linux 4 [OK] ixbox/nginx Nginx on Alpine Linux. 3 [OK] drupaldocker/nginx NGINX for Drupal 3 [OK] --More--
Docker Hub-da nginx-lə bağlı olan image-lərin siyahısı bizə qaytarılır.
NAME – image-in adı, 1 –ci nginx adlı imagə qarşısında heç bir ad göstərilmir, bu onun rəsmi image olmasını göstərir. Digər image-lərin qarşısında göstərilən ad onun hansı repositoriyə, kimə aid olmasını göstərir.2-ci image jwilder repositoriyasına aiddir. Misal üçün https://hub.docker.com/r/jwilder/ – bu ünvandan yoxlaya bilərik.
DESCRIPTION – image haqqında qısa təsvir
STARS – istifadəçilərin rəylərinə əsasən image-in reytinqini göstərir.
OFFICIAL – image-in rəsmi repozitoriyadan olub-olmamasını göstərir. Rəsmi olan image-lər daha etibarlı və daha aydın sənədləşidirlmiş olur.
AUTOMATED – docker image-lərin avtomatik build olunması mümkündür. Mes: image sahibinin git hesabına əlavə olunan kodlar avtomatik olaraq image-ə build edilir.Bu imkanın istifadə edildiyini bildirir.
Axtarışlarımıza müəyyən filterlər tətbiq edə bilərik :
docker search nginx –limit 5 – yalnız ilkin 5 nəticəni göstərmək
docker search nginx –filter is-official=true – yalnız rəsmi olan image-ləri göstərmək
docker search nginx –filter is-automated=true – avtomatik build imkanını istifadə edənlər
root@host02:~# docker search haproxy --filter is-official=true NAME DESCRIPTION STARS OFFICIAL AUTOMATED haproxy HAProxy - The Reliable, High Performance T... 553 [OK] root@host02:~#
dokcer pull – registry-dən image və ya reponu endirmək üçün istifadə edilir.
docker search nginx – əmri nəticəsində aldığımız image-lərdən bizə lazım olanı adını yazmaqla endirə bilərik. Biz rəsmi image-i endirəcəyik. docker pull nginx
root@host02:~# docker pull nginx Using default tag: latest latest: Pulling from library/nginx 6a5a5368e0c2: Pull complete 20a0fbbae148: Pull complete 2fbd37c8684b: Pull complete Digest: sha256:e40499ca855c9edfb212e1c3ee1a6ba8b2d873a294d897b4840d49f94d20487c Status: Downloaded newer image for nginx:latest root@host02:~#
docker pull nginx -a və ya docker images –all-tags=true – repoda olan bütün image-ləri endirəcək.
docker images – local image-lər haqqında məlumatı göstərir.
REPOSITORY – image-in mənsub olduğu repozitoriyanı göstərir.
TAG – image-in yarlıkını(tag) göstərir. Bir image üçün bir neçə yarlık təyin edilə bilər. Susmaya görə latest yarlıkı əlavə olunur. docker pull debian – yazdıqda, debian:latest image-i endirilir. Tag image -ə verilən qısa deskriptiv addır.
IMAGE ID – Hər bir image-ə verilən unikal id. 0-dan yaradılan və valideyni olmayan image base image adlanır. Base image üzərində digər yeni image-ləri yığa bilərik. docker history image_name bu layları bizə göstərəcək. Image id əsasında biz cari image -nin aşağı laylarını görə bilirik. Hər bir layda əlavə olunan hissəni və həcmi görə bilirik. İD-lərə diqqət edək.
CREATED – image-in yaradılma, yığılma vaxtını bizə göstərir.
SIZE – image-in həcmini göstərir. Eyni base image-dən yaradılmış bir neçə image olmasına baxmayaraq həcm yalnız bir image-in həcmi qədərdi.Fərqli image-lər endirdikdə isə onların həcminə uyğun olaraq tutduqları həcm artır.
Nginx web server-i container daxilində işlətməklə bir nümunəyə baxaq. Mövzunu növbəti Məqalədə davam etdirəcəyik.
docker pull nginx – image-i endiririk
docker run –name websrv01 -it -p 8080:80 -d nginx – nginx image-indən websrv01 adlı container işə salıram və host serverin 8080 portuna gələn müraciətləri container daxilində işləyən nginx serverə ötürürəm. Yoxlamaq üçün localhost-dan və kənardan 8080 portuna qoşularaq test edirəm.
root@host02:~# docker run --name websrv01 -it -p 8080:80 -d nginx b6efca26590319085f19be167c87db65b7ff0b9167d27324204cc0178d8d474a root@host02:~# root@host02:~# netstat -ntlp | grep docker tcp6 0 0 :::8080 :::* LISTEN 6246/docker-proxy root@host02:~# root@host02:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b6efca265903 nginx "nginx -g 'daemon off" 9 seconds ago Up 9 seconds 443/tcp, 0.0.0.0:8080->80/tcp websrv01 root@host02:~# root@host02:~# curl localhost:8080 | more % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 612 100 612 0 0 29030 0 --:--:-- --:--:-- --:--:-- 30600 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> --More--
Növbəti məqalədə son etdiklərimizə daha izahlı şəkildə baxacağıq.
Uğurlar.
Şərhlər ( 1 )
Kamil bəy, gözəl məqalə üçün təşəkkürlər.
Uğurlar.